Работать с библиотекой просто. При первом выполнении кода нужно вызвать функцию RTC.adjust() для получения времени с компьютера и настройки часов.
Далее RTC работают автономно и можно получать текущее время и дату посредством команды RTC.now(). В следующем примере мы будем использовать эту функцию для ведения журнала регистрации в режиме реального времени.
Теперь объединим SD-карту и часы реального времени, чтобы включить ведение журнала с помощью временных меток. Мы модифицируем программу, добавив запись показаний часов реального времени вместо значений, выдаваемых функцией millis().
- 291 -
Подключение модулей SD card shield и RTC
Подключим к Arduino модули SD card shield и RTC. Если вы используете платы расширения Cooking Hacks Micro SD shield и adafruit-DS1307-breakout, то подключение будет выглядеть так, как на рис. 13.20.
Рис. 13.20. Плата Arduino с подключенными платами расширения Cooking Hacks Micro SD shield и adafruit-DS1307-breakout
Отметим, что последний контакт на RTC не связан с Arduino; это меандр, генерируемый RTC, в нашем примере он не задействован. В программе следует подать на контакт А2 уровень LOW и на A3 уровень HIGH (+5 В), чтобы обеспечить питание RTC. Если вы собрали свой модуль RTC на макетной плате, то установка будет выглядеть немного по-другому.
Теперь нужно добавить функционал RTC в нашу предыдущую программу. Необходимо сделать следующее:
• подключить библиотеку RTC;
• организовать питание модуля RTC (А2- LOW, A3-HIGH);
- 292 -
• инициализировать объект RTC;
• установить время RTC с помощью компьютера;
• записывать фактические временные метки в файл журнала.
Кроме того, в код программы добавлен вывод в файл заголовка столбца при каждом перезапуске журнала. Таким образом, вы легко найдете в журнале, записанном в файл CSV, моменты перезапуска.
ВНИМАНИЕ!
Если после запуска программы вы заметите, что она через некоторое время останавливается, то причина может заключаться в нехватке оперативной памяти. Так происходит из-за строк, которые занимают большой объем оперативной памяти, это относится к командам вывода в последовательный порт Serial.print() и Serial.println(). Проблему можно решить, удалив из программы указанные команды и поручив компилятору хранить строки не в оперативной памяти, а во флэшпамяти Arduino. Для этого для строк используем обертку F(), например Serial.println ( F ( "Hello") ). Описанный метод реализован в листинге 13.6.
Обновленная программа (листинг 13.6) использует RTC в качестве таймера для регистрации данных. Программа перемещает большинство строк во флэш-память, чтобы предотвратить переполнение оперативной памяти.
Листинг 13.6. Чтение и запись данных на SD-карту с использованием RTC - sd_read_write_rtc.ino
// Чтение и запись данных на SD-карту с использованием RTC
#include
// Подключение библиотеки SD
#include
// Для работы с RTC
#include "RTClib.h" // Подключение библиотеки RTC
// Подключение устройств SPI и I>2C с контактами по умолчанию