Использование часов DC1302 в проектах с условием
- Войдите на сайт для отправки комментариев
Вс, 22/02/2015 - 22:37
нашел в сети код для вывода точного времени на базе часов DC1302, код рабочий свои функции выполняет.
Но я хочу чтобы была возможность прописать условия например при такой то дате во столько то часов выполнилось определенное условие. и вот тут загвоздка, выводится ошибка:
Chaci_V1.1.ino:77:14: error: invalid digit "9" in octal constant
ругается на строчку
if ((t.mon)==09) {//условие если месяц равен 9 то выводим ОК
Serial.println("OK");}
Вот сам КОД:
#include <stdio.h> #include <DS1302.h> namespace { const int kCePin = 7; // Chip Enable const int kIoPin = 6; // Input/Output const int kSclkPin = 5; // Serial Clock DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return "Sunday"; case Time::kMonday: return "Monday"; case Time::kTuesday: return "Tuesday"; case Time::kWednesday: return "Wednesday"; case Time::kThursday: return "Thursday"; case Time::kFriday: return "Friday"; case Time::kSaturday: return "Saturday"; } return "(unknown day)"; } void printTime() { Time t = rtc.time(); const String day = dayAsString(t.day); char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); Serial.println(buf); } } // namespace void setup() { Serial.begin(9600); pinMode(4,OUTPUT); pinMode(3,OUTPUT); digitalWrite(4,LOW); //масса digitalWrite(3,HIGH); //+5В rtc.writeProtect(false); rtc.halt(false); /*Time t(2013, 9, 22, 21, 06, 00, Time::kSunday); //после установки времени нужно комментировать rtc.time(t);*/ } void loop() { Time t = rtc.time(); const String day = dayAsString(t.day); char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); if ((t.mon)==09) {//условие если месяц равен 9 то выводим ОК Serial.println("OK");} printTime(); // вывод времени в порт delay(1000); }
Вам компилятор все правильно сказал, перевести не можете?
Перевести проблем не составит, а вот как исправить эту ошибку не знаю. Только недавно начал разбираться с arduino
Очевидно 0 перед 9 убрать. Когда первый 0 компилятор считает что перед ним число в 8миричной системе счисления, а там цифр больше 7 не бывает...
Вот что говорит первая же ссылка в гугле по поиску 'octal constant', http://h21007.www2.hp.com/portal/download/files/unprot/fortran/docs/lrm/...
А ещё проще можно было забить все сообщение об ошибке и сразу прочитать ответ.
И Ардуино тут не при чем, эта ошибка, она и в Африке ошибка.
Спасибо большое за объяснение когда убрал 0 все заработало.