Получение Unix epoch времени у контролера нодой, конвертация, получение значений времени в переменные

О программировании Arduino, использование библиотек, примеры и общие вопросы программирования.
Ответить
Berk
Сообщения: 81
Зарегистрирован: 11 окт 2017, 22:05

Получение Unix epoch времени у контролера нодой, конвертация, получение значений времени в переменные

Сообщение Berk »

Всем привет, опять меня спросили как и что бы не пропало кидаю сюда

Код: Выделить всё

#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);
}
RTC поставить можно в устройство ..и я их ставлю, но иногда достаточно просто софтового решения...

варик для спящих:

Код: Выделить всё

#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);
}
Ответить