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

Exibições: 1387

Responder esta

Respostas a este tópico

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

http://playground.arduino.cc/Code/Time

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

A lógica usada pelo Mauricio Ortega é converter o horário que estiver no formato hh:mim para o formato de minutos somente, por isso é feita a multiplicação das horas por 60 e depois soma-se os minutos

Fazendo-se assim fica muito mais fácil usar o horário formatado durante as comparações dentro da condicional IF

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço