Метод должен запускаться каждый час

У меня есть метод. Мне нужно запускать его каждый час.(Задание Cron)

Я имею в виду;

10.00 вечера -> Триггер

11.00 вечера -> Триггер

12.00 вечера ->Триггер

...

...

Плата: Arduino Uno + Wifi Shield.

Проект Кодекса

  void setup() {

  }
  
  void onTimeChanged() {
      runTask();
  }
  
  void loop() {
     
  }
  
  
  /*run this method when:
  13.00 p.m
  14.00 p.m
  15.00 p.m
  ........
  ........    */
  void runTask() {

  }

, 👍2

Обсуждение

Непонятно, чего вы хотите. Дикое предположение: вы хотите, чтобы Arduino подключался к серверу, когда меняется часовой пояс, в котором находится путешествующий Arduino?, @ocrdu

Вы хотите, чтобы Arduino определял, в каком часовом поясе он находится (по геолокации IP или GPS), или вы хотите, чтобы Arduino определял, когда начинается или заканчивается местное летнее время? Существуют библиотеки, доступные и для того, и для другого., @StarCat

Я просто хочу создавать рабочие места в cron. Например; 10.00 pm, 11.00 pm, 12.00pm -> Метод выполнения, @Snefru Clone

Это больше не сбивает с толку. Я отредактировал вопрос., @Snefru Clone

Вам нужно, чтобы задача запускалась в точное время (xx:00, полный час с нулевыми минутами), или вас интересует только _period_, равный одному часу (например, в 10:23, 11:23, 12:23, 13:23...). В первом случае, есть ли у вас RTC? GPS-приемник? Модуль Wi-Fi?, @Edgar Bonet

Мне нужно сработать в ** точное ** время. У меня нет ни одного из них. Если нужно, я могу их купить., @Snefru Clone


1 ответ


Лучший ответ:

1

У Arduino Uno нет часов реального времени, но вы можете связаться с сервером времени NTP в Интернете, используя упомянутый вами WiFi shield, и получить оттуда время, а затем отслеживать время с помощью millis (). Время от времени вам следует корректировать время с помощью нового вызова сервера времени NTP, потому что часы Arduino не настолько точны.

Самым простым способом было бы получить модуль RTC (я думаю, что наиболее точным и доступным на данный момент является DS3231). У них есть гнездо для резервного аккумулятора, поэтому они сохраняют время даже при отсутствии источника питания.

Подключите модуль с помощью I2C к вашему Arduino, установите соответствующую библиотеку и запрашивайте ее каждую секунду (или независимо от того, насколько точной вы хотите быть) в вашем loop () для точного времени.

Эти модули обычно также имеют вывод прерывания и могут генерировать прерывание при достижении аварийного времени; вы также можете использовать это.

,

FWIW, [RTClib](https://github.com/adafruit/RTClib ) поддерживает только аварийные сигналы [с DS3231] (https://adafruit.github.io/RTClib/html/class_r_t_c___d_s3231.html ). [Запрос на извлечение] (https://github.com/adafruit/RTClib/pull/212 ) ведется работа по добавлению поддержки аварийных сигналов PCF8563. Однако могут быть и другие альтернативы RTC / library., @Edgar Bonet