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 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