Я не знаю, как сделать код для 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");
}
}
@james, 👍0
Обсуждение1 ответ
Лучший ответ:
Скорее всего, здесь вы не найдете никого, кто будет писать код за вас, так как это не бесплатный сервис написания кода. Но я предложу хороший способ.
Мне просто нужно, чтобы реле срабатывало каждые 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
- Нужно сделать кнопку, чтобы выключить будильник на часах
- Печать string and integer LCD
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Разница между «time_t» и «DateTime»
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- Arduino uno + cnc Shield v3 + драйвер шагового двигателя A4988 + AccelStepper?
- Отправьте несколько значений int из Python в Arduino, используя pySerial
- Глобальные переменные занимают много места в динамической памяти.
почему бы вам просто не добавить еще два блока «если»?, @jsotola
нет соответствующей функции для вызова 'DS3231::DS3231 (const uint8_t&, const uint8_t&) пожалуйста, помогите мне, @Gaurav Shet