Arduino:Примеры/TimeRTCLog
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Учет изменений состояний на контактах с помощью RTC[1]
Это скетч для библиотеки Time и платы Arduino, который демонстрирует, как использовать эту библиотеку, чтобы рассчитывать время, прошедшее с определенного события. В данном случае событиями выступают изменения состояний на шести цифровых контактах платы Arduino.
Код
/*
Учет изменений состояний на контактах с помощью RTC
Пример, демонстрирующий вычитание и прибавление времени.
Этот скетч регистрирует изменения состояний на контактах.
Время события и время, прошедшее с последнего события,
рассчитываются и отправляются по последовательному порту.
*/
#include <TimeLib.h>
#include <Wire.h>
#include <DS1307RTC.h> // базовая библиотека DS1307, возвращающая время в типе данных time_t
const int nbrInputPins = 6; // количество цифровых контактов, за которыми будем наблюдать
const int inputPins[nbrInputPins] = {2,3,4,5,6,7}; // контакты, за которыми будем наблюдать
boolean state[nbrInputPins] ; // состояние отслеживаемых контактов
time_t prevEventTime[nbrInputPins] ; // время, когда произошло предыдущее событие
void setup() {
Serial.begin(9600);
setSyncProvider(RTC.get); // функция, синхронизирующая время с RTC
for(int i=0; i < nbrInputPins; i++){
pinMode( inputPins[i], INPUT);
// если вам нужен подтягивающий резистор,
// раскомментируйте две строчки ниже:
// pinMode( inputPins[i], INPUT_PULLUP);
// state[i] = HIGH;
}
}
void loop()
{
for(int i=0; i < nbrInputPins; i++)
{
boolean val = digitalRead(inputPins[i]);
if(val != state[i])
{
time_t duration = 0; // время, прошедшее с предыдущего события
state[i] = val;
time_t timeNow = now();
if(prevEventTime[i] > 0)
// если это не первое изменение, рассчитываем время,
// прошедшее с предыдущего изменения:
duration = duration = timeNow - prevEventTime[i];
logEvent(inputPins[i], val, timeNow, duration ); // регистрируем событие
prevEventTime[i] = timeNow; // сохраняем время этого события
}
}
}
void logEvent( int pin, boolean state, time_t timeNow, time_t duration)
{
Serial.print("Pin "); // "Контакт "
Serial.print(pin);
if( state == HIGH)
Serial.print(" went High at "); // " перешел в состояние HIGH в "
else
Serial.print(" went Low at "); // " перешел в состояние LOW в "
showTime(timeNow);
if(duration > 0){
// показываем время только в том случае, если оно больше «0»:
Serial.print(", Duration was "); // ", Продолжительность была "
showDuration(duration);
}
Serial.println();
}
void showTime(time_t t){
// показываем заданное время:
Serial.print(hour(t));
printDigits(minute(t));
printDigits(second(t));
Serial.print(" ");
Serial.print(day(t));
Serial.print(" ");
Serial.print(month(t));
Serial.print(" ");
Serial.print(year(t));
}
void printDigits(int digits){
// вспомогательная функция для печати данных о времени
// на монитор порта; добавляет в начале двоеточие и ноль:
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void showDuration(time_t duration){
// печатаем продолжительность в днях, минутах и секундах:
if(duration >= SECS_PER_DAY){
Serial.print(duration / SECS_PER_DAY);
Serial.print(" day(s) ");
duration = duration % SECS_PER_DAY;
}
if(duration >= SECS_PER_HOUR){
Serial.print(duration / SECS_PER_HOUR);
Serial.print(" hour(s) ");
duration = duration % SECS_PER_HOUR;
}
if(duration >= SECS_PER_MIN){
Serial.print(duration / SECS_PER_MIN);
Serial.print(" minute(s) ");
duration = duration % SECS_PER_MIN;
}
Serial.print(duration);
Serial.print(" second(s) ");
}
См.также
Внешние ссылки
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