Автополив

Тема в разделе "Arduino & Shields", создана пользователем Centurio_Mark, 30 май 2019.

  1. Centurio_Mark

    Centurio_Mark Нуб

    Код (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();
     
  2. parovoZZ

    parovoZZ Гуру

    не перевести что-ли? В классе твоей библиотеки нет методов, на которые ругается компилятор. Открывай библиотеку и смотри, какие там методы в классе.
     
  3. b707

    b707 Гуру

    Скажите мне. зачем вы лезете менять код. явно ничего в нем не понимая?
    В прежнем коде на этом месте стояло clock.getUnixTime() - и оно сравнивалось с переменной, которая содержит это unixTime. А вы мало того, что ставите туда какое-то неизвестное clock.getTime() -так еще и сравниваете это с минутами. Даже если вы замените clock.getTime() на правильную процедуру - нифига у вас работать не будет.
     
  4. Centurio_Mark

    Centurio_Mark Нуб

    я знаю что там ошибка,просто не получается её корректно исправить,не надо делать выводы поспешные,кто же не ошибается.И не раз ставил правильно,но ошибка все равно появлялось что бесконечно раздражало,потому и обратился.
     
  5. Centurio_Mark

    Centurio_Mark Нуб

    и я хоть что-то пытаюсь делать ваших вариантов не вижу.
     
  6. DetSimen

    DetSimen Гуру

    мой вариант будет видим за 500р.
     
  7. b707

    b707 Гуру

    какие же они поспешные, если ты просто от балды подставляющь в код разные операторы?
    покажи мне вариант, где ты "исправил правильно", а ошибка все равно есть?