обработка переменных в if (реле с RTC)
- Войдите на сайт для отправки комментариев
Чт, 29/10/2015 - 09:33
Добрый день! Есть проект реле срабатывающего по времени (arduino+DS3232RTC+2х канальное реле)
Как работает:
RTC.read(tm); if (((tm.Hour, DEC) > startTime) && ((tm.Hour, DEC) < stopTime)) { // проверяем текущее время больше "6" и меньше "21", если условие верно- включаем реле digitalWrite(relay1, HIGH); } else { если все не так - выключаем реле digitalWrite(relay1, LOW); } delay(1000);
У меня проблема с срабатыванием если stopTime < 11, т.е. допустим текущее время 9 часов, если stopTime = 10 реле не срабатывает. Поставив stopTime = 11 реле срабатывает.
Подскажите в чем проблема? Может я не корректно сравниваю значения?
Что, по Вашему, означает конструкция (tm.Hour, DEC)?
Она возвращает время в десятичном формате. Точнее часы
Она возвращает время в десятичном формате. Точнее часы
Потом, когда (и если) не сможете понять почему так печатается, возьмите любую книжку про язык С и поищите там "операция запятая" - почитайте. Узнаете много интересного.
Когда узнаете (но не раньше) выбросьте это и оставьте просто tm.Hour
А вообще - прежде, чем писать вопросы, ВСЕГДА вставьте Serial.println и посмотрите значения своих переменных - львиная доля вопросов отпадут сразу. И почему все новички так любят работать вслепую?
Зачем Вам десятичный формат? Следуя Вашей логике, почему тогда все остальное в неизвестном формате?
Почитайте про представление данных в МК, все данные хранятся в одном и том же виде.
Для начала уберите ', DEC'
Я не буду с Вами спорить, мой опыт не позволяет это делать. Но первым, что я сделал - это включил в цикл
Serial.print(tm.Hour, DEC);
И он ведет себя вполне предсказуемо, как для меня и возвращает десятично значение (пробовал с разным значением)
Спасибо за наводку, извините за беспокойство.
Serial.print это функция, tm.Hour и DEC это параметры функции.
Хранение данных в памяти МК и отображение в 'человеческом' виде не имеет отношения к сравнению.
Надеюсь мои наводки помогут осознать. Удачи
Уже рою в этом направлении, спасибо!
Я не буду с Вами спорить, мой опыт не позволяет это делать. Но первым, что я сделал - это включил в цикл
Serial.print(tm.Hour, DEC);
И он ведет себя вполне предсказуемо, как для меня и возвращает десятично значение (пробовал с разным значением)
Спасибо за наводку, извините за беспокойство.
Вы разницу видите? Без скобок - это два значения, а со скобками - одно. Вы же в IF'ах одно используете, вот одно и печатайте.
Сделайте это (и остальное по моим пунктам) - понимания добавится точно.