Циклический таймер
- Войдите на сайт для отправки комментариев
Вс, 22/10/2017 - 22:50
Всех приветствую!
Учусь тут себе решать всякие задачи программированием и задумал сделать циклический таймер для проветривания. Но не тут то было. Обычный суточный таймер получился (и то на основе чужого кода), а циклический пока что не по зубам.
Помогите осилить логику данного таймера. Он должен работать Х времени и У простаивать без delay() и с rtc.
Блинк мог бы подойти, то там время работы равно времени ожидания.
Ответил на форуме амперки, нефик плодить одни и те же темы по форумам.
Может это подойдет "Как Blink встроить в таймер"
#include <Wire.h> #include <LiquidCrystal_I2C.h> // Подключение библиотеки для LCD с кириллицей #include "RTClib.h" LiquidCrystal_I2C lcd(0x38,16,2); // ******************************************* // Здесь задаем время включения и выключения int on=16; // Часов int off=23; // Часов // ******************************************* //----Класс отображающий время на ЛСД 1602 class ShowTime { uint32_t om; public: ShowTime() {}; void setup() {om=millis();} void loop(DateTime now) { char s[16] = " 00:00:00 "; uint32_t cm = millis(); if (cm - om > 999) { lcd.setCursor(2,1); s[2] = '0'+ now.hour()/10; s[3] = '0'+ now.hour()%10; s[5] = '0'+ now.minute()/10; s[6] = '0'+ now.minute()%10; s[8] = '0'+ now.second()/10; s[9] = '0'+ now.second()%10; lcd.print(s); om=cm; } } }; ////----Cl_tik_tak---задержка-работа-------------- const int Map[] = {30000, 300}; const byte num = 2; class Cl_tik_tak { byte takt; byte pin; bool led; uint32_t past; public: Cl_tik_tak(byte _pin): pin(_pin) {} void setup() { pinMode(pin, OUTPUT); takt = 0; past = millis(); digitalWrite(pin, led = 0); } void loop() { if (millis() - past > Map[takt]) { past = millis(); digitalWrite(pin, led = !led); ++takt; if (takt >= num) takt = 0; } } }; //-------------компоновка----------------- RTC_DS1307 RTC; Cl_tik_tak Tak(/*нога*/13); ShowTime showTime; //--------------main--------------------- void setup() { Tak.setup(); showTime.setup(); lcd.init(); // initialize the lcd // Print a message to the LCD. lcd.backlight(); lcd.setCursor(2,0); lcd.print(on); lcd.print("-ON, "); lcd.print(off); lcd.print("-OFF"); } void loop() { DateTime now = RTC.now(); showTime.loop(now); if ( (now.hour() >= on ) && ( (now.hour() < off ))) Tak.loop(); }и задумал сделать циклический таймер. Но не тут то было. Обычный суточный таймер получился (и то на основе чужого кода), а циклический пока что не по зубам.
Помогите осилить логику данного таймера. Он должен работать Х времени и У простаивать без delay() и с rtc.
Что значит циклический и чем отличается от суточного?