Olá, boa noite
Estou desenvolvendo um sinal de intervalo para a escola onde estudo a pedido do diretor, estou utilizando o RTC para o controle de hora e acionamento das cargas, como o sinal vai tocar a cada 50 minutos e ficara o dia inteiro ligado fiz um vetor de array para as variareis de hora de acionamento, porem deu o seguinte erro; invalid operands of types 'int [15]' and 'int' to binary 'operator*'
Segue abaixo o código fonte:
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
const int sirene = 12;
int horaLiga[] = {7, 8, 8, 9, 10, 10, 11, 12, 13, 14, 14, 15, 16, 16, 17};
int minutoLiga[] = {10, 00, 50, 40, 00, 50, 40, 30, 10, 00, 50, 40, 00, 50, 40};
int segundoLiga[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00};
int horaDesliga[] = {7, 8, 8, 9, 10, 10, 11, 12, 13, 14, 14, 15, 16, 16, 17};
int minutoDesliga[] = {10, 00, 50, 40, 00, 50, 40, 30, 10, 00, 50, 40, 00, 50, 40};
int segundoDesliga[] = {05, 05, 05, 05, 05, 05, 05, 05, 05, 05, 05, 05, 05, 05, 05};
void setup(){
Serial.begin(57600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
pinMode(sirene,OUTPUT);
}
void loop (){
DateTime now = rtc.now();
alarme(now.hour(),now.minute());
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.print(zero(now.hour()));
Serial.print(':');
Serial.print(zero(now.minute()));
Serial.print(':');
Serial.print(zero(now.second()));
Serial.println();
delay(1000);
}
String zero(int digits){
String lead;
if (digits < 10){
lead ="0"+ String(digits);
}
else{
lead = String(digits);
}
return lead;
}
Outra aba chamada alarme
int alarme(int hora, int minuto){
int hAtual = {(hora*60)+minuto};
int hLiga = {(horaLiga*60)+minutoLiga};
int hDesliga = {(horaDesliga*60)+minutoDesliga};
if(hDesliga < hLiga){
if(hAtual >= hLiga){
digitalWrite(sirene,HIGH);
}
}
if (hAtual >= hDesliga && hAtual < hLiga){
digitalWrite(sirene,LOW);
}
if( hDesliga > hLiga) {
if( hAtual >= hLiga and hAtual =< hDesliga){
digitalWrite(sirene,LOW);}
}
if(hAtual >= hDesliga){
digitalWrite(sirene,LOW);}
}
}
agradeço desde já.
Tags:
Use DS3231 ! O Modulo DS1307 não é preciso.
http://labdegaragem.com/forum/topics/ajuda-rtc-ds1307
Isso tem que ser um comentario !
// Outra aba chamada alarme
José Gustavo agradeço a dica do DS3231, porém meu problema é na programação com este erro: invalid operands of types 'int [15]' and 'int' to binary 'operator*'.
peguei referencia do código no seguinte link: https://www.youtube.com/watch?v=ukWcX-2OhG0
Oi HOS, boa noite.
O problema que ocorre com seu projeto é o seguinte,
voce definiu :
int horaLiga[] , int minutoLiga[] , int segundoLiga[] , etc., como matriz,
mas na função alarme, usou como variavel
int hLiga = {(horaLiga*60)+minutoLiga};
int hDesliga = {(horaDesliga*60)+minutoDesliga};
Vai mesmo dar erro durante a compilação.
Rui
e também há erros de sintaxe. Veja um que bati os olhos e logo vi:
if( hAtual >= hLiga and hAtual =< hDesliga){
a conjunção dentro da condicional é dada por && e não AND
E a comparação deveria ser >= e não =>
Importante dar especial atenção ao seu RTC, sobre o qual o Murta observou. Se vc usa o 1307 vc terá problemas de imprecisão nas horas. Se hoje o seu problema é só o código, amanhã seu problema será um alarme que tocará fora do horário correto. Já vá atrás de adquirir o RTC 3231 e jogue o 1307 no lixo. Quanto à biblioteca para trabalhar com o RTC 3231, pode usar a biblioteca do RTC 1307 mesmo
obrigado pela ajuda,vou utilizar o DS3231.
Olá Hugo!
O Rui tem razão.
Existem erros de lógica e de sintaxe no seu sketch.
Por exemplo, a variável horaLiga foi definida como um array de 15 posições. Dessa forma, você precisa indicar um índice para referenciá-la, como, por exemplo, horaLiga[0] ou horaLIga[x].
Na expressão horaLiga*60 está faltando o índice do array
Além disso, existem erros de matemática. Porque motivo você precisa multiplicar a hora por 60.
Se a hora for 10, vai resultar em 600 horas. Qual é a utilidade dessa fórmula?
Sugiro que estude os conceitos sobre uso de arrays.
Hugo, uma outra dica: Existem bibliotecas para serem usadas juntamente com o 1307 ou 3231 e que facilitam a criação de alarmes, sem necessidade de criar muito código para isso.
Veja o link abaixo e procure por timeAlarms
Obrigado pela ajuda Jose Augusto, você perguntou a utilidade da formula não sei dizer muito bem pois o código não é meu e sim de Mauricio Ortega.
Veja os links abaixo
https://www.youtube.com/watch?v=ukWcX-2OhG0
http://labdegaragem.com/forum/topics/me-ajudem-galeram-help?comment...
Imhugo, sim.
Mas o problema está na falta do índice do array que deixou a fórmula confusa. O erro de compilação está na expressão horaLiga*60
Pois horaLIga é um vetor de 15. O compilador avisa: você está tratando um int[15] como um int.
Além disso, seria necessário realizar um loop para testar todas as 15 possibilidades.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por