Почти год назад удалось слепить скетч для деления суток на периоды времени и использовать их для управления светом. Прототип был собран для временного эксперимента, работал нормально, потом разобран до нового сезона. За это время мне пришлось сменить 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';
Вот так компилятор мне отвечает: Код (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.
может DS1307?посмотрите здесь: скетч->подключить библиотеку->управлять библиотеками откроется менеджер библиотек (версия IDЕ 1.6.7)
Библиотеку DS1307 я много раз удалял, загружал, распаковывал и ставил заново . Но ничего не меняется. Но поскольку раньше этот скетч работал я и подумал что неправильная библиотека или изиенили ее за прошедшее время. Может ли быть такое? Я открыл файл DS1307.cpp этой библиотеки и не нашел в нем таких имен named 'minute' named 'hour') в ней другие имена, если это оно: #include "DS1307.h" #define REG_SEC 0 #define REG_MIN 1 #define REG_HOUR 2 В другой библиотеке DS1307.RTC эти имена есть, но появлются другие ошибки. Как же искать правильную, если у них одинаковые имена?
нашел, но имена теже что и в срр class Time public: uint8_thour; uint8_tmin; uint8_tsec; Я хоть правильно думаю?
а вы не из этой ветки библиотекой пользовались? http://forum.amperka.ru/threads/Управление-рассадным-боксом-платами-ардуино.4559/
она работает без проблем!у вас просто видимо конфликт с другой библиотекой ,удалите все другие файлы DS1307.h и DS1307.cpp
Она у меня называется RTC поэтому , но загружается как #include "DS1307.h". Она у меня даже тест не проходила. Спасибо большое, получилось!! Как же так, значит нельзя захламлять папку
Да нет не обязательно ,но и двух библиотек с одинаковыми заголовочными файлами не должно быть!вы же полный путь до библиотеки не прописываете...
Спасибо! Учусь, однако на ошибках. А все таки, если разные библиотеки имеют одинаковые заголовочные файлы - нельзя ли один из них изменить, например DS3107R.h ? Какие то правила существуют в сообществе ?