непрерывная печать при нажатии кнопки
При нажатии кнопки я хочу прочитать значение... один раз. Если я нажимаю (удерживаю) кнопку, я получаю непрерывную печать button1Pushed
if(button1State == LOW) {
Serial.println("button1Pushed");
}
Но если я попытаюсь решить это так, ничего не произойдет, ни одного отпечатка. Что я упускаю?
int button1State = digitalRead(button1);
int lastButton1State;
if(button1State != lastButton1State){
if(button1State == LOW){
Serial.println("button1Pushed");
}
}
lastButton1State = button1State;
@Niles, 👍0
1 ответ
Лучший ответ:
▲ 2
lastButton1State
не инициализирован и поэтому не имеет строго определенного значения. В вашем случае он имеет значение 0
(что является случайным, это не связано с неявной инициализацией, которая выполняется только для глобальных переменных). Условие if(button1State != lastButton1State)
становится истинным, только если кнопка отпущена.
Вы можете проверить это, изменив
if(button1State == LOW){
Serial.println("button1Pushed");
}
в
if(button1State == HIGH){
Serial.println("button1 released");
}
Следующее должно работать:
int last_button_state=HIGH; // инициализируем значение HIGH, чтобы кнопка не срабатывала на первой итерации
void setup () {
// все, что вы хотите сделать здесь
}
void loop() {
int button_state=digitalRead(button1);
if (button_state!=last_button_state && button_state==LOW) {
Serial.println("button pressed");
}
else if (button_state!=last_button_state && button_state==HIGH) {
Serial.println("button released");
}
last_button_state=button_state;
}
,
@Sim Son
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
ваше предложение дает мне тот же результат, все еще бесконечный повтор серийного номера., @Niles
Вы видели изменение, которое я сделал? Я забыл добавить
last_button_state=button_state;
... если это все еще не работает, опубликуйте весь код, @Sim SonЯ попробовал ваше предложение в пустом скетче, и он работает! Вероятно, в остальной части моего кода есть что-то ошибочное (он довольно большой... для меня... как любителя), @Niles
Нашел! Я помещаю int last_button_state=HIGH; в петле.....пфф..пора спать, @Niles
@ Найлс, пожалуйста, посмотри мой комментарий, @Sim Son