Не смог построить логику с часами реального времени
- Войдите на сайт для отправки комментариев
Здравствуйте помогите пожалуйста!!!
не смог составить логику реального времени(RTC_DS1307).
Мне нужна чтобы в 8:00 пин 13 был HIGH, 8:20 пин 14 HIGH;
и в 23:00 пин 13 был LOW, 23:20 пин 14 был LOW
iarduino_RTC watch(RTC_DS1307);
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
Serial.begin(9600);
watch.begin();
pinMode(13, OUTPUT);
pinMode(14, OUTPUT);
//watch.settime(40,59,22,16,03,21,2); // сек, мин, час, число , месяц, год, день недели
}
void loop() {
String H = watch.gettime("H");
String M = watch.gettime("i");
Serial.println(watch.gettime("H:i"));
if ((H>="08") and (H<"23"))
{
Serial.println("Первая лампа включина ON");
digitalWrite(14, HIGH);
}
if ((H>="08") and (H<"23"))
{
Serial.println("Вторая лампа включина ON");
digitalWrite(13, HIGH);
}
}
Во первых вставьте программу по правилам.
Во вторых как Вы себе представляете сравнение текстовых строк? Особенно когда больше или равно?
Преобразуйте в числа и их сравнивайте stoi() Вам в помощь.
Да, а где #include???
Эти вещи делаются через unix-time.
Переменная seconds // Содержит секунды от 0 до 59.
Переменная minutes// Содержит минуты от 0 до 59.
Переменная hours // Содержит часы от 1 до 12.
Переменная Hours // Содержит часы от 0 до 23.
Переменная midday // Содержит полдень 0 или 1 (0-am, 1-pm).
Переменная day // Содержит день месяца от 1 до 31.
Переменная weekday // Содержит день недели от 0 до 6 (0-воскресенье, 6-суббота).
Переменная month // Содержит месяц от 1 до 12.
Переменная year // Содержит год от 0 до 99.
Переменная Unix // Содержит секунды прошедшие с начала эпохи Unix, от 0 до 4'294'967'295.
Николай, вот пример. Доделаете под свои задачи.
void setup() { pinMode(13, OUTPUT); } void loop() { uint16_t totalMinut = getTotalMinut(); digitalWrite(13, totalMinut >= 480 && totalMinut < 1380); } //получаем время с RTC и считаем количество минут с начала суток uint16_t getTotalMinut(){ uint16_t t = millis() % 1440;//это для примера return t; }delay(24*60*60*1000UL) не в трендах?
А, сорри. Я этот пост с постом про перезагрузка каждые 24 часа спутал ))
Вариант
void loop(){ watch.gettime(); if (watch.Hours == 8) || (watch.Hours == 23){ bool new_sate = (watch.Hours == 8) ? HIGH : LOW; if (watch.minuts == 0) && (digitalRead(13) != new_sate) digitalWrite(13, new_sate); if (watch.minuts == 20) && (digitalRead(14) != new_sate) digitalWrite(14, new_sate); } }Вариант
Минусователь,)) расскажи в чем я неправ.
Минусователь,)) расскажи в чем я неправ.
отключаться пины никогда не будут?
new_sate это new_state? - полиглот:)
Минусователь,)) расскажи в чем я неправ.
отключаться пины никогда не будут?
new_sate это new_state? - полиглот:)
Как только выражение ( totalMinut >= 480 && totalMinut < 1380) станет ложью, так и отключится.
Шалун.)
Pyotr, a вы какой код обсуждаете? Не вижу у fogary переменной Totalminut
Вообще помоему у fogary в #6 все нормально, насчет отключения это я сам прогнал
Свой.) И я бы добавил -1 за magic numbers.)
Канешн свой) ТС_у для подумать чуть.
По #6. Девайс включили или он перегрузился в 9:00. Что будет?
Свой.) И я бы добавил -1 за magic numbers.)
это Петру? Там скорее нужно говорить о сознательном запутывании ТС:) Одна строчка с миллис ("для примера") чего стоит ;)
Свой.) И я бы добавил -1 за magic numbers.)
Я посчитал минуты за ТС. А минусы я люблю, гловное шоб поболе)))
Это что. Я на Яндекс.дзене как то добавил комментарий... и получил -700.(
Свой.) И я бы добавил -1 за magic numbers.)
А никто и не обещал легкой жизни начинающему ардуинщику))
Это что. Я на Яндекс.дзене как то добавил комментарий... и получил -700.(
Любопытно посмотреть.
И я о том же.) Ну вот нафига высчитывать за компилятор? Ну хотя бы пиши 8 * 60 тогда.)
Любопытно посмотреть.
Нет. Обстановка сильно накалилась.( Сам был не рад. Да и давно это было, года 2 как.
Такого количества идиотов, как в Дзене - еще поискать. Домохозяйки и пенсинерки
Я лично зарёкся. Правда попадались и адекватные (некоторые даже благодарили), но их меньшинство.(
По #6. Девайс включили или он перегрузился в 9:00. Что будет?
void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); pinMode(14, OUTPUT); digitalWrite(13, LOW); digitalWrite(14, LOW); watch.begin(); watch.gettime(); unsigned int min_of_day = watch.Hours * 60 + watch.minuts; if (min_of_day >= 8*60) && (min_of_day < 23*60) digitalWrite(13, HIGH); if (min_of_day >= 8*60+20) && (min_of_day < 23*60+20) digitalWrite(14, HIGH); }Остальная часть без изменений.
По #6. Девайс включили или он перегрузился в 9:00. Что будет?
void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); pinMode(14, OUTPUT); digitalWrite(13, LOW); digitalWrite(14, LOW); watch.begin(); watch.gettime(); unsigned int min_of_day = watch.Hours * 60 + watch.minuts; if (min_of_day >= 8*60) && (min_of_day < 23*60) digitalWrite(13, HIGH); if (min_of_day >= 8*60+20) && (min_of_day < 23*60+20) digitalWrite(14, HIGH); }Остальная часть без изменений.
Ну если для меня))... то я бы убрал строки 6 и 7, и ради чтения двух регистров из RTC не стал бы тянуть библиотеку (говорят не самая лучшая).
Ну и если в будущем захочется сделать установку времени, скажем в 7:59 подвести часы на 2 минуты вперед, то опять все порушится. В лупе условия нужно писать как в сетапе сейчас.
А если в будущем нужно включить в 23:00, а выключить в 8? А если ещё один выход добавить?
Обычно все параметры задаются вне, а в код вообще не заглядываешь.