• Почему переменная постоянно растет, хотя я нигде не прописывал этого?

    @rPman
    ИИ от anthropic - claude.ai:
    В коде есть несколько моментов, которые могут приводить к неправильному поведению при работе с последним элементом массива alarms:

    Размер массива объявлен как ALARM_COUNT = 20. Это значит, что индексы элементов будут от 0 до 19 включительно. Но в некоторых циклах обработки массива используется условие i <= 30. Это выходит за границы массива и может привести к неопределенному поведению.
    При инкременте и декременте номера банка (funkции incrBank, decrBank) не проверяется выход за границы массива. Например, если bank = 20, то после inkBank он станет равен 21, что уже выходит за размер массива.
    Не инициализируются значения элементов массива alarms после номера 19. Эти элементы могут содержать случайный "мусор", который и приводит к странному поведению.

    Чтобы исправить эти проблемы, я бы порекомендовал:

    1. Использовать в циклах условие i < ALARM_COUNT вместо i <= 30
    2. Добавить проверку границ при инкременте/декременте номера банка:

    void incrBank() {
      if (bank >= ALARM_COUNT-1) { 
        bank = 0;
      } else {
        bank++;
      }
    }
    
    void decrBank() {
      if (bank <= 0) {
        bank = ALARM_COUNT-1;  
      } else {
        bank--;
      }  
    }

    3. Явно инициализировать все элементы массива alarms при старте.

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

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

    @kalapanga
    Тут пока нечему криво работать - кода установки времени ещё совсем нет.
    Выводите на экран например текущее время из часов. Ставите курсор на первую цифру. Дальше разбираете нажатия кнопок. Вверх и вниз пусть меняют выбранную цифру (контролируете значения), влево и вправо пусть будут переходом к другой цифре. Селект пусть завершает ввод и записывает получившееся значение в часы. Очень кратко если, то как-то так.
    При нежелании самому придумывать можно найти готовые примеры кода. Уж часов на ардуино понаделана масса!
    Совсем по феньшую будет освоить конечные автоматы.
    Ответ написан
    Комментировать
  • Как сделать так, что при нажатии кнопки я мог задать время через LCD дисплей?

    Daemon23RUS
    @Daemon23RUS
    Посмотрите библиотеки здесь https://www.arduino.cc/reference/en/libraries/
    Возможно найдете что то подходящее под Ваши цели.
    Ответ написан
    1 комментарий