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 " - а я не смогу объявить этот класс в теле скетча, не подключая библиотеку? Или объявление класса должно происходить только в библиотеке?