непрерывная печать при нажатии кнопки

При нажатии кнопки я хочу прочитать значение... один раз. Если я нажимаю (удерживаю) кнопку, я получаю непрерывную печать button1Pushed

    if(button1State == LOW) { 
     Serial.println("button1Pushed");
  }

Но если я попытаюсь решить это так, ничего не произойдет, ни одного отпечатка. Что я упускаю?

 int button1State = digitalRead(button1);
  int lastButton1State;
  
  if(button1State != lastButton1State){
      if(button1State == LOW){
        Serial.println("button1Pushed");
               }
        }

  lastButton1State = button1State;

, 👍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;
}
,

ваше предложение дает мне тот же результат, все еще бесконечный повтор серийного номера., @Niles

Вы видели изменение, которое я сделал? Я забыл добавить last_button_state=button_state;... если это все еще не работает, опубликуйте весь код, @Sim Son

Я попробовал ваше предложение в пустом скетче, и он работает! Вероятно, в остальной части моего кода есть что-то ошибочное (он довольно большой... для меня... как любителя), @Niles

Нашел! Я помещаю int last_button_state=HIGH; в петле.....пфф..пора спать, @Niles

@ Найлс, пожалуйста, посмотри мой комментарий, @Sim Son