DS3107 подбор библиотеки.Решено!

Тема в разделе "Arduino & Shields", создана пользователем MESS, 31 янв 2016.

  1. MESS

    MESS Гик

    Почти год назад удалось слепить скетч для деления суток на периоды времени и использовать их для управления светом. Прототип был собран для временного эксперимента, работал нормально, потом разобран до нового сезона. За это время мне пришлось сменить IDE. Я заново устанавлил нужные библиотеки.
    Теперь этот работавший скетч ругается на библиотеку часов - не компилируется.
    Я удалил все библиотеки часов и ставил заново, пытаясь подобрать - не вышло. Я понимаю, что потерял правильную библиотеку, но как привести в соответствие имеющуюся, не имею понятия как. Прошу помочь делом или советом.
    Код (C++):
    #include <EEPROM.h>
    #include <LCD16x2.h>
    #include <DS1307.h>
    #include <Wire.h>
    #include <Timer_P.h>
    LCD16x2 lcd;

    #define LEDRED 3    
    #define LEDBLUE 4  


    //делим время суток на периоды для setState;
    #define UTRO     clock.hour >=7 && clock.hour < 11  
    #define DAY      clock.hour >=11 && clock.hour < 17
    #define VECHER   clock.hour >=17 && clock.hour < 22
    #define NIGHT    clock.hour >=21 && clock.hour < 7  

    //Массив, содержащий время компиляции
    char compileTime[] = __TIME__;
    //Для работы с микросхемой часов используем библиотеки

    DS1307 clock; // это все работало!!!!
    Timer_P ClockUpdateTimer;
    byte Sec_Old, Min_Old;
    byte setState;  // состояние, которое надо выполнить в зависимости от времени суток
    boolean P_First_Run;

    void setup()
    {
        // конфигурируем пины на выход
     
      pinMode(RED, OUTPUT);
      pinMode(BLUE, OUTPUT);
      //Запускаем часы реального времени
      delay(5000 );
      Wire.begin();
      lcd.lcdClear();
      lcd.lcdGoToXY(2,1);
      lcd.lcdWrite("Time-");


      //Получаем число из строки, зная номер первого символа
      byte hour = getInt(compileTime, 0);
      byte minute = getInt(compileTime, 3);
      byte second = getInt(compileTime, 6);

      //Импровизированный хэш времени
      //Содержит в себе количество секунд с начала дня
      unsigned int hash = hour * 60 * 60 + minute * 60 + second;

      //Проверяем несовпадение нового хэша с хэшем в EEPROM
      if (EEPROMReadInt(0) != hash) {

        //Сохраняем новый хэш
        EEPROMWriteInt(0, hash);

        //Готовим для записи в RTC часы, минуты, секунды
        clock.fillByHMS(hour, minute, second);
        //Записываем эти данные во внутреннюю память часов.
        //С этого момента они начинают считать
        clock.setTime();
        delay(100);
      }
      P_First_Run = true;
    }
    void loop()
    {
      //Запрашиваем время с часов
      ClockUpdateTimer.TimerV(!ClockUpdateTimer.Q0(), 0, 2, 500);
      if (ClockUpdateTimer.Q0() ||  P_First_Run) {clock.getTime(); delay(20);}//запрос времени раз в 500мс
      if ((clock.minute != Min_Old) || P_First_Run)
      {
        lcd.lcdGoToXY(7,1);
        lcd.lcdWrite(clock.hour/10);
        lcd.lcdGoToXY(8,1);
        lcd.lcdWrite(clock.hour%10);
        lcd.lcdGoToXY(10,1);
        lcd.lcdWrite(clock.minute/10);
        lcd.lcdGoToXY(11,1);
        lcd.lcdWrite(clock.minute%10);

        }

      if ((clock.second != Sec_Old) || P_First_Run){

        lcd.lcdGoToXY(9,1);
        if (clock.second % 2 == 0) lcd.lcdWrite(" ");
        else lcd.lcdWrite(":");
      }
      Sec_Old = clock.second;// запоминаем текущие показания секунд
      Min_Old = clock.minute;
      P_First_Run = false;
    }
    char getInt(const char* string, int startIndex) {
      return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0';
     

    Вложения:

    Последнее редактирование: 31 янв 2016
  2. MESS

    MESS Гик

    Вот так компилятор мне отвечает:
    Код (C++):
    Arduino: 1.6.0 (Mac OS X), Плата"Arduino Nano, ATmega328"

    sketch_jan31a.ino:22:8: error: no matching function for call to 'DS1307::DS1307()'
    sketch_jan31a.ino:22:8: note: candidates are:
    In file included from sketch_jan31a.ino:3:0:
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:79:3: note: DS1307::DS1307(uint8_t, uint8_t)
       DS1307(uint8_t data_pin, uint8_t sclk_pin);
       ^
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:79:3: note:   candidate expects 2 arguments, 0 provided
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:76:7: note: DS1307::DS1307(const DS1307&)
    class DS1307
           ^
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:76:7: note:   candidate expects 1 argument, 0 provided
    sketch_jan31a.ino: In function 'void setup()':
    sketch_jan31a.ino:53:22: error: 'EEPROMReadInt' was not declared in this scope
    sketch_jan31a.ino:56:27: error: 'EEPROMWriteInt' was not declared in this scope
    sketch_jan31a.ino:59:11: error: 'class DS1307' has no member named 'fillByHMS'
    sketch_jan31a.ino:62:19: error: no matching function for call to 'DS1307::setTime()'
    sketch_jan31a.ino:62:19: note: candidate is:
    In file included from sketch_jan31a.ino:3:0:
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:81:7: note: void DS1307::setTime(uint8_t, uint8_t, uint8_t)
      void setTime(uint8_t hour, uint8_t min, uint8_t sec);
           ^
    /Users/vgokh/Desktop/Sckethlook Arduino/libraries/DS1307/DS1307.h:81:7: note:   candidate expects 3 arguments, 0 provided
    sketch_jan31a.ino: In function 'void loop()':
    sketch_jan31a.ino:72:14: error: 'class DS1307' has no member named 'minute'
    sketch_jan31a.ino:75:24: error: 'class DS1307' has no member named 'hour'
    sketch_jan31a.ino:77:24: error: 'class DS1307' has no member named 'hour'
    sketch_jan31a.ino:79:24: error: 'class DS1307' has no member named 'minute'
    sketch_jan31a.ino:81:24: error: 'class DS1307' has no member named 'minute'
    sketch_jan31a.ino:85:14: error: 'class DS1307' has no member named 'second'
    sketch_jan31a.ino:88:15: error: 'class DS1307' has no member named 'second'
    sketch_jan31a.ino:91:19: error: 'class DS1307' has no member named 'second'
    sketch_jan31a.ino:92:19: error: 'class DS1307' has no member named 'minute'
    sketch_jan31a.ino: In function 'char getInt(const char*, int)':
    sketch_jan31a.ino:96:78: error: expected '}' at end of input
    Ошибка компиляции.

      This report would have more information with
      "Отображать вывод во время компиляции"
      enabled in File > Preferences.
     
     
  3. lerik2703

    lerik2703 Гик

    может DS1307?посмотрите здесь: скетч->подключить библиотеку->управлять библиотеками
    откроется менеджер библиотек (версия IDЕ 1.6.7)
     
  4. MESS

    MESS Гик

    Библиотеку DS1307 я много раз удалял, загружал, распаковывал и ставил заново . Но ничего не меняется. Но поскольку раньше этот скетч работал я и подумал что неправильная библиотека или изиенили ее за прошедшее время. Может ли быть такое?
    Я открыл файл DS1307.cpp этой библиотеки и не нашел в нем таких имен named 'minute' named 'hour') в ней другие имена, если это оно:
    #include "DS1307.h"
    #define REG_SEC 0
    #define REG_MIN 1
    #define REG_HOUR 2
    В другой библиотеке DS1307.RTC эти имена есть, но появлются другие ошибки.
    Как же искать правильную, если у них одинаковые имена?
     
    Последнее редактирование: 1 фев 2016
  5. lerik2703

    lerik2703 Гик

    класс должен объявлен в DS1307.h
     
  6. MESS

    MESS Гик

    нашел, но имена теже что и в срр
    class Time
    public:
    uint8_thour;
    uint8_tmin;
    uint8_tsec;
    Я хоть правильно думаю?
     
  7. lerik2703

    lerik2703 Гик

  8. MESS

    MESS Гик

    Да, конечно!
     
  9. lerik2703

    lerik2703 Гик

    она работает без проблем!у вас просто видимо конфликт с другой библиотекой ,удалите все другие файлы DS1307.h и DS1307.cpp
     
  10. MESS

    MESS Гик

    Она у меня называется RTC поэтому , но загружается как #include "DS1307.h". Она у меня даже тест не проходила.


    Спасибо большое, получилось!! Как же так, значит нельзя захламлять папку
     
    Последнее редактирование: 2 фев 2016
  11. MESS

    MESS Гик

    Правильно ли понимаю, что отработав скетч нужно его библиотеки удалить?
     
  12. lerik2703

    lerik2703 Гик

    Да
    нет не обязательно ,но и двух библиотек с одинаковыми заголовочными файлами не должно быть!вы же полный путь до библиотеки не прописываете...
     
    MESS нравится это.
  13. MESS

    MESS Гик

    Спасибо! Учусь, однако на ошибках.
    А все таки, если разные библиотеки имеют одинаковые заголовочные файлы - нельзя ли один из них изменить, например DS3107R.h ?
    Какие то правила существуют в сообществе ?
     
    Последнее редактирование: 2 фев 2016
  14. lerik2703

    lerik2703 Гик

    почему нельзя!? пожалуйста
     

    Вложения:

    • RTC.zip
      Размер файла:
      4,1 КБ
      Просмотров:
      280
    MESS нравится это.
  15. MESS

    MESS Гик

    Это Вы в файле .срр произвели замену? только в нем или еще где-то?
     
  16. lerik2703

    lerik2703 Гик

    ещё в DS1307_RTC.h
    #ifndef __DS1307_RTC_H__
    #define __DS1307_RTC_H__
    загрузите библиотеку заново
     
  17. MESS

    MESS Гик

    Понял, спасибо Вам!
     
  18. lerik2703

    lerik2703 Гик