Доброго времени суток! Есть кнопка, кратковременное нажатие которой должно запускать одну часть кода, долговременное нажатие другую. Код (C++): if(auth == true) { if(btncheck == false) { if(digitalRead(BTN) == HIGH) { btntimer = millis(); btncheck = true; } } if((millis() - btntimer) >= 100 && btncheck == true) { if(digitalRead(BTN) == HIGH) { Serial.println("<320>"); // Кратковременное нажатие на кнопку btncheck = false; } else { btncheck = false; } } } Сейчас программа разлчичает только кратковременное нажатие. Как сделать так, чтобы на одной кнопке могло работать несколько режимов?
Различать нажатие и отпускание кнопки. В момент нажатия запоминать время, в момент отпускания опять засекать и сравнивать со временем нажатия и в зависимости от разницы делать одно или другое действие.
Вот Код (C++): if(btncheck == false) { if(digitalRead(BTN) == HIGH) { btntimer = millis(); newtimer = false; btncheck = true; } } if((millis() - btntimer) >= 100 && btncheck == true) { if(digitalRead(BTN) == HIGH && newtimer == false) { newtimer = true; } else { btncheck = false; } if(newtimer == true) { if((millis() - btntimer) >= 1000) { if(digitalRead(BTN) == LOW) { Serial.println("BTN Switch Short"); // Короткое нажатие btncheck = false; // Остановка таймера } else if((millis() - btntimer) >= 5000) { if(digitalRead(BTN) == HIGH) { Serial.println("BTN Switch Long"); // Длинное нажатие btncheck = false; // Остановка таймера } } } } } Я правильно мыслю?
На самом деле, после короткого нажатия на кнопку, нужно выполнять действие которое должно выполняться по короткому нажатию, Можно еще и пикнуть, если есть чем. А вот если кнопку удерживают и не отпускают, то, через какое-то время, нужно выполнить то действие которое Вы хотите выполнить по длинному нажатию. Иначе, получится, что действие по короткому нажатию, Вы будите выполнять по отпусканию кнопки, а это не комфортно, нет ощущений в момент срабатывания кнопки.
Вы прикалываетесь? Рядом терка http://forum.amperka.ru/threads/999-вопросов-по-программированию.16073/