Использование часов 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 все заработало.