Гуру форума, вопрос к вам. Есть задумка:
Каждой функции прописал вывод в Serial своего символа. но если нажимать не следуя коду, то нет-нет да и проскочит выполнение не по порядку. Например,
Может кто подскажет изящное решение моей проблемы. В перспективе хочу сбрасывать состояние по истечению времени ели не нажата необходимая кнопка.
- Ждем нажатия любой из 2х кнопок.
- Если была нажата btn1, то больше ни на что не реагируем и ждем нажатия btn2.
- При нажатии на btn2 - идем в п.1
- Если была нажата кнопка btn2, то ни на что не реагируем и ждем нажатия btn1.
- При нажатии на btn1 - идем в п.1
C++:
uint8_t btn1 0;
uint8_t btn2 1;
uint8_t flag1;
uint8_t flag2;
void setup() {
pinMode(btn1, INPUT);
pinmode(btn2, INPUT);
flag1 = 0;
flag2 = 0;
}
void loop() {
int readBtn1 = digitalRead(btn1);
int readbtn2 = digitalRead(btn2);
if (readBtn1 == 1) { // если нажата btn1
delay(100); // delay ставлю для подавления дребезга контактов
func1();
flag1 = 1;
}
if (readBtn2 == 1 && flag1 == 1) { // если после нажатия btn1 была нажата btn2
delay(100);
func2();
flag1 = 0;
readBtn1 = 0; // сбрасываем состояние btn1
readBtn2 = 0; // сбрасываем состояние btn2
}
if (readBtn2 == 1) { // если нажата btn2
delay(100);
func3();
flag2 = 1;
}
if (readBtn1 == 1 && flag2 == 1) { // если после нажатия btn2 была нажата btn1
delay(delay);
func4();
readBtn1 = 0; // сбрасываем состояние btn1
readBtn2 = 0; // сбрасываем состояние btn2
}
}
- click bnt1
- click btn2
- click btn2
- click btn2
- autoclick btn1
- autoclick btn2
Может кто подскажет изящное решение моей проблемы. В перспективе хочу сбрасывать состояние по истечению времени ели не нажата необходимая кнопка.