Epoch Time и RTC DS 1302 ошибка компиляции
- Войдите на сайт для отправки комментариев
Пт, 05/09/2014 - 16:54
Помогите разобратся с кодом и ошибкой компиляции IDE Arduino 1.0.5-r2 , RTC DS 1302
#define DS1302_SCLK_PIN A3 // Arduino pin for the Serial Clock
#define DS1302_IO_PIN A4 // Arduino pin for the Data I/O
#define DS1302_CE_PIN A5 // Arduino pin for the Chip Enable
static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31}; // API starts months from 1, this array starts from 0
// Create a DS1302 object.
DS1302 rtc(DS1302_SCLK_PIN, DS1302_IO_PIN, DS1302_CE_PIN); // Real Time Clock object
String timestamp;
void setup (void)
{
// Set the clock to run-mode, and disable the write protection
rtc.halt(false);
// rtc.writeProtect(false);
// The following lines can be commented out to use the values already stored in the DS1302
// rtc.setDOW(FRIDAY); // Set Day-of-Week to FRIDAY
// rtc.setTime(12, 0, 0); // Set the time to 12:00:00 (24hr format)
// rtc.setDate(6, 8, 2010); // Set the date to August 6th, 2010
Serial.begin(9600);
Serial.flush();
Serial.println("reset");
Serial.println("-------");
}
void loop(void)
{
EcoSensor es;
// Get data from the DS1302
es.rtc = getEpochTime(rtc.getTime()); //объект.переменная
timestamp = (String) es.rtc;
Serial.println("Timestamp: " + timestamp);
delay(5000);
}
// Modified from Time.h to work with time from DS1302 library
uint32_t getEpochTime(Time tm){
int i;
uint32_t seconds;
int year = tm.year - 1970;
// seconds from 1970 till 1 jan 00:00:00 of the given year
seconds= year*(SECS_PER_DAY * 365);
for (i = 0; i < year; i++) {
if (LEAP_YEAR(i)) {
seconds += SECS_PER_DAY; // add extra days for leap years
}
}
// add days for this year, months start from 1
for (i = 1; i < tm.mon; i++) {
if ( (i == 2) && LEAP_YEAR(year)) {
seconds += SECS_PER_DAY * 29;
} else {
seconds += SECS_PER_DAY * monthDays[i-1]; //monthDay array starts from 0
}
}
seconds+= (tm.date-1) * SECS_PER_DAY;
seconds+= tm.hour * SECS_PER_HOUR;
seconds+= tm.min * SECS_PER_MIN;
seconds+= tm.sec;
return seconds;
}
Проблема в части void Loop (), строка 32
Компилятор сообщает что EcoSensor и es не задекларированы в данном скетче.
Я запутался в создании обьекта и переменной, помогите пожалуйста уловить логику.
Скетч взят отсюда: http://tech.comparethemarket.com/arduino-real-time-clock-using-ds1302/
а где у вас подключаются нужные библиотеки - вот туда добавьте библиотеку с классом EcoSensor или уберите его вообще(не понятно зачем оно вообще нужно). Вобщем в таком виде оно не должно работать - прочитайте что такое классы, как их определять, посмотрите в какой нить бибиотеке вконце концов.
NeiroN, спасибо за быстрый ответ.
Я пробовал убрать обект ECoSensor но компилятор ещё больше ошибок находит.
Я потихоньку вникаю в книжки Герберта Шилдта - Руководство для начинающих С++ и Шмидского Я.К. - Программирование на языке С++, но как и любой начинающий, осваивающий премудрости этого языка самостоятельно - путаюсь и в определениях и пока с трудом понимаю ход и последовательность выполнения программы - хочу для начала представить алгоритм программы. В данный момент мне не понятна логика в функции LOOP() - именно, чтобы убрать ES никак не пойму как "ращепить" RTC и ES.
И ещё такой вопрос - Вы пишите : "где у вас подключаются нужные библиотеки - вот туда добавьте библиотеку с классом EcoSensor " - а я не смогу объявить этот класс в теле скетча, не подключая библиотеку? Или объявление класса должно происходить только в библиотеке?