2016-08-23 4 views
0

機能:Arduinoのボタンが連続シリアルにない "1"

シリアルモニターはbuttonStateがLOWであることを知らせる、100ミリ秒ごとに "0" を印刷しています。

しかし、ユーザーが赤いドームボタンRed Dome Buttonを押した場合、buttonStateがHIGHであり、シリアルモニタでは、赤いドームボタンが再び押されるまで、100msごとに「1」が印刷されるはずです。 buttonStateがLOWでシリアルモニタが "0"を出力していることを通知します。

問題:

シリアルモニタが最初に100ms毎に「0」を出力している、と私は赤いドームボタンを押したとき、buttonStateはHIGHを返し、シリアルモニタに出力している「1 "ただし、シリアル "1"は保持されず、直ちに "0"に戻ります。

ボタンを連続して押すと、シリアル "1"はシリアルモニタでのみ表示されます。

意味:

正しい挙動

初期状態 - > 0のすべてのシリアルシリアルモニタ意志出力ユーザがボタンを押すまで、ユーザはシリアルモニタ意志出力を全てシリアル1のボタンを押すまで私は

:再び出力はシリアル0

現在の行動に変更されますシリアルモニタはユーザがボタンを押すまでシリアル0を出力し、シリアルモニタはシリアル1を出力しますが、シリアルは0に戻ります。

したがって、シリアル状態を私はボタンを押した後にシリアル1と私は再びボタンを押すときにシリアル0が表示されますか?私はそれにいくつかの助けが必要です。ありがとう

コード:

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 

void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 

    // check if the pushbutton is pressed. 
    // if it is, the buttonState is HIGH: 
    if (buttonState == HIGH) { 
    Serial.println("1"); 
    } 
    else { 
    Serial.println("0"); 
    } 
delay(100); 
} 

答えて

1

あなたが(2つのステートボタンを好きではない)それを解放した後、あなたのボタンが押されていないなるようです。そのため、ボタンを押したときに切り替える独自の状態変数を作成する必要があります。

ボタンからHIGHが検出されたときの状態を変更したいとします。これは、HIGHモードの場合だけでなく、LOWからHIGHへの変化を検出する必要があることを意味します。これを行うには、ボタンの最後の状態を保存する必要があります。さらに、LOWからHIGHへの変化が検出されたときに切り替える出力状態を維持する必要があります。

const int buttonPin = 2;  // the number of the pushbutton pin 

// variables will change: 
int buttonState = 0;   // variable for reading the pushbutton status 
int buttonLastState = 0; 
int outputState = 0; 


void setup() { 
    // initialize the pushbutton pin as an input: 
    pinMode(buttonPin, INPUT); 
    Serial.begin(9600); // Open serial port to communicate 
} 

void loop() { 
    // read the state of the pushbutton value: 
    buttonState = digitalRead(buttonPin); 
    // Check if there is a change from LOW to HIGH 
    if (buttonLastState == LOW && buttonState == HIGH) 
    { 
    outputState = !outputState; // Change outputState 
    } 
    buttonLastState = buttonState; //Set the button's last state 

    // Print the output 
    if (outputState) 
    { 
    Serial.println("1"); 
    } 
    else 
    { 
    Serial.println("0"); 
    } 
    delay(100); 
} 
+0

一度ユーザーによって押されたスイッチのような2つの状態ボタンの行為は、それが回路を閉じ、もう一度押されると、それは回路を開きます:あなたのコードで

は次のようなものでなければなりません。私はそうであるのですか?だから明らかに私が持っている物理的なボタンは、割り込みボタンです。私は正しい? – Luke

+0

あなたのボタンはあなたが言っているようだと思います。コードは機能しましたか? – dubafek

+0

はい、しました。ありがとう – Luke

関連する問題