Получение Unix epoch времени у контролера нодой, конвертация, получение значений времени в переменные
Добавлено: 31 май 2018, 13:19
Всем привет, опять меня спросили как и что бы не пропало кидаю сюда
RTC поставить можно в устройство ..и я их ставлю, но иногда достаточно просто софтового решения...
варик для спящих:
Код: Выделить всё
#include <TimeLib.h>
#define MY_RADIO_RF24
#define MY_DEBUG
#include <MySensors.h>
const int timeZone = 3; // мск
void preHwInit()
{
}
void before()
{
}
void presentation()
{
sendSketchInfo("TEST_TIME_NODE", "1.1");
}
void setup() {
system("chcp 1251");
requestTime();
wait(1000);
}
void loop()
{
digitalClockDisplay();
delay(1000);
Serial.println(second());
wait(1000);
}
void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
// Мы имеем:
// hour() - час
// minute() - минута
// second() - секунда
// day() - день
// month() - месяц
// year() - год
// Теперь на нашей ноде самостоятельные часики ....до перезагрузки, потом снова синхронизация с контролером и опять все ок :)
}
void printDigits(int digits) {
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void receiveTime(unsigned long controllerTime) {
Serial.print("Получаем значение времени в Unix: ");
Serial.println(controllerTime);
controllerTime = controllerTime + timeZone * SECS_PER_HOUR;
Serial.print("Сохраняем полученное значение времени в Unix+ TimeZone поправка: ");
Serial.println(controllerTime);
setTime(controllerTime);
}
варик для спящих:
Код: Выделить всё
#include <TimeLib.h>
#define MY_RADIO_RF24
#define MY_DEBUG
#include <MySensors.h>
const int timeZone = 3; // мск
unsigned int BAENKI = 1000;
void preHwInit()
{
}
void before()
{
}
void presentation()
{
sendSketchInfo("TEST_TIME_NODE", "1.1");
}
void setup() {
system("chcp 1251");
requestTime();
wait(1000);
}
void loop()
{
sleep(BAENKI);
adjustTime(BAENKI/1000);
digitalClockDisplay();
wait(1000);
digitalClockDisplay();
}
void digitalClockDisplay() {
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
//Serial.println(now());
// Мы имеем:
// hour() - час
// minute() - минута
// second() - секунда
// day() - день
// month() - месяц
// year() - год
// Теперь на нашей ноде самостоятельные часики ....до перезагрузки, потом снова синхронизация с контролером и опять все ок :)
}
void printDigits(int digits) {
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
}
void receiveTime(unsigned long controllerTime) {
Serial.print("Получаем значение времени в Unix: ");
Serial.println(controllerTime);
controllerTime = controllerTime + timeZone * SECS_PER_HOUR;
Serial.print("Сохраняем полученное значение времени в Unix+ TimeZone поправка: ");
Serial.println(controllerTime);
setTime(controllerTime);
}