Код (C++): // библиотека для работы I²C #include <Wire.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 10 #define TIME_MINUTES 00 // интервал полива #define INTERVAL 5 // создаём объект для работы с часами реального времени DS3231 clock(); // состояния системы enum State { OFF, ON, }; // объявляем переменную state State state; // переменная для хранения времени в формате unixtime long unixTime; void setup() { // система выключена state = OFF; // открываем последовательный порт Serial.begin(9600); // пин реле в режим выхода pinMode(RELAY_PIN, OUTPUT); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную clock.set(20,29,45,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции // clock.set(__TIMESTAMP__); // что бы время менялось при прошивки или сбросе питания // закомментируйте оба метода clock.set(); } void loop() { // если значения влажности почвы превышают порог if (analogRead(MOISTUSE_PIN) > HUMIDITY_MAX) { // выходим из loop return false; } // запрашиваем данные с часов clock.read(); int hour = clock.getHour(); int minute = clock.getMinute(); // если система выключена if (state == OFF) { if (hour == TIME_HOUR && minute == TIME_MINUTES ) { // запоминаем текущее время unixTime = clock.getUnixTime(); // включаем полив wateringOn(); } } // если система включена if (state == ON) { if (!digitalRead(PIR_PIN)) { // если кто то оказался в зоне полива // выключаем полив wateringOff(); } else if (clock.getUnixTime() - unixTime > INTERVAL) { // если прошёл заданный интервал времени для полива // выключаем полив wateringOff(); } } } // функция включения полива void wateringOn() { digitalWrite(RELAY_PIN, HIGH); state = ON; } // функция выключения полива void wateringOff() { digitalWrite(RELAY_PIN, LOW); state = OFF;
Библиотека не та?? или строки не хватает типо: for(vector<string>::iterator i = vecquest.begin(); i != vecquest.end();++i)
Сначала подумал, что человек решил похвастаться своим решением автополива. А теперь даже не знаю что и думать... А вектор из STL тут при чём?
Ничего-не в топку. Человеку интерфейс общения не нужен. Потому как у него жёсткий алгоритм работы поливалки. В определённое время опросить датчик влажности. И поливать или не поливать В зависимости от влажности. Зачем ему общаться с девайсом? Если есть жёсткий алгоритм. И вообще нафига засорять голову временными интервалами. Измеряй влажность всегда. Влажность низкая -полей. Высокая -жди пока не будет низкая.
Вот Вам готовый рабочий скетч. Посмотрите,как люди работают с этими часами. Если не понятно,то тогда,я вам подскажу,какую библиотеку Вы не подключили. Но лучше сами.
Код (C++): byte hour = Clock.setMinute(h12, PM); byte minute = hour=Clock.setHour(h12, PM); // если система выключена if (state == OFF) { if (hour == TIME_HOUR && minute == TIME_MINUTES) { // включаем полив wateringOn(); } // если система включена if ((state == ON) && (clock.getTime() - TIME_MINUTES > INTERVAL)) { \\ измените эти строки на с++ кому не сложно,знаю там обишка есть.
вот, полностью рабочий код: Код (C++): setup(){} loop(){} С такими претензиями цена (не в рублях, а в нервах) будет расти, чтобы конфликтов не было советую прочитать статью, закрепленную в моей подписи.
могу, только зачем? У тебя в самом первом сообщении правильный код для этого фрагмента - оттуда и возьми,, начиная с комментария // запрашиваем данные с часов - это примерно со строки 6 процедуры loop()