Помогите с прошивкой для Ардуино, пожалуйста!!!

Тема в разделе "Микроконтроллеры AVR", создана пользователем nevikat, 8 фев 2018.

Метки:
  1. nevikat

    nevikat Нерд

    Здравствуйте! Помогите, пожалуйста, с прошивкой для Arduino Nano. Суть прошивки такова: считается время в часах, минутах и секундах. При нажатии на кнопки but_hours и but_minutes одновременно флажок становится противоположен сам себе. Если этот флаг (flag) равен 1, то нажатием кнопки but_hours мы можем увеличивать часы на единицу или нажатием кнопки but_minutes увеличиваем минуты на единицу. Проблема заключается в том, что я нажимаю кнопки и ничего не происходит. Помогите, пожалуйста!

    Вот скетч:
    Код (C++):
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем какой дисплей
    unsigned long last_time;
    int sec;
    int minutes;
    int hours;
    int but_hours;
    int but_minutes;
    int flag;

    void setup() {
      lcd.init();                      // инициализируем дисплей
      lcd.backlight();                 // Включаем подсветку дисплея
      lcd.setCursor(0, 0);             // Устанавливаем курсор
      pinMode(3, INPUT_PULLUP);
      pinMode(4, INPUT_PULLUP);
    }

    void loop() {
      if (millis() - last_time > 1000) {
        sec++;
        last_time = millis();
      }
      if (sec == 60) {
        minutes++;
        lcd.clear();
        sec = 0;
      }
      if (minutes == 60) {
        hours++;
        lcd.clear();
        minutes = 0;
      }
      but_hours = !digitalRead(3);
      but_minutes = !digitalRead(4);
      if (but_hours == 1 && but_minutes == 1) {
        flag = !flag;
      }
      if (flag == 1) {
        if (but_hours == 1) {
          hours++;
        }
        if (but_minutes == 1) {
          minutes++;
        }
      }
      lcd.print(hours);
      lcd.print(":");
      lcd.print(minutes);
      lcd.print(":");
      lcd.print(sec);
      lcd.setCursor(0, 0);
    }
     
  2. Пушной звер

    Пушной звер Оракул

    потому что флаг меняется циклично пока нажаты две кнопки
     
  3. nevikat

    nevikat Нерд

    Сейчас так попробую:
    Код (C++):
    if (but_hours == 1 && but_minutes == 1 && flag == 0) {
        flag = 1;
        delay(500);
      }
      if (but_hours == 1 && but_minutes == 1 && flag == 1) {
        flag = 0;
        delay(500);
      }
     
    Последнее редактирование: 8 фев 2018
  4. nevikat

    nevikat Нерд

    Так тоже не робит.
     
  5. nevikat

    nevikat Нерд

    Блин! Забыл просто минус к бредбоарду подключить, вот он и кнопки не видел. СПАСИБО за всё!
     
  6. Airbus

    Airbus Оракул

    Почему он бичевский?
     
  7. nevikat

    nevikat Нерд

    Кстати, как я решил проблему - просто сделал смену на отпускание кнопки. Кароч там теперь 4 флажка)
     
  8. Airbus

    Airbus Оракул

    Своё утверждение кодом можете подтвердить?
     
  9. parovoZZ

    parovoZZ Гуру

    На прерываниях не проще кнопки отрабатывать?
     
    warman нравится это.