Функциональность:Предотвращение ButtonState Переключение от высокого к низкому
Перед красная кнопка купол нажата (не 2 состояние кнопки), серийный монитор напечатает список «0», и когда красный кнопка купола, состояние кнопки переключается с LOW на HIGH, поэтому на последовательном мониторе будет распечатываться список «1».
Однако, когда кнопка находится в состоянии ВЫСОКИЙ, серийный монитор печатает «1», и пользователь не сможет переключать состояние кнопки от HIGH до LOW. Следовательно, кнопка может переключаться только с HIGH на LOW автоматически после периода, задержки (25 секунд).
Поэтому правильное поведение:
Исходное состояние печати => 00000000000000 (когда пользователь нажимает на красную кнопку купольной => изменение buttonstate низкого до высокого) 111111111111111111 (когда пользователь нажимает на кнопку, ничего не происходит) 111111111111111111 (после задержки 25s, buttonState будет переключаться от высокого к низкому) 0000000000000
НОМЕРА:
На данный момент пользователи могут переключаться между LOW и HIGH, а HIGH - LOW. Значение: поток => 00..000 (кнопка нажимается пользователем, переключается с LOW на HIGH) 111 ... 111 (кнопка нажимается пользователем, переключается с HIGH на LOW) 0000 ...
И я не совсем уверен в как включить кнопку только для переключения с LOW на HIGH, но отключите кнопку для переключения с HIGH на LOW.
Значение, когда пользователь нажимает кнопку, может изменять состояние кнопки от «0» до «1», но не может изменить состояние кнопки, когда оно находится в «1».
Следовательно, я хотел бы запросить некоторую помощь, которая позволит выполнить следующее правильное поведение.
Благодаря
Код:
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 250:
digitalWrite(Relay, LOW); // after 20s turn off
//Toggle ButtonState to LOW from HIGH without user pressing the button
digitalWrite(buttonPin, LOW);
break;
case 252: // 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);
}
Чтобы подтвердить, что это позволить buttonState оставаться включенными в ВЫСОКОМ: «1», для установленного периода времени, пока по истечению времени (20 лет) , он автоматически переключится на LOW. Во-вторых, когда buttonState находится в HIGH в течение периода (20 с), переключение HIGH -> LOW не произойдет. я прав? – Luke