2017-04-08 6 views
0

私はTexas Instruments LauncherPad MSP432 P401RとEnergiaで作業しています。 私はbutton1を押したまま、button2を押す回数を数える小さなプログラムを書こうとしています。マイクロコントローラ - ボタン 'リスナーを押したまま'

int push1_listener = -1; 
int push2_listener = -1; 
int digit = 0; 

void setup() { 
    Serial.begin(9600); 
    pinMode(PUSH1, INPUT_PULLUP); 
    pinMode(PUSH2, INPUT_PULLUP); 
} 

void loop() { 
    push1_listener = digitalRead(PUSH1); 
    push2_listener = digitalRead(PUSH2); 
    while(push1_listener == 0) { 
    if(push2_listener == 0) { 
     digit++; 
     delay(200); 
     Serial.print("btn2"); 
    } 
    Serial.print("btn1"); 
    } 
} 

プログラムはwhileループに入り、シリアルコンソールで「btn1」が表示されます。しかし、プログラムはifの場合には入りません。

誰かが私を助けることができますか?

+1

デバッガ。デバッガを使用します。インサーキットエミュレータ(ICE)を使用することがあります。 JTAGデバッガを使うこともできますし、リモートデバッグユーティリティを使うこともできます。 –

+0

'delay'関数の時間単位は何ですか? –

+0

よろしくお願いします。 Milliseconds – cmplx96

答えて

1

コードはwhileループに入る前に、両方のプッシュボタンの状態を一度読み込みます。その後、whileループ内のプッシュボタンの状態を読み取ることはありません。したがって、プッシュボタン変数の値は、whileループ内で決して変更されません。 whileループ内でプッシュボタンの状態を繰り返し読み返す必要があります。

たぶん、このような何か:

while ((push1_listener = digitalRead(PUSH1)) == 0) { 
    push2_listener = digitalRead(PUSH2); 
    if (push2_listener == 0) { 
     ... 
    } 
    ... 
} 
+1

そして**ボタンを押した回数**を数えたい場合は、1から0へのトランジションをカウントする必要があります。これを行うには、ボタンの状態を覚えておくために、ポーリングを続ける。変数がボタンと異なる場合、何かが起きました。何が起こったかを見て、変数を更新し、ポーリングを続行します。 – linuxfan

+0

ありがとう@kkrambo! アドバイスをいただき、ありがとうございます@ linuxfan! – cmplx96

関連する問題