Я не знаю, как сделать код для rtc, управляющего реле

Я делаю проект для своего брата, ведь это автоматическая поливочная штука, все работает нормально, но я просто не знаю, как повторить код, чтобы реле говорило о включении на 5 минут в 09:00, чем на 5 минут в 12:00, а также на 5 минут в 17:00. как мне это сделать, я не очень хорош в этом, поэтому мне нужны четкие инструкции или кто-то, кто это напишет. Пожалуйста, помогите. спасибо, Джеймс.

вот код, который мне нужно повторить, чтобы выполнить то, что мне нужно сделать, в основном мне просто нужно, чтобы реле срабатывало каждые 4 часа в течение 5 минут. это на rtc на Arduino UNO.

#include <DS3231.h>

int Relay = 4;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 19; //УСТАНОВИТЬ ВРЕМЯ ВКЛЮЧЕНИЯ РЕЛЕ (24-ЧАСОВОЙ ФОРМАТ)
const int OnMin = 55;
const int OffHour = 19; //УСТАНОВИТЬ ВРЕМЯ ВЫКЛЮЧЕНИЯ РЕЛЕ
const int OffMin = 56;


void setup() {
  Serial.begin(115200);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
}

void loop() {
  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.println(" ");
  delay (1000);

  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,HIGH);
    Serial.println("LIGHT ON");
    }

    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,LOW);
      Serial.println("LIGHT OFF");
    }
}

, 👍0

Обсуждение

почему бы вам просто не добавить еще два блока «если»?, @jsotola

нет соответствующей функции для вызова 'DS3231::DS3231 (const uint8_t&, const uint8_t&) пожалуйста, помогите мне, @Gaurav Shet


1 ответ


Лучший ответ:

0

Скорее всего, здесь вы не найдете никого, кто будет писать код за вас, так как это не бесплатный сервис написания кода. Но я предложу хороший способ.

Мне просто нужно, чтобы реле срабатывало каждые 4 часа в течение 5 минут

Фраза "каждые x часов" требует использования оператора по модулю %. Модуль дает вам оставшееся значение целочисленного деления. Посмотрите эти значения:

0 % 4 = 0
1 % 4 = 1
2 % 4 = 2
3 % 4 = 3
4 % 4 = 0
5 % 4 = 1
...
7 % 4 = 3
8 % 4 = 0

Видите ли, операция по модулю 4 дает вам ноль каждые 4 часа, начиная с полуночи. Поэтому сделайте оператор if на основе этого

if(hour % 4 == 0 && min == 0)

включить и

if(hour % 4 == 0 && min == 5)

для выключения. Просто измените свой код таким образом, и все готово.

,

Спасибо, завтра попробую, посмотрю, как пойдет, потом сообщу., @james

Также я должен поставить все вещи 0%4?, @james

В вашем коде уже есть операторы if для включения и выключения реле. И я включил в свой ответ соответствующие операторы if с использованием оператора по модулю. Эти операторы if могут использоваться для включения и выключения реле. Это ваша часть, чтобы написать это в вашем коде. Если что-то в моем ответе непонятно, укажите, пожалуйста, что, чтобы я мог лучше объяснить, как это работает., @chrisl

Я понимаю, куда пошли утверждения, но я понятия не имею, нужно ли указывать список значений, поскольку я сказал, что я довольно глуп, когда дело доходит до этого, поэтому извините, если я немного упрям. Я молод и у меня мало знаний о том, как писать это. Ваш ад до сих пор очень ценится., @james

Список значений не принадлежит вашему коду. Я только что включил его, чтобы показать, как работает оператор по модулю., @chrisl

час" не был объявлен в этой области, @james

Как я уже сказал, я не буду писать код за вас. Вы должны взять операторы if из моего ответа и изменить их для своего случая. Попытайтесь понять свой старый код. Тогда попытайтесь понять, что это за принцип, который я описал. Затем вы сможете соответствующим образом изменить свой код. Но нужно учиться и понимать. Вы также можете выполнить несколько базовых руководств с помощью Arduino, чтобы изучить абсолютные основы. И изучение C тоже хорошо., @chrisl