Arduino:Примеры/TimeCheck: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 20: | Строка 20: | ||
Подключаем класс '''Process'''. | Подключаем класс '''Process'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
#include <Process.h> | #include <Process.h> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 26: | Строка 26: | ||
Создаем экземпляр класса '''Process''', при помощи которого будем получать информацию о времени, а также переменные, в которых будет храниться информация о часах, минутах и секундах. Также создаем переменную, в которой будем хранить предыдущий секундный результат. Инициализируем ее значением, которое никак не сможет быть временем (например, каким-нибудь отрицательным числом). | Создаем экземпляр класса '''Process''', при помощи которого будем получать информацию о времени, а также переменные, в которых будет храниться информация о часах, минутах и секундах. Также создаем переменную, в которой будем хранить предыдущий секундный результат. Инициализируем ее значением, которое никак не сможет быть временем (например, каким-нибудь отрицательным числом). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
Process date; | Process date; | ||
int hours, minutes, seconds; | int hours, minutes, seconds; | ||
Строка 34: | Строка 34: | ||
В секции setup() инициализируем '''Bridge''' и '''Serial''' (последовательную передачу данных). Перед тем, как продолжать скетч, ждем активации последовательного соединения, а затем выводим сообщение на '''Serial Monitor'''. | В секции setup() инициализируем '''Bridge''' и '''Serial''' (последовательную передачу данных). Перед тем, как продолжать скетч, ждем активации последовательного соединения, а затем выводим сообщение на '''Serial Monitor'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
void setup() { | void setup() { | ||
Bridge.begin(); | Bridge.begin(); | ||
Строка 45: | Строка 45: | ||
Запускаем предварительный процесс для получения информации о текущем времени, добавляя к команде '''date''' параметр '''«Т»'''. | Запускаем предварительный процесс для получения информации о текущем времени, добавляя к команде '''date''' параметр '''«Т»'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
if (!date.running()) { | if (!date.running()) { | ||
date.begin("date"); | date.begin("date"); | ||
Строка 56: | Строка 56: | ||
В секции loop() проверяем, прошла ли секунда с тех пор, когда мы проверяли время в последний раз. Если прошла, выводим на '''Serial Monitor''' текущее время и перезапускаем процесс '''date''', если он остановился. | В секции loop() проверяем, прошла ли секунда с тех пор, когда мы проверяли время в последний раз. Если прошла, выводим на '''Serial Monitor''' текущее время и перезапускаем процесс '''date''', если он остановился. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
void loop() { | void loop() { | ||
if(lastSecond != seconds) { // если прошла секунда | if(lastSecond != seconds) { // если прошла секунда | ||
Строка 78: | Строка 78: | ||
Если процесс '''date''' дал какой-нибудь результат, начинаем анализировать эти данные. Во-первых, сохраняем результат ('''чч:мм:сс''') в строку, а затем находим месторасположение символов «:» при помощи функций indexOf() и lastIndexOf(). | Если процесс '''date''' дал какой-нибудь результат, начинаем анализировать эти данные. Во-первых, сохраняем результат ('''чч:мм:сс''') в строку, а затем находим месторасположение символов «:» при помощи функций indexOf() и lastIndexOf(). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
while (date.available()>0) { | while (date.available()>0) { | ||
String timeString = date.readString(); | String timeString = date.readString(); | ||
Строка 88: | Строка 88: | ||
Зная позиции, на которых находятся двоеточия, можно разделить строку на отдельные подстроки с часами, минутами и секундами. | Зная позиции, на которых находятся двоеточия, можно разделить строку на отдельные подстроки с часами, минутами и секундами. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
String hourString = timeString.substring(0, firstColon); | String hourString = timeString.substring(0, firstColon); | ||
String minString = timeString.substring(firstColon+1, secondColon); | String minString = timeString.substring(firstColon+1, secondColon); | ||
Строка 96: | Строка 96: | ||
Наконец, конвертируем строки в целочисленные переменные и сохраняем прежний секундный результат – для сравнения при следующем проходе через цикл. | Наконец, конвертируем строки в целочисленные переменные и сохраняем прежний секундный результат – для сравнения при следующем проходе через цикл. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
hours = hourString.toInt(); | hours = hourString.toInt(); | ||
minutes = minString.toInt(); | minutes = minString.toInt(); | ||
Строка 107: | Строка 107: | ||
Весь код полностью – ниже: | Весь код полностью – ниже: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Проверка времени | Проверка времени | ||
Строка 193: | Строка 193: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Портал/Arduino}} | |||
[[Категория:Пример]] | [[Категория:Пример]] | ||
[[Категория:Примеры]] | [[Категория:Примеры]] | ||
[[Категория:Пример программирования Arduino]] | [[Категория:Пример программирования Arduino]] | ||
[[Категория:Примеры программирования Arduino]] | [[Категория:Примеры программирования Arduino]] |
Текущая версия от 12:38, 8 июля 2023
Содержание | Знакомство с 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