Товарищи, есть фрагмент кода для работы с часами ds1307 - мне нужно СРАВНИВАТЬ данные из RTC.hour с числом. Я так понимаю, что в RTC.hour хранятся данные в формате строки? Соответственно я не могу эти данные сравнивать с числом. В результате все время идет выполнение блока else - и вывода на экран нуля (соответственно реле не срабатывает). Как можно решить эту проблему? Код (Text): { RTC.getTime(); float chas = RTC.hour; } if (chas > 10) // если время больше времени включения включаем реле { digitalWrite(7, LOW); lcd.setCursor(14, 0); lcd.print("1"); } else { digitalWrite(7, HIGH); lcd.setCursor(14, 0); lcd.print("0"); }
Я думаю, можно отобразить через Serial.print(); эту строку RTC.hour, тогда вы поймете что там есть, и что происходит. От этого и отталкиваться.
Насколько я помню, hour в классе DS1307 имеет тип uint8_t. Соответственно, это число, которое можно сравнивать с числом. Возможно, модуль просто "не идет" по причине севшей батарейки в нем или он просто остановлен (на такую возможность намекает наличие StopClock в классе). Еще вариант - неправильное подключение модуля.
Насчет строки это только предположение. Происходит там это : "19.00" - т.е. 19 часов на данный момент.... сравнивал и с 10 и с 10.00 и т.д. - все равно идет только ветка нет Модуль идет - время показывает в сериал. Подключен тоже правильно - визуально отображает и в сериал и на лсиди. Для отображения использую "..., DEC", или указываю количество знаков после запятой - 0.... Посмотрел несколько примеров, действительно вроде как в формате uint8_t, но не могу понять как его сравнить
все - вопрос снят - все оказалось намного проще - если не использовать флоат, а сравнивать непосредственно if (RTC.hour > 10) - то все отлично работает.. Просто мне надо быть внимательней, при изучении примеров Всем спасибо за участие...
Только сейчас заметил. До и после float chas = RTC.hour; идут соответственно открывающая и закрывающая фигурные скобки, что ограничивает видимость переменной chas и ее присвоенного значения этими скобками. А это намекает на то, что где-то выше тоже объявлена переменная chas, иначе бы код просто не компилировался. А эта переменная где-то имеет какое-то свое собственное значение, никак не связанное с тем, что присваивается из RTC.hour, и сравнение происходит с этим неизвестным значением.
А вот это уже очень интересно - что то с этими фигурными скобками я намудрил по полной - получается, что если я тут задал флагу (chas) - значение например 0, а потом закрыл скобки - то дальнейшие операции будут видеть только первоначальные значения chas??? Или я чтото туплю не по детски. Надо наверно на завтра все отложить - на свежую голову...
Все просто. Два примера Код (Text): int x=1; // внешняя x { int x=2; // объявлена новая внутренняя переменная x, //которой присвоено значение 2 } // переменная внутри скобок прекратила свое // существование, действует внешняя. x++; //Внешняя x увеличилась на 1 // Значение x равно 2 Код (Text): int x=1; // внешняя x { x=2; // внутренней x не объявлено, //внешняя x получает значение 2; } x++; //Измененная внешняя x увеличилась на 1 // Значение x равно 3 Как говорится, найдите десять отличий.