Arduino:Примеры/TimeSerial
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Настройка библиотеки Time при помощи последовательного порта[1]
Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как настраивать время Arduino с помощью сообщений, присланных по последовательному порту.
Код
/*
Настройка библиотеки Time при помощи последовательного порта
Этот пример иллюстрирует, как настраивать библиотеку Time
при помощи сообщений, приходящих по последовательному порту.
Сообщения состоят из буквы «T», за которой следуют 10 цифр,
обозначающих время (в секундах с 1 января 1970 года). К примеру,
чтобы выставить часы на полдень 1 января 2013 года, отправьте
через монитор порта сообщение «T1357041600».
Чтобы автоматически отправлять сообщения, можно воспользоваться скетчем на Processing, который есть в папке с библиотекой. На Linux
можно воспользоваться командой «date +T%s\n > /dev/ttyACM0»
(часовые пояса по UTC).
*/
#include <TimeLib.h>
#define TIME_HEADER "T" // тег заголовка для сообщений
// с информацией о синхронизации времени,
// приходящих по последовательному порту.
#define TIME_REQUEST 7 // ASCII-символ для запроса сообщений
// с информацией о синхронизации времени
void setup() {
Serial.begin(9600);
while (!Serial) ; // нужно только для Leonardo
pinMode(13, OUTPUT);
setSyncProvider(requestSync); // функция, вызываемая, когда требуется синхронизация времени
Serial.println("Waiting for sync message"); // "Ждем синхронизирующего сообщения"
}
void loop(){
if (Serial.available()) {
processSyncMessage();
}
if (timeStatus()!= timeNotSet) {
digitalClockDisplay();
}
if (timeStatus() == timeSet) {
digitalWrite(13, HIGH); // если синхронизация выполнена, включаем светодиод
} else {
digitalWrite(13, LOW); // если нужно обновление, выключаем светодиод
}
delay(1000);
}
void digitalClockDisplay(){
// показываем цифровые часы:
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits){
// вспомогательная функция для печати данных о времени
// на монитор порта; добавляет в начале двоеточие и ноль:
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void processSyncMessage() {
unsigned long pctime;
const unsigned long DEFAULT_TIME = 1357041600; // 1 января 2013 года
if(Serial.find(TIME_HEADER)) {
pctime = Serial.parseInt();
if( pctime >= DEFAULT_TIME) { // проверяем, корректно ли время (больше 1 января 2013 года)
setTime(pctime); // синхронизируем часы Arduino в соответствии с временем, присланным по последовательному порту
}
}
}
time_t requestSync()
{
Serial.write(TIME_REQUEST);
return 0; // время будет отправлено позже в ответ на сообщение,
// присланное по последовательному порту
}
См.также
Внешние ссылки
развернутьПартнерские ресурсы |
---|
развернутьСправочник языка Arduino |
---|
развернутьБиблиотеки Arduino |
---|
развернутьArduino продукты |
---|
развернутьПримеры Arduino |
---|
Категории:
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino