Serial.println("ms");
commandFile.close(); // Закрыть файл настроек
}
else
{
Serial.println("Could not read command file.");
return;
}
}
void loop()
{
long timeStamp = millis();
String dataString = "Hello There!";
// Открыть файл и записать в него
File dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(timeStamp);
dataFile.print(",");
dataFile.println(dataString);
dataFile.close(); // Закрыть файл
- 288 -
// Вывод в последовательный порт для отладки
Serial.print(timeStarnp);
Serial.print(",");
Serial.println(dataString);
}
else
{
Serial.println("Couldn't open log file");
}
delay(refresh_rate);
}
После загрузки на плату и запуска программы данные будут записываться с частотой, указанной при настройке. За процессом можно наблюдать в мониторе последовательного порта (рис. 13.17).
Рис. 13.17. Регистрация данных на скорости Refresh Rate, указанной в настройках
13.3. Использование часов реального времени
Почти каждое приложение регистрации данных выиграет от использования часов реального времени. Наличие часов реального времени (RТС) в системе позволит вставлять временные метки измерений, поэтому легко можно отследить, когда произошло событие. В предыдущем разделе мы вызывали функцию millis(), чтобы отследить время, прошедшее с начала включения платы Arduino. Теперь задейству
- 289 -
ем микросхему часов реального времени, позволяющую фиксировать текущее время регистрации данных на SD-карту.
Назначение часов реального времени ясно из названия. Вы устанавливаете время один раз, а часы продолжают очень точно отсчитывать время, даже с учетом високосных годов. В описанном далее примере выбрана популярная микросхема часов реального времени DS1307.
Часы реального времени DS1307 поддерживают связь с Arduino по протоколу I2C и подключаются к круглой батарейке, что обеспечивает ход часов в течение нескольких лет. К микросхеме подключается кварцевый резонатор, определяющий точность хронометража. Я выбрал плату расширения adafruit-DS1307-breakout (http://www.exploringarduino.com/parts/adafruit-DS1307-breakout), которая содержит микросхему DS1307, кварцевый резонатор, батарейку размером с монету, конденсатор развязки и I2C подтягивающие резисторы. Плату легко подключить к Arduino (рис. 13.18).
Рис. 13.18. Подключение платы расширения adafruit-DS1307-breakout к Arduino
Далее предполагается, что вы используете эту плату. Тем не менее, можно просто собрать схему из элементов на макетной плате и подключить непосредственно к Arduino. Потребуется кварцевый резонатор на 32,768 кГц, подтягивающие резисторы номиналом 2,2 кОм и круглая батарейка 3,0 В размером с монету. Если вы решили собрать плату самостоятельно, можете приобрести эти компоненты и собрать их на макетной плате по схеме, приведенной на рис. 13.19.
- 290 -
Рис. 13.19. Схема часов реального времени, собранная на макетной плате
Как и в предыдущей главе, мы снова воспользуемся сторонней библиотекой для Arduino. На этот раз для облегчения связи с микросхемой часов реального времени (RTC). Библиотека называется RTClib, первоначально она была разработана JeeLabs, затем обновлена Adafruit Indusrtries. Ссылку для загрузки библиотеки можно найти на веб-странице http://www.exploringarduino.com/content/ch13. Скачайте библиотеку и распакуйте в папку libraries, как вы это делали в главе 12.
Работать с библиотекой просто. При первом выполнении кода нужно вызвать функцию 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 на макетной плате, то установка будет выглядеть немного по-другому.