Epoch Time и RTC DS 1302 ошибка компиляции

figley_migley
figley_migley аватар
Offline
Зарегистрирован: 05.09.2014

Помогите разобратся с кодом и ошибкой компиляции 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/

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

а где у вас подключаются нужные библиотеки - вот туда добавьте библиотеку с классом EcoSensor или уберите его вообще(не понятно зачем оно вообще нужно). Вобщем в таком виде оно не должно работать - прочитайте что такое классы, как их определять, посмотрите в какой нить бибиотеке вконце концов.

figley_migley
figley_migley аватар
Offline
Зарегистрирован: 05.09.2014

 NeiroN, спасибо за быстрый ответ.

Я пробовал убрать обект ECoSensor но компилятор ещё больше ошибок находит.

Я потихоньку вникаю в книжки Герберта Шилдта - Руководство для начинающих С++ и Шмидского Я.К. - Программирование на языке С++, но как и любой начинающий, осваивающий премудрости этого языка самостоятельно - путаюсь и в определениях и пока с трудом понимаю ход и последовательность выполнения программы - хочу для начала представить алгоритм программы. В данный момент мне не понятна логика в функции LOOP() - именно, чтобы убрать ES никак не пойму как "ращепить" RTC и ES.

И ещё такой вопрос - Вы пишите : "где у вас подключаются нужные библиотеки - вот туда добавьте библиотеку с классом EcoSensor " - а я не смогу объявить этот класс в теле скетча, не подключая библиотеку? Или объявление класса должно происходить только в библиотеке?