사용자가 적색 돔 버튼을 누르면, 따라서 그것은 "제 프레스에 전환한다 (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"을 표시합니다.
따라서 단추를 누르지 않고도 buttonstate를 HIGH에서 LOW로 전환하는 방법에 대한 도움을 요청하고 싶습니다.
따라서 correctBehaviour :
초기 상태 "0"이 S 시리얼 모니터에 도시되며, 사용자가 버튼 buttonstate가 "1"직렬 모니터 및 25S의 카운트 후 도시 누르면, buttonstate는 사용자가 버튼을 다시 누르지 않아도 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) {... ", 지연 (100)은 모든 버튼 누름을 확인하는 것입니다. 죄송합니다. 실제로 의미가 없습니다. – Luke
BlinkWithoutDelay 예제를 읽고 연습하고 이해하십시오. https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay.그것은 단지 깜빡임에 관한 것이 아니라 모든 비 차단 대기에 관한 것입니다. – datafiddler