Arduino:Примеры/TimeCheck
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Проверка времени[1]
Этот пример для Arduino Yun при помощи библиотеки Bridge извлекает их процессора Linux информацию о времени, а затем разбивает ее на часы, минуты и секунды (для 32U4, другого процессора Arduino). Чтобы время было правильным, Yun должна быть подключена к сети. Если вы для сетевых настроек Yun используете онлайновый WiFi-интерфейс, убедитесь, что выбрали правильную временную зону.
Необходимое оборудование
- Плата Arduino Yun;
- Компьютерная сеть, подключенная к интернету;
Цепь
Для этого примера цепи строить не нужно.
Код
Подключаем класс Process.
#include <Process.h>
Создаем экземпляр класса Process, при помощи которого будем получать информацию о времени, а также переменные, в которых будет храниться информация о часах, минутах и секундах. Также создаем переменную, в которой будем хранить предыдущий секундный результат. Инициализируем ее значением, которое никак не сможет быть временем (например, каким-нибудь отрицательным числом).
Process date;
int hours, minutes, seconds;
int lastSecond = -1;
В секции setup() инициализируем Bridge и Serial (последовательную передачу данных). Перед тем, как продолжать скетч, ждем активации последовательного соединения, а затем выводим сообщение на Serial Monitor.
void setup() {
Bridge.begin();
Serial.begin(9600);
while(!Serial);
Serial.println("Time Check"); // "Проверка времени"
Запускаем предварительный процесс для получения информации о текущем времени, добавляя к команде date параметр «Т».
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}
В секции loop() проверяем, прошла ли секунда с тех пор, когда мы проверяли время в последний раз. Если прошла, выводим на Serial Monitor текущее время и перезапускаем процесс date, если он остановился.
void loop() {
if(lastSecond != seconds) { // если прошла секунда
if (hours <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.print(hours);
Serial.print(":");
if (minutes <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.print(minutes);
Serial.print(":");
if (seconds <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.println(seconds);
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}
Если процесс date дал какой-нибудь результат, начинаем анализировать эти данные. Во-первых, сохраняем результат (чч:мм:сс) в строку, а затем находим месторасположение символов «:» при помощи функций indexOf() и lastIndexOf().
while (date.available()>0) {
String timeString = date.readString();
int firstColon = timeString.indexOf(":");
int secondColon= timeString.lastIndexOf(":");
Зная позиции, на которых находятся двоеточия, можно разделить строку на отдельные подстроки с часами, минутами и секундами.
String hourString = timeString.substring(0, firstColon);
String minString = timeString.substring(firstColon+1, secondColon);
String secString = timeString.substring(secondColon+1);
Наконец, конвертируем строки в целочисленные переменные и сохраняем прежний секундный результат – для сравнения при следующем проходе через цикл.
hours = hourString.toInt();
minutes = minString.toInt();
lastSecond = seconds;
seconds = secString.toInt();
}
}
Весь код полностью – ниже:
/*
Проверка времени
При помощи библиотеки Bridge запрашиваем у процессора Linux информацию о времени,
а затем при помощи Arduino Yun разбиваем ее на часы, минуты и секунды.
Создан 27 мая 2013 года,
модифицирован 21 июня 2013 Томом Иго (Tom Igoe).
Этот код не защищен авторским правом.
*/
#include <Process.h>
Process date; // создаем процесс, с помощью которого будем получать информацию о времени
int hours, minutes, seconds; // переменные для результатов
int lastSecond = -1; // переменная для предыдущего секундного результата (для сравнения при следующем проходе через цикл)
void setup() {
Bridge.begin(); // инициализируем Bridge
Serial.begin(9600); // инициализируем Serial
while(!Serial); // ждем открытия Serial Monitor
Serial.println("Time Check"); // "Проверка времени" – заголовок скетча
// Запускаем предварительный процесс date.
// Он должен вернуть результат в следующем формате – чч:мм:сс
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}
void loop() {
if(lastSecond != seconds) { // если прошла секунда
// Выводим на Serial Monitor результат:
if (hours <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.print(hours);
Serial.print(":");
if (minutes <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.print(minutes);
Serial.print(":");
if (seconds <= 9) Serial.print("0"); // настраиваем для диапазона 0-9
Serial.println(seconds);
// Перезапускаем процесс «date»:
if (!date.running()) {
date.begin("date");
date.addParameter("+%T");
date.run();
}
}
// Если процесс «date» дал какой-нибудь результат, начинаем его анализировать:
while (date.available()>0) {
// Берем этот результат (он должен быть в формате «чч:мм:чч»):
String timeString = date.readString();
// Ищем двоеточия:
int firstColon = timeString.indexOf(":");
int secondColon= timeString.lastIndexOf(":");
// Делим результат на три подстроки – с часами, минутами и секундами:
String hourString = timeString.substring(0, firstColon);
String minString = timeString.substring(firstColon+1, secondColon);
String secString = timeString.substring(secondColon+1);
// Конвертируем в целочисленные переменные, сохраняем предыдущий секундный результат:
hours = hourString.toInt();
minutes = minString.toInt();
lastSecond = seconds; // сохраняем его, чтобы было с чем сравнить в следующий раз
seconds = secString.toInt();
}
}
См.также
Внешние ссылки
развернутьПартнерские ресурсы |
---|
развернутьСправочник языка Arduino |
---|
развернутьБиблиотеки Arduino |
---|
развернутьArduino продукты |
---|
развернутьПримеры Arduino |
---|
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino