Использование часов DC1302 в проектах с условием

kuchtaul
Offline
Зарегистрирован: 22.02.2015

нашел в сети код для вывода точного времени на базе часов 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);
  

}

 

 

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вам компилятор все правильно сказал, перевести не можете?

kuchtaul
Offline
Зарегистрирован: 22.02.2015

Перевести проблем не составит, а вот как исправить эту ошибку не знаю. Только недавно начал разбираться с arduino

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Очевидно 0 перед 9 убрать. Когда первый 0 компилятор считает что перед ним число в 8миричной системе счисления, а там цифр больше 7 не бывает...

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вот что говорит первая же ссылка в гугле по поиску 'octal constant', http://h21007.www2.hp.com/portal/download/files/unprot/fortran/docs/lrm/...
А ещё проще можно было забить все сообщение об ошибке и сразу прочитать ответ.
И Ардуино тут не при чем, эта ошибка, она и в Африке ошибка.

kuchtaul
Offline
Зарегистрирован: 22.02.2015

Спасибо большое за объяснение когда убрал 0 все заработало.