2017-08-19 9 views
1

プッシュボタンでArduinoプロジェクトを開発しています。ボタンを押した後に実行するアクションが必要です。問題は、A6ピンとA7ピンのボタンを使用するたびに、ボタンが物理的に押されることなくHIGHを受け取るような予期しない結果が生じることです。私がボタンでデジタルピンを使用している限り、コードは正常に動作します。Arduino:プッシュボタンでA6とA7を使用する際の問題

A6ピンとA7ピンを使用して問題が発生している可能性がありますか、またはこれらのピンを考慮する必要があります。

ありがとうございます!ここで

は私のコードです:

int buttonBack = A6;    
int flagLeft, flagRight; 
int eventBack; 

int currentButtonStatus = 0; 
unsigned long currentButtonStatusStart1; 
unsigned long currentButtonStatusStart2; 
unsigned long currentButtonStatusStart3; 

const int delayFalse = 30;     
const int delayLongSingleClick = 300;  
const int delayDeltaDoubleClick = 200; 

void setup() { 
    pinMode(buttonBack,INPUT); 
} 

void loop() { 
    int eventBack = changeButtonStatus(); 
    if (eventBack > 0) { 
    if(eventBack == 1) { // single button press 
    flagLeft = 1; flagRight = 0; 
    // move motor to the left code goes here 
    } 
    if(eventBack == 4) { 
     // long button press 
     flagLeft = 0; flagRight = 1; 
     // move motor to the right code goes here 
    } 
    } 
} 

int changeButtonStatus() { 
    int event = 0; 
    int currentButtonClick = analogRead(buttonBack); 
    unsigned long timeButton = millis(); 
    switch(currentButtonStatus) { 
    case 0: 
     if(currentButtonClick) { 
     currentButtonStatus = 1; 
     currentButtonStatusStart1 = millis(); 
     } else { 
     } 
     break; 
    case 1: 
     if(currentButtonClick) { 
     if(timeButton - currentButtonStatusStart1 >= delayLongSingleClick) { 
      event = 3; 
     } 
     } else { 
     if(timeButton - currentButtonStatusStart1 < delayFalse) { 
      currentButtonStatus = 0; 
      event = 0; 
     } else if(timeButton - currentButtonStatusStart1 < delayLongSingleClick) { 
      currentButtonStatus = 2; 
      currentButtonStatusStart2 = millis(); 
     } else { 
      currentButtonStatus = 0; 
      event = 4; 
     } 
     } 
     break; 
    case 2: 
     if(currentButtonClick) { 
     if(timeButton - currentButtonStatusStart2 < delayFalse) { 
      currentButtonStatus = 1; 
     } else { 
      currentButtonStatus = 3; 
      currentButtonStatusStart3 = millis(); 
     } 
     } else { 
     if(timeButton - currentButtonStatusStart2 > delayDeltaDoubleClick) { 
      currentButtonStatus = 0; 
      event = 1; 
     } 
     } 
     break; 
    case 3: 
     if(currentButtonClick) { 
     } else { 
     if(timeButton - currentButtonStatusStart3 < delayFalse) { 
     } else { 
      event = 2; 
      currentButtonStatus = 0; 
     } 
     } 
     break; 
    } 
    return event; 
} 
+0

ここにコードを記入してください。いくつかの努力を示す。 – Billa

+0

質問のある投稿の下にコードを追加しました –

答えて

1

A6とA7 は、GPIO機能を持っていません。アナログ入力としてのみ使用することができます。つまり、デジタル入力をエミュレートしようとすると、外部プルアップを提供する必要があります。

+0

提供する必要がある外部プルアップの種類は何ですか?プルアップを使用すると、アナログピンの値がHIGHになります。この場合、プッシュボタンのプルダウンを指定する必要がありますか?申し訳ありませんが、そのような質問については、私は非常にそれに新しいとインターネットで任意の明確な情報を見つけることができます。 Thks –

+0

ボタンはデジタル入力のようにグランドに接続されていますか? –

+0

いいえ、プッシュボタンのプルダウンを使わずにA6とA7でプルアップを使用しました。 –

関連する問題