ユーザー赤いドームボタンを押下し、それゆえそれは「初回時に切り替えなければならない(2状態ボタンではありません) 0 "→" 1 "&を押すと、" 1 "→" 0 "に戻ります。
したがって、押すとシリアルモニタは100msごとに "0"から "1"を出力します。ビヘイビアは、buttonStateがLOWからHIGHに切り替わることを通知します。
さらに、LEDストライプもarduinoに接続されています。したがって、ボタンステートがシリアルモニタにHIGHを表示すると、LED状態は10秒後にHIGHに切り替わり、LOW状態に切り替える前に10秒間HIGH状態のままです。
最後に、buttonStateは、ユーザーが物理的にボタンを押さずに、遅延(25秒)後にHIGHからLOWに切り替える必要があります。
問題:
この時点で、ユーザは、& LOW HIGH状態を切り替えること赤いドームボタンを押さなければなりません。したがって、ボタンの初期状態がLOWの場合、シリアルモニタに「0」が表示され、押されるとボタンはHIGHに切り替わり、シリアルモニタに「1」が表示され、もう一度押すと、 HIGHからLOWになり、シリアルモニタに "0"が表示されます。
したがって、ボタンステートをユーザーがボタンを押さずにHIGHからLOWに切り替える方法についての支援をお願いしたいと思います。
従って、 correctBehaviour:
初期状態 "0" シリアルモニタに表示され、ユーザが押下するボタンbuttonstateシリアルモニタおよび25Sのカウント後 "1" Sを示し、ボタンステートは、ユーザーがボタンを再度押さなくても、LOWに切り替わります。
コード:
const int buttonPin = 2; //the number of the pushbutton pin
const int Relay = 4; //the number of the LED relay pin
uint8_t stateLED = LOW;
uint8_t btnCnt = 1;
int buttonState = 0; //variable for reading the pushbutton status
int buttonLastState = 0;
int outputState = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(Relay, OUTPUT);
digitalWrite(Relay, LOW);
}
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)
{
switch (btnCnt++) {
case 100:
stateLED = LOW;
digitalWrite(Relay, HIGH); // after 10s turn on
break;
case 200:
digitalWrite(Relay, LOW); // after 20s turn off
break;
case 202: // small loop at the end, to do not repeat the LED cycle
btnCnt--;
break;
}
Serial.println("1");
}else{
Serial.println("0");
if (btnCnt > 0) {
// disable all:
stateLED = LOW;
digitalWrite(Relay, LOW);
}
btnCnt = 0;
}
delay(100);
}
(millis() - lastpressed> 20000){... "、私はdelay(100)を使用していますが、すべてのボタンを押して確認します。申し訳ありませんが、私は実際にあなたの意味を理解していません – Luke
、BlinkWithoutDelayの例を読んで行使し、理解しています(https://www.arduino.cc/ja/Tutorial/BlinkWithoutDelay)。まばたきについてだけでなく、すべてのノンブロッキング待ちについてです。 – datafiddler