Как сделать так, что при нажатии кнопки я мог задать время через LCD дисплей?

Для реализации данной функциональности, вам потребуется подключить кнопку и LCD дисплей к вашему Arduino-устройству и написать соответствующий код.

1. Подключение кнопки:

- Подключите одну ножку кнопки к любому цифровому пину вашего Arduino, например, к пину 2.
- Подключите другую ножку кнопки к GND, чтобы кнопка работала как обычное замыкание при нажатии.

2. Подключение LCD дисплея:

- Подключите контакты VCC и GND LCD дисплея к соответствующим пинам на вашем Arduino для питания (обычно 5V и GND).
- Подключите SDA и SCL пины LCD дисплея к SDA и SCL пинам вашего Arduino (обычно A4 и A5) соответственно.

3. Написание кода:

- Вначале нужно включить необходимые библиотеки для работы с LCD дисплеем. Импортируйте библиотеку "LiquidCrystal_I2C.h" и объявите объект для работы с LCD дисплеем:

    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>

    LiquidCrystal_I2C lcd(0x27, 16, 2); // Инициализация объекта с указанием адреса ваших модулей LCD (обычно 0x27).

- Затем объявите переменные для хранения значения времени и флага состояния кнопки:

    int timeValue = 0; // Переменная для хранения значения времени.
    bool buttonPressed = false; // Флаг для проверки нажатия кнопки.

- В функции setup() инициализируйте LCD дисплей и задайте пины для кнопки:

    void setup() {
      lcd.begin(16, 2); // Инициализация LCD дисплея с указанием количества столбцов и строк.
      lcd.setCursor(0, 0);
      lcd.print("Press the button");

      pinMode(2, INPUT); // Настройка пина для кнопки как вход.
      digitalWrite(2, HIGH); // Включение подтягивающего резистора для пина.
    }

- В функции loop() считывайте состояние кнопки и, если она нажата, отображайте запрос на ввод времени на LCD дисплее:

    void loop() {
      if (digitalRead(2) == LOW) { // Проверка состояния пина для кнопки.
        buttonPressed = true;
      }

      if (buttonPressed) {
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Enter the time:");
        lcd.setCursor(0, 1);
        lcd.print("Minutes: ");

        // В этом месте вам нужно реализовать код для считывания введенного значения времени.
        // Это может быть выполнено с помощью функций delay(), millis(), или использованием прерывания для обработки нажатий кнопки.
        // Подсказка: можно использовать функцию `lcd.setCursor()` и `lcd.print()` для отображения вводимых символов на LCD дисплее.

        // После считывания значения времени, сохраните его в переменной `timeValue` и выполните необходимую логику в вашей программе.

        buttonPressed = false; // Сброс флага нажатия кнопки.
      }
    }

- Далее вам нужно обрабатывать значение времени, которое было введено на LCD дисплее.

    // Пример функции для обработки значения времени.
    void processTimeValue(int minutes) {
      // В этом месте вы можете выполнить необходимые действия с полученным временем, например, задержку в указанное количество минут.
      // Вы можете использовать функции delay(), millis(), или создать собственную логику.
    }

- Далее вы можете предоставить возможность пользователю изменять значение времени, например, с помощью повторных нажатий на кнопку или поворотом энкодера.

- Если вы используете энкодер для выбора времени, вам также понадобится импортировать соответствующую библиотеку и настроить его пины:

    #include <Encoder.h>

    Encoder encoder(A3, A2); // Инициализация объекта для работы с энкодером, указывая пины A2 и A3.

    void setup() {
      // Инициализация логики и настройка пинов для кнопки и дальнейшая работа с LCD дисплеем.
      // ...
    }

    void loop() {
      // Обработка нажатия кнопки для ввода значения времени на LCD дисплее.
      // ...

      int newTimeValue = encoder.read();
      if (newTimeValue != timeValue) { // Проверка на изменение значения времени.
        timeValue = newTimeValue;
        lcd.setCursor(0, 1);
        lcd.print("Minutes: " + String(timeValue));
      } 
    }

4. Завершение.

- После того, как вы обработали ввод значения времени и выполнения дальнейших действий, вызовите функцию processTimeValue(timeValue), чтобы обработать введенное значение времени.

- Разработайте и впишите свою логику в функцию processTimeValue(), чтобы адаптировать ее под свои потребности.

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