#include <RTClib.h>
#include <Time.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int relay = 2; // Если пин 2 HIGH - Дверь закрыта
void setup()
{
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
if (rtc.begin()) (
Serial.println("Couldn't find RTC")
while (1);
{
void loop()
{
DateTime now = rtc.now();
Serial.println("Current Date & Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
if (now.hour() == 1 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, HIGH);
};
if (now.hour() == 7 && now.minute() == 30 && now.second == 0)
{
digitalWrite (2, LOW);
};
if (now.hour() == 13 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, HIGH);
};
if (now.hour() == 11 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, LOW);
};
}
}```
Проверь скобку в 13 строке.
К этому коду одни вопросы.
Зачем ; после } в if-ах?
Зачем while(1), если есть loop()?
Зачем в строке 10 скобка ( в конце?
И почему while(1) в setup-е плавно переходящем в loop? Вообще бред.
Я ее развернул в другую сторону, ошибка та же. Уже час бьюсь хз
Первый раз код пишу. Я исправил, но ошибка та же( в 12 строке выделено красным
#include <RTClib.h>
#include <Time.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int relay = 2; // Если пин 2 HIGH - Дверь закрыта
void setup()
{
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
if (rtc.begin())
Serial.println("Couldn't find RTC")
}
void loop()
{
DateTime now = rtc.now();
Serial.println("Current Date & Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
if (now.hour() == 1 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, HIGH);
}
if (now.hour() == 7 && now.minute() == 30 && now.second == 0)
{
digitalWrite (2, LOW);
}
if (now.hour() == 13 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, HIGH);
}
if (now.hour() == 11 && now.minute() == 5 && now.second == 0)
{
digitalWrite (2, LOW);
}
}
}|```
Где в 11 строке закрывающая точка с запятой ?
Юхууу огромное спасибо всем вам
Я кажется понял сакральный смысл этого недокода
И, если я правильно понял, то тут должно быть так:
if (rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
Т.е. если с RTC проблемы, то программа зависает в вечном цикле. Лень искать, что возвращает rtc.begin()
в случае проблемы, если верить коду - не 0.
Так всё сложно
Можете подсказать, почему у меня реле всё время включено, а когда программа его включает на несколько секунд оно наоборот выключается. А потом когда его программ выключает, реле включается
#include <RTClib.h>
#include <Time.h>
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int relay = 2; // Если пин 2 HIGH - реле вкл
void setup()
{
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
if (rtc.begin()){
Serial.println("Couldn't find RTC");
}}
void loop()
{
DateTime now = rtc.now();
Serial.println("Current Date & Time: ");
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(1000);
if (now.hour() == 23 && now.minute() == 06 && now.second() == 0)
{
digitalWrite (2, HIGH);
}
if (now.hour() == 23 && now.minute() == 06 && now.second() == 11)
{
digitalWrite (2, LOW);
}
if (now.hour() == 22 && now.minute() == 43 && now.second() == 0)
{
digitalWrite (2, HIGH);
}
if (now.hour() == 22 && now.minute() == 43 && now.second() == 11)
{
digitalWrite (2, LOW);
}
}````
Вы, вероятнее всего, не голое реле подключаете к ардуине, а модуль с реле, а они управляются по разному, но в основном, низким уровнем. Поэтому, для его включения нужно использовать digitalWrite(relay, LOW);
и соответственно для выключения - digitalWrite(relay, HIGH);
И ещё, Вы используете для определения пина с реле int relay = 2;
ну так потом везде и пиши́те digitalWrite(relay, LOW);
а не digitalWrite(2, LOW);
(или HIGH).
Спасибо