While(1) не компенируется подскажите пж expected `)` before `while`

#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 строке.

1 лайк

К этому коду одни вопросы.
Зачем ; после } в if-ах?
Зачем while(1), если есть loop()?
Зачем в строке 10 скобка ( в конце?
И почему while(1) в setup-е плавно переходящем в loop? Вообще бред.

1 лайк

Я ее развернул в другую сторону, ошибка та же. Уже час бьюсь хз

Первый раз код пишу. Я исправил, но ошибка та же( в 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 строке закрывающая точка с запятой ?

1 лайк

Юхууу огромное спасибо всем вам

Я кажется понял сакральный смысл этого недокода

И, если я правильно понял, то тут должно быть так:

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).

1 лайк

Спасибо