Автополив

Тема в разделе "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 Гуру

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