Код (C++): #include <Wire.h> #include <RelayModule.h> #include <DS3231.h> #include <EEPROM.h> #define RELAY_PIN 8 // номер пина PIR-датчика // #define PIR_PIN A2 // номер пина датчика влажности почвы #define MOISTUSE_PIN A1 // максимальный порог влажности почвы #define HUMIDITY_MAX 100 // время включения полива в часах и минутах #define TIME_HOUR 20 #define TIME_MINUTES 30 // интервал полива #define INTERVAL 20 // создаём объект для работы с часами реального времени // 24-часовой формат #define H12 false // Формат 12-часового времени #define PM false DS3231 clock; // состояния системы enum State { OFF, ON, }; // объявляем переменную state State state; // переменная для хранения времени в формате unixtime long unixTime; void setup() { // система выключена state = OFF; // открываем последовательный порт Serial.begin(9600); // пин реле в режим выхода pinMode(RELAY_PIN, OUTPUT); // инициализация часов Wire.begin(); } // метод установки времени и даты в модуль вручную // uint16_t date2days(uint16_t y, uint8_t m, uint8_t d); // { // // метод установки времени и даты автоматически при компиляции // // clock.set(__TIMESTAMP__); // // что бы время менялось при прошивки или сбросе питания // // закомментируйте оба метода clock.set(); // } void loop() { // если значения влажности почвы превышают порог if (analogRead(MOISTUSE_PIN) > HUMIDITY_MAX) { // выходим из loop return false; } // данные с часов byte hour = clock.getHour(); byte minute = clock.getMinute(); // если система выключена if (state == OFF) { if (hour == TIME_HOUR && minute == TIME_MINUTES) { // включаем полив wateringOn(); } // если система включена if ((state == ON) && (clock.getTime() - TIME_MINUTES > INTERVAL)) { // если прошёл заданный интервал времени для полива // выключаем полив wateringOff(); } } } // функция включения полива void wateringOn() { digitalWrite(RELAY_PIN, HIGH); state = ON; } // функция выключения полива void wateringOff() { digitalWrite(RELAY_PIN, LOW); state = OFF; } немного изменил код но у меня вылетает ошибка : candidate expects 2 arguments, 0 provided Autowatering:80:33: error: 'class DS3231' has no member named 'getTime' if ((state == ON) && (clock.getTime() - TIME_MINUTES > INTERVAL)) Autowatering:69:29: error: no matching function for call to 'DS3231::getHour()' byte hour = clock.getHour();
не перевести что-ли? В классе твоей библиотеки нет методов, на которые ругается компилятор. Открывай библиотеку и смотри, какие там методы в классе.
Скажите мне. зачем вы лезете менять код. явно ничего в нем не понимая? В прежнем коде на этом месте стояло clock.getUnixTime() - и оно сравнивалось с переменной, которая содержит это unixTime. А вы мало того, что ставите туда какое-то неизвестное clock.getTime() -так еще и сравниваете это с минутами. Даже если вы замените clock.getTime() на правильную процедуру - нифига у вас работать не будет.
я знаю что там ошибка,просто не получается её корректно исправить,не надо делать выводы поспешные,кто же не ошибается.И не раз ставил правильно,но ошибка все равно появлялось что бесконечно раздражало,потому и обратился.
какие же они поспешные, если ты просто от балды подставляющь в код разные операторы? покажи мне вариант, где ты "исправил правильно", а ошибка все равно есть?