@Suyano
Новичок

Ошибка при компиляции таймера: invalid operands of types. Как быть?

Доброго времени суток! Делаю таймер для управления реле (arduino uno).
При проверке кода вылетает ошибка:
Program:33: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator<' 
if(day<1||day>5||second!=0) return; 
^ 
Program:33: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator>' 
if(day<1||day>5||second!=0) return; 
^ 
Program:33: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator!=' 
if(day<1||day>5||second!=0) return; 
^ 
Program:34: error: invalid operands of types '<unresolved overloaded function type>' and 'int' to binary 'operator==' 
flag|=(hour==8&&minute==30);


Сам код таймера:
//Цепляем библиотеки
#include <DS3231.h>
#include <Wire.h>
#include <RTC.h>
#include <Time.h>
#include <TimeLib.h>
//Готово
 
int Rele = 7; //номер пина для реле
DS3231 Clock; //подключаем часики
bool h12; //24часовой формат
bool PM; //тоже к часикам и формату
 
void setup() { //запускаемся
  Serial.begin(9600); //устанавливаем скорость передачи данных
  Wire.begin();
  digitalWrite(Rele, HIGH); //устанавливаем значение на реле - "выключено"
  pinMode(Rele, OUTPUT); //устанавливаем на реле "высокий" уровень
}
 
void loop() { //рабочий режим/алгоритмы
  Clock.setClockMode(false);
int day, hour, minute, second; //объявляем переменные
 
day = Clock.getDoW(); //получаем день недели
hour = Clock.getHour(h12, PM); //присваиваем часы
minute = Clock.getMinute(); //присваиваем минуты
second = Clock.getSecond(); //присваиваем секунды
}
void testmatch(){
bool flag=0;
  if((day<1)||(day>5)||(second!=0)) return;
  flag|=(hour==8&&minute==30);
  flag|=(hour==9&&minute==15);
  flag|=(hour==9&&minute==25);
  flag|=(hour==10&&minute==10);
  flag|=(hour==10&&minute==25);
  flag|=(hour==11&&minute==10);
  flag|=(hour==12&&minute==15);
  flag|=(hour==12&&minute==30);
  flag|=(hour==13&&minute==15);
  flag|=(hour==13&&minute==25);
  flag|=(hour==14&&minute==10);
  flag|=(hour==14&&minute==20);
  flag|=(hour==15&&minute==05);
  flag|=(hour==15&&minute==25);
  flag|=(hour==16&&minute==10);
  flag|=(hour==16&&minute==30);
  flag|=(hour==17&&minute==15);
  flag|=(hour==17&&minute==25);
  flag|=(hour==18&&minute==10);
  flag|=(hour==18&&minute==20);
  flag|=(hour==19&&minute==05);
  if(!flag) return;
  digitalWrite(Rele, LOW);
  delay(5000);
  digitalWrite(Rele, HIGH);
}

Как справится с проблемой? Буду очень благодарен помощи!
  • Вопрос задан
  • 1382 просмотра
Пригласить эксперта
Ответы на вопрос 2
gbg
@gbg Куратор тега Arduino
Любые ответы на любые вопросы
Пробелы вокруг && поставьте.

Этот код отвратителен. Переведите время в минуты и посчитайте остаток от деления. Будет короче и понятнее.

У вас day, minute, hour - локальные переменные функции loop. Делайте их глобальными, а лучше - исправляйте архитектуру так, чтобы глобальные переменные использовались только для передачи данных в обработчики прерываний.
Ответ написан
@vanyamba-electronics
У вас переменные day, hour, minute, second объявлены внутри функции loop(). Поэтому внутри функции testmatch() они не видны, вот компилятор и ругается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы