Библиотека RTC

Тема в разделе "Arduino & Shields", создана пользователем Mixael, 1 июн 2016.

Метки:
  1. Mixael

    Mixael Нуб

    Люди, ну объясните, пожалуйста, нубу как работать с библиотеками!!! Или где почитать. А то везде написано только как устанавливать, как будто это самая трудная проблема.

    Ну вот пример кода из библиотеки DS1307:
    Код (C++):
    class DS1307
    {
    public:
            DS1307(uint8_t data_pin, uint8_t sclk_pin);
        Time    getTime();
        void    setTime(uint8_t hour, uint8_t min, uint8_t sec);
        void    setDate(uint8_t date, uint8_t mon, uint16_t year);
        void    setDOW(uint8_t dow);
    Я правильно понимаю, что DS1307 - это класс, getTime - метод?

    В ардуине у меня такой код:
    Код (C++):
    include <DS1307.h>
    #include <Time.h>
    #include <TimeLib.h>

    long s;
    int sec;
    int ledPin = 9;
    void setup()
    {
      Serial.begin(9600);
      pinMode (ledPin, OUTPUT);
      DS1307.getTime();
      }
    На него ругается компилятор:
    Код (Text):
    In function 'void setup()':

    sketch_jun01b:12: error: expected unqualified-id before '.' token

       DS1307.getTime();
    Ну что я не так делаю!?
     
  2. AlexU

    AlexU Гуру

    Да, правильно.

    Компилятор ругается на то, что нет декларации с идентификатором 'DS1307'.

    Код (C++):
    include <DS1307.h>
    #include <Time.h>
    #include <TimeLib.h>

    long s;
    int sec;
    int ledPin = 9;
    DS1307 ds1307;   // создаём декларацию экземпляра класса (объекта)
    void setup()
    {
      Serial.begin(9600);
      pinMode (ledPin, OUTPUT);
      ds1307.getTime();  // вызываем метод у экземпляра класса (объекта)
      }
     
  3. Mixael

    Mixael Нуб

    Для чего необходима декларация?

    Исправил. Теперь ругается:
    Код (Text):

    sketch_jun01b:8: error: no matching function for call to 'DS1307::DS1307()'

     DS1307 ds1307;   // создаём декларацию экземпляра класса (объекта)

            ^

    C:\Users\Lena\Documents\Arduino\sketch_jun01b\sketch_jun01b.ino:8:8: note: candidates are:

    In file included from C:\Users\Lena\Documents\Arduino\sketch_jun01b\sketch_jun01b.ino:1:0:

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:79:3: note: DS1307::DS1307(uint8_t, uint8_t)

       DS1307(uint8_t data_pin, uint8_t sclk_pin);

       ^

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:79:3: note:   candidate expects 2 arguments, 0 provided

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:76:7: note: constexpr DS1307::DS1307(const DS1307&)

     class DS1307

           ^

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:76:7: note:   candidate expects 1 argument, 0 provided

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:76:7: note: constexpr DS1307::DS1307(DS1307&&)

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:76:7: note:   candidate expects 1 argument, 0 provided

    C:\Users\Lena\Documents\Arduino\sketch_jun01b\sketch_jun01b.ino: In function 'void loop()':

    sketch_jun01b:19: error: no matching function for call to 'Time::Time(int&)'

     Serial.print(Time(sec));

                          ^

    C:\Users\Lena\Documents\Arduino\sketch_jun01b\sketch_jun01b.ino:19:22: note: candidates are:

    In file included from C:\Users\Lena\Documents\Arduino\sketch_jun01b\sketch_jun01b.ino:1:0:

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:65:3: note: Time::Time()

       Time();

       ^

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:65:3: note:   candidate expects 0 arguments, 1 provided

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:54:7: note: constexpr Time::Time(const Time&)

     class Time

           ^

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:54:7: note:   no known conversion for argument 1 from 'int' to 'const Time&'

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:54:7: note: constexpr Time::Time(Time&&)

    C:\Users\Lena\Documents\Arduino\libraries\DS1307/DS1307.h:54:7: note:   no known conversion for argument 1 from 'int' to 'Time&&'

    sketch_jun01b:23: error: expected '}' at end of input

      }

      ^

    exit status 1
    no matching function for call to 'DS1307::DS1307()'

     
     
  4. fogary

    fogary Гик

    Вообще-то в комплекте с библиотекой, как правило, идет хотя бы один пример ее использования. Если у Вас Arduino IDE, посмотрите в меню: File -> Examples -> Examples from Custom Libraries.

    Надеюсь, это опечатка:
    Код (C++):
    include <DS1307.h>
    должно быть так:
    Код (C++):
    #include <DS1307.h>
     
    Последнее редактирование: 1 июн 2016
  5. AlexU

    AlexU Гуру

    В языках программирования C/C++ (но не только) прежде, чем "что-то" использовать, это "что-то" нужно задекларировать. Вы же сами декларировали переменные:
    Код (C++):
    long s;
    int sec;
    int ledPin = 9;
     
  6. fogary

    fogary Гик

    Возможно, помимо объявления (декларирования) экземпляра класса, его нужно еще и инициализировать, т. е. вызвать конструктор класса.

    IMHO, лучше не давать экземпляру класса тоже имя, что и у класса.
     
  7. Tomasina

    Tomasina Сушитель лампочек Модератор

    поддерживаю. В данному случае DS1307 RTC; и RTC.getTime(); будет нагляднее - нет шансов ошибиться с регистрами символов.
     
  8. AlexU

    AlexU Гуру

    Конструкторы класса требуют на вход параметры, что за параметры -- смотрите документацию на класс 'DS1307':
    Код (C++):
    DS1307 ds1307(arg1, arg2...); // вместо 'arg1', 'arg2', ... нужно подставить правильные значения