Часы на Arduino Uno, LCD16x2 I2C, RTC DS3231

Схема и код созданы в circuito. Компиляция и загрузка кода через Arduino IDE прошла успешна. Тесты дисплея и RTC успешны. Как далее запустить часы с выводом даты и время на дисплей??? Код: [code]

// Подключить библиотеки
#include “Arduino.h”
#include “LiquidCrystal_PCF8574.h”
#include “Wire.h”
#include “RTClib.h”

// Определение пинов

// Глобальные переменные и определения
#define LCD_ADDRESS 0x27
// Определение характеристок дисплея
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255
// запуск дисплея
LiquidCrystal_PCF8574 lcdI2C;
RTC_DS3231 rtcDS;

// определение времени меню теста
const int timeout = 10000; //тайм-аут 10 сек.
char menuOption = 0;
long time0;

// Настройка программы для работы. Начальный запуск программы при подаче питания.
void setup()
{
// Setup Serial для отладки.
// На мониторе просмотр сообщений.
Serial.begin(9600);
while (!Serial) ; // подождать включения последовательного порта. Нужно для USB Arduino.
Serial.println(“start”);

// Запуск ЖК дисплея
lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT); 
if (! rtcDS.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtcDS.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// Следующая строка устанавливает RTC на дату и время на компьютера
rtcDS.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Эта строка устанавливает RTC с явной датой и временем, например
// 2020 год, сентябрь, 21, 3 часа, 0 минут, 0 секунд:
// rtcDS.adjust(DateTime(2020, 9, 21, 3, 0, 0));
}
menuOption = menu();

}

// Основная логика программы. Взаимодействия между компонентами. После настройки, работает в вечном цикле.
void loop()
{

if(menuOption == '1') {
// LCD 16x2 I2C - тестовый код
// На ЖК дисплее появится ваш текст.
lcdI2C.clear();                          // Очистка ЖК дисплеяю.
lcdI2C.print("   Karklin   ");                   // Текст на дисплее в верхней строке
lcdI2C.selectLine(2);                    // Курсор в начало нижней строки
lcdI2C.print("     Viktor  ");                   // Текст на дисплее в нижней строке
delay(1000);

}
else if(menuOption == '2') {
// RTC - часы реального времени - тестовый код
//Отображение время и дата для RTC, таких как rtcd.hour (), rtcDS.month() etc.
DateTime now = rtcDS.now();
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print("  ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}

if (millis() - time0 > timeout)
{
    menuOption = menu();
}

}

// Функция меню для выбора компонентовб для тестирования
// Смотреть тест на последовательном мониторе
char menu()
{

Serial.println(F("\nWhich component would you like to test?"));
Serial.println(F("(1) LCD 16x2 I2C"));
Serial.println(F("(2) RTC - Real Time Clock"));
Serial.println(F("(menu) send anything else or press on board reset button\n"));
while (!Serial.available());

// Смотреть данные на последовательном мониторе при получении
while (Serial.available()) 
{
    char c = Serial.read();
    if (isAlphaNumeric(c)) 
    {   
        
        if(c == '1') 
      Serial.println(F("Now Testing LCD 16x2 I2C"));
    else if(c == '2') 
      Serial.println(F("Now Testing RTC - Real Time Clock"));
        else
        {
            Serial.println(F("illegal input!"));
            return 0;
        }
        time0 = millis();
        return c;
    }
}

}
[/code]

Could you include a link to the circuito project please?

Вот код: // Подключить библиотеки
#include “Arduino.h”
#include “LiquidCrystal_PCF8574.h”
#include “Wire.h”
#include “RTClib.h”

// Определение пинов

// Глобальные переменные и определения
#define LCD_ADDRESS 0x27
// Определение характеристок дисплея
#define LCD_ROWS 2
#define LCD_COLUMNS 16
#define SCROLL_DELAY 150
#define BACKLIGHT 255
// запуск дисплея
LiquidCrystal_PCF8574 lcdI2C;
RTC_DS3231 rtcDS;

// определение времени меню теста
const int timeout = 10000; //тайм-аут 10 сек.
char menuOption = 0;
long time0;

// Настройка программы для работы. Начальный запуск программы при подаче питания.
void setup()
{
// Setup Serial для отладки.
// На мониторе просмотр сообщений.
Serial.begin(9600);
while (!Serial) ; // подождать включения последовательного порта. Нужно для USB Arduino.
Serial.println(“start”);

// Запуск ЖК дисплея
lcdI2C.begin(LCD_COLUMNS, LCD_ROWS, LCD_ADDRESS, BACKLIGHT);
if (! rtcDS.begin()) {
Serial.println(“Couldn’t find RTC”);
while (1);
}
if (rtcDS.lostPower()) {
Serial.println(“RTC lost power, lets set the time!”);
// Следующая строка устанавливает RTC на дату и время на компьютера
rtcDS.adjust(DateTime(F(DATE), F(TIME)));
// Эта строка устанавливает RTC с явной датой и временем, например
// 2020 год, сентябрь, 21, 3 часа, 0 минут, 0 секунд:
// rtcDS.adjust(DateTime(2020, 9, 21, 3, 0, 0));
}
menuOption = menu();

}

// Основная логика программы. Взаимодействия между компонентами. После настройки, работает в вечном цикле.
void loop()
{

if (menuOption == ‘1’) {
// LCD 16x2 I2C - тестовый код
// На ЖК дисплее появится ваш текст.
lcdI2C.clear(); // Очистка ЖК дисплеяю.
lcdI2C.print(" Karklin “); // Текст на дисплее в верхней строке
lcdI2C.selectLine(2); // Курсор в начало нижней строки
lcdI2C.print(” Viktor "); // Текст на дисплее в нижней строке
delay(1000);

}
else if (menuOption == ‘2’) {
// RTC - часы реального времени - тестовый код
//Отображение время и дата для RTC, таких как rtcd.hour (), rtcDS.month() etc.
DateTime now = rtcDS.now();
Serial.print(now.month(), DEC);
Serial.print(’/’);
Serial.print(now.day(), DEC);
Serial.print(’/’);
Serial.print(now.year(), DEC);
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(’:’);
Serial.print(now.minute(), DEC);
Serial.print(’:’);
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
}

if (millis() - time0 > timeout)
{
menuOption = menu();
}

}

// Функция меню для выбора компонентов для тестирования
// Смотреть тест на последовательном мониторе
char menu()
{

Serial.println(F("\nWhich component would you like to test?"));
Serial.println(F("(1) LCD 16x2 I2C"));
Serial.println(F("(2) RTC - Real Time Clock"));
Serial.println(F("(menu) send anything else or press on board reset button\n"));
while (!Serial.available());

// Смотреть данные на последовательном мониторе при получении
while (Serial.available())
{
char c = Serial.read();
if (isAlphaNumeric©)
{

  if (c == '1')
    Serial.println(F("Now Testing LCD 16x2 I2C"));
  else if (c == '2')
    Serial.println(F("Now Testing RTC - Real Time Clock"));
  else
  {
    Serial.println(F("illegal input!"));
    return 0;
  }
  time0 = millis();
  return c;
}

}
}