Люди, ну объясните, пожалуйста, нубу как работать с библиотеками!!! Или где почитать. А то везде написано только как устанавливать, как будто это самая трудная проблема. Ну вот пример кода из библиотеки 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(); Ну что я не так делаю!?
Да, правильно. Компилятор ругается на то, что нет декларации с идентификатором '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(); // вызываем метод у экземпляра класса (объекта) }
Для чего необходима декларация? Исправил. Теперь ругается: Код (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()'
Вообще-то в комплекте с библиотекой, как правило, идет хотя бы один пример ее использования. Если у Вас Arduino IDE, посмотрите в меню: File -> Examples -> Examples from Custom Libraries. Надеюсь, это опечатка: Код (C++): include <DS1307.h> должно быть так: Код (C++): #include <DS1307.h>
В языках программирования C/C++ (но не только) прежде, чем "что-то" использовать, это "что-то" нужно задекларировать. Вы же сами декларировали переменные: Код (C++): long s; int sec; int ledPin = 9;
Возможно, помимо объявления (декларирования) экземпляра класса, его нужно еще и инициализировать, т. е. вызвать конструктор класса. IMHO, лучше не давать экземпляру класса тоже имя, что и у класса.
поддерживаю. В данному случае DS1307 RTC; и RTC.getTime(); будет нагляднее - нет шансов ошибиться с регистрами символов.
Конструкторы класса требуют на вход параметры, что за параметры -- смотрите документацию на класс 'DS1307': Код (C++): DS1307 ds1307(arg1, arg2...); // вместо 'arg1', 'arg2', ... нужно подставить правильные значения