Я делаю калькулятор с Arduino Uno. Я использую клавиатуру 4x4 и ЖК-дисплей 16x2 для дисплея. Вот мой вопрос: если кнопки на клавиатуре остаются нетронутыми в течение 1 минуты, программа выполнит функцию. Как я могу это сделать?
Выполнение функции через 1 минуту, если кнопки остаются нетронутыми в Arduino Uno
Ответы (1)
Вы можете использовать millis()
для измерения времени и простой флаг boolean
с digitalRead()
для определения того, была ли нажата кнопка. Должно быть что-то вроде этого (еще не проверял):
unsigned long previousMillis = 0;
long interval = 60000;
int buttonPin = 4;
boolean buttonReleased=false;
void setup(){
}
void loop(){
unsigned long currentMillis = millis();
// edit, thanks to frarugi87
if (digitalRead(buttonPin) == LOW){
buttonReleased = true;
previousMillis = currentMillis;
}
if((currentMillis - previousMillis > interval)&&buttonReleased ) {
previousMillis = currentMillis;
buttonReleased =false;
// execute a function
}
}
РЕДАКТИРОВАТЬ: исправьте состояние клавиатуры.
person
user3704293
schedule
05.05.2015
в кнопках клавиатуры это не ВЫСОКИЙ или НИЗКИЙ, я немного отредактировал код, но он не работает.
- person Kayahan Albayrak; 05.05.2015
Часть
currentMillis - previousMillis > interval
— это хорошо зарекомендовавший себя фрагмент кода для Arduino, и он должен работать. Вы можете протестировать его отдельно с более низким интервалом (например, interval=1000;
). То, как вы активируете код, зависит от кода вашей клавиатуры. Я предполагал, что вы используете простые тактильные кнопки или подобное оборудование, которое вы можете адаптировать к приведенному выше примеру кода.
- person user3704293; 05.05.2015
Это не может работать. Правильный код —
if (digitalRead(buttonPin) == LOW) { buttonReleased = true; previousMillis = currentMillis; }
, потому что вы должны сбрасывать previousMillis
каждый раз, когда нажимаете кнопку. buttonReleased
теперь должно называться executeFunction
или что-то в этом роде, потому что это просто используется, чтобы избежать двойного запуска функции.
- person frarugi87; 06.05.2015