Проблема с условиями

Apocalyps
Offline
Зарегистрирован: 26.07.2015

Пишу код инкубатора для ATmega8(Arduino).

Возникла проблема, что при нажатии button2 условие начинает выполняться циклично, хотя кнопка уже отжата. Помогите решить. Вот код:

#include <LiquidCrystal.h>
#define button1 8
#define button2 9
#define button3 10
uint8_t a = 0;

// инициализация пинов
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  lcd.print("Otl");
}

void loop() {
  if (digitalRead(button2) == HIGH) {
    if (a > 2) {
      a = 0;
      delay(100);
    } else {
      a++;
      delay(100);
    }
  }

  switch (a) {
    case 0:
      //Общий показ
      lcd.setCursor(0, 1);
      lcd.print("0");
      break;
    case 1:
      //Температура
      lcd.setCursor(0, 1);
      lcd.print("1");
      break;
    case 2:
      //Влажность
      lcd.setCursor(0, 1);
      lcd.print("2");
      break;
      /* case 3:
       ///Время переворота
       break; */
  }
}




 

Araris
Offline
Зарегистрирован: 09.11.2012

Значение переменной а у Вас изменяется только если digitalRead(button2) == HIGH , если кнопка не нажата, то переменная а остается неизменной, оттого и цикличность.

Apocalyps
Offline
Зарегистрирован: 26.07.2015

Araris пишет:

Значение переменной а у Вас изменяется только если digitalRead(button2) == HIGH , если кнопка не нажата, то переменная а остается неизменной, оттого и цикличность.

можете пожалуйста кодом показать, как исправить

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Например, скобку ("}") из 24 строки переместить сразу за 45 строкой.

 

Araris
Offline
Зарегистрирован: 09.11.2012

Именно !

Хотя лучше было бы вникнуть... дело хозяйское.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Так там вникать особо и не во что. При нажатии увеличивается счётчик и в зависимости от счётчика выполняется действие. Конечно если нажать и держать, то будут проблемы, но для этого уже лучше использовать класс BUTTON от Клапауция999 и не париться.
Более того код абстрактный, ничего особенного не делает, задача озвучена вскользь, чего париться? ;)