Схема и код созданы в 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]