Arduino:Примеры/TimeSerialDateStrings
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Настройка библиотеки Time при помощи последовательного порта (со строковыми сообщениями)[1]
Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как настраивать время Arduino с помощью сообщений, присланных по последовательному порту. Добавляет в скетч функционал для работы со строковыми сообщениями, содержащими информацию о дате.
Код
/*
Настройка библиотеки Time при помощи последовательного порта (со строковыми сообщениями)
Этот пример демонстрирует настройку библиотеки Time
с помощью строк даты.
Этот скетч добавляет в скетч «Настройка библиотеки Time при помощи
последовательного порта» функционал для работы со строками даты.
Кроме того, он показывает, как обращаться с разными сообщениями.
Сообщения, начинающиеся с заголовка «T», задают время. Чтобы
автоматически отправлять сообщения, можно воспользоваться скетчем
на Processing, который есть в папке с библиотекой. На Linux
можно воспользоваться командой «date +T%s\n > /dev/ttyACM0»
(часовые пояса по UTC).
Сообщения, начинающиеся с заголовка «F*», задает формат даты. Чтобы
задать короткий формат, используйте «Fs\n», чтобы задать длинный
формат, используйте «Fl\n»
*/
#include <TimeLib.h>
// 1-символьные теги для сообщений:
#define TIME_HEADER 'T' // тег заголовка для сообщений
// с информацией о синхронизации времени,
// приходящих по последовательному порту
#define FORMAT_HEADER 'F' // тег заголовка для сообщений,
// задающих формат даты
#define FORMAT_SHORT 's' // короткие строки для месяца и дня
#define FORMAT_LONG 'l' // (маленькая «l») короткие строки для месяца и дня
#define TIME_REQUEST 7 // ASCII-символ для запроса сообщений
// с информацией о синхронизации времени
static boolean isLongFormat = true;
void setup() {
Serial.begin(9600);
while (!Serial) ; // нужно только для Leonardo
setSyncProvider( requestSync); // функция, вызываемая, когда требуется синхронизация времени
Serial.println("Waiting for sync message"); // "Ждем синхронизирующего сообщения"
}
void loop(){
if (Serial.available() > 1) { // ждем как минимум 2 символа
char c = Serial.read();
if( c == TIME_HEADER) {
processSyncMessage();
}
else if( c== FORMAT_HEADER) {
processFormatMessage();
}
}
if (timeStatus()!= timeNotSet) {
digitalClockDisplay();
}
delay(1000);
}
void digitalClockDisplay() {
// показываем цифровые часы:
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
if(isLongFormat)
Serial.print(dayStr(weekday()));
else
Serial.print(dayShortStr(weekday()));
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
if(isLongFormat)
Serial.print(monthStr(month()));
else
Serial.print(monthShortStr(month()));
Serial.print(" ");
Serial.print(year());
Serial.println();
}
void printDigits(int digits) {
// вспомогательная функция для печати данных о времени
// на монитор порта; добавляет в начале двоеточие и ноль:
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void processFormatMessage() {
char c = Serial.read();
if( c == FORMAT_LONG){
isLongFormat = true;
Serial.println(F("Setting long format")); // "Задаем длинный формат"
}
else if( c == FORMAT_SHORT) {
isLongFormat = false;
Serial.println(F("Setting short format")); // "Задаем короткий формат"
}
}
void processSyncMessage() {
unsigned long pctime;
const unsigned long DEFAULT_TIME = 1357041600; // 1 января 2013 года – Пол, может лучше задать это в «time.h»?
pctime = Serial.parseInt();
if( pctime >= DEFAULT_TIME) { // проверяем, корректно ли время (больше 1 января 2013 года)
setTime(pctime); // синхронизируем часы Arduino в соответствии с временем, присланным по последовательному порту
}
}
time_t requestSync() {
Serial.write(TIME_REQUEST);
return 0; // время будет отправлено позже в ответ на сообщение,
// присланное по последовательному порту
}
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
Категории:
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino