collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: RTC com alarme.  (Lida 9568 vezes)

0 Membros e 2 Visitantes estão a ver este tópico.

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
RTC com alarme.
« em: 30 de Janeiro de 2013, 23:54 »
Boas noites depois de ter desistido de tentar fazer algo com o meu arduino aqui estou eu de volta.
Tenho arduino com RTC e Lcd, a mostrar data e hora.

O que eu queria fazer neste momento era:
Acender um led a "x" horas e desligar a "y" horas, tenho o seguinte codigo que não está a funcionar gostava que me ajudassem a ver o que estou a fazer mal.

Código: [Seleccione]
#include <LiquidCrystal.h>  // Inclui a biblioteca para LCD
#include <Wire.h>           // Biblioteca para RTC 
#include "RTClib.h"

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int LED = 8; // Criei a variavel LED com o pino 13

void setup()
{
  Serial.begin(9600);
  pinMode(LED,OUTPUT);  // Coloquei aqui para falar que o LED sera saida
  Wire.begin();
  RTC.begin();
  lcd.begin(20, 4);
  if (!RTC.isrunning())
  {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}


void loop()
{
  DateTime agora = RTC.now();
  String relogio_data = "DT: ";
  String relogio_hora = "HR: ";
 
  int dia = agora.day();
  int mes = agora.month();
  int ano = agora.year();
 
  relogio_data += ArrumaZero(dia);
  relogio_data += "/";
  relogio_data += ArrumaZero(mes);
  relogio_data += "/";
  relogio_data += ano;
 
  int hora = agora.hour();
  int minuto = agora.minute();
  int segundo = agora.second();
 
  // Aqui ficara o codigo que compara a hora e minuto
Serial.print (minuto) ;
  if ( hora == '23' && minuto == '34')
  {
   digitalWrite(LED,HIGH);
  }
  if ( hora == '00' && minuto == '36')
  {
   digitalWrite(LED,LOW);
  }


  relogio_hora += ArrumaZero(hora);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(minuto);
  relogio_hora += ":";
  relogio_hora += ArrumaZero(segundo);
 
  lcd.setCursor(0, 0);
  lcd.print(relogio_data);
  lcd.setCursor(0, 1);
  lcd.print(relogio_hora);
 
  delay(500);
}


String ArrumaZero(int i)
{
  String ret;
  if (i < 10) ret += "0";
  ret += i;
  return ret;
}


Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: RTC com alarme.
« Responder #1 em: 31 de Janeiro de 2013, 00:46 »
Strings comparam-se com "ab" e não 'ab', e usar strings para isso é um uso horrivel e desnecessário de ram.
Avr fanboy

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #2 em: 31 de Janeiro de 2013, 00:52 »
Este codigo não foi feito por mim, quem me dera...

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #3 em: 01 de Fevereiro de 2013, 21:31 »
Ninguem dá uma ajuda por aqui?

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: RTC com alarme.
« Responder #4 em: 01 de Fevereiro de 2013, 21:41 »
Strings comparam-se com "ab" e não com 'ab', e usar strings para isso é um uso horrivel e desnecessário de ram.
Avr fanboy

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #5 em: 03 de Fevereiro de 2013, 02:28 »
Pois para quem não percebe nada disto foi uma bela ajuda... ;D ;D ;D ;D

Tenho andado a ver se encontro um código mais simples para ver se consigo fazer algo mas ainda nada.
Os meus conhecimentos são zero nestas andanças sem ajuda para me iniciar não vou lá de certeza pois os meus estudos foram muito poucos, sei que posso ser chato mas não é por mal.

Gostava de poder fazer algo simples para começar a iniciar-me, mas estou prestes a desistir mais uma vez.

Gostave de pelo menos:
Data e hora - já tenho
Temperatura - já tenho
Falta só controlar os reles (leds) com as horas

Ninguem me arranja um pedaço de codigo para eu poder começar?

Desde já o meu obrigado
João Oliveira.

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: RTC com alarme.
« Responder #6 em: 03 de Fevereiro de 2013, 03:34 »
O que o senso estava a dizer era que estavas a comparar coisas diferentes, de uma forma errada.

Código: [Seleccione]
  int hora = agora.hour();
  int minuto = agora.minute();
  int segundo = agora.second();
 
  if ( hora == '23' && minuto == '34')
  {
   digitalWrite(LED,HIGH);
  }

Tens aqui uma grande salada de variáveis... :P
hora, minuto e segundo são int's, ou seja números inteiros
'23' é uma coisa que nem está correcta, quando muito seria "23" como o senso disse... Mas mesmo "23" seria uma string que tem o número 2, depois o numero 3, não representa o numero 23, que é o que tu queres fazer...
Para comparares um valor numérico escreves simplesmente
Código: [Seleccione]
if ( hora == 23 && minuto == 34)

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
Re: RTC com alarme.
« Responder #7 em: 03 de Fevereiro de 2013, 09:15 »
Pois para quem não percebe nada disto foi uma bela ajuda... ;D ;D ;D ;D

Tenho andado a ver se encontro um código mais simples para ver se consigo fazer algo mas ainda nada.
Os meus conhecimentos são zero nestas andanças sem ajuda para me iniciar não vou lá de certeza pois os meus estudos foram muito poucos, sei que posso ser chato mas não é por mal.

Gostava de poder fazer algo simples para começar a iniciar-me, mas estou prestes a desistir mais uma vez.

Gostave de pelo menos:
Data e hora - já tenho
Temperatura - já tenho
Falta só controlar os reles (leds) com as horas

Ninguem me arranja um pedaço de codigo para eu poder começar?

Desde já o meu obrigado
João Oliveira.

Aconselho-te a ganhar umas bases em C.
Existem muitos bons livros para tal, acredita que te poupa muitas dores de cabeça.

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #8 em: 03 de Fevereiro de 2013, 12:36 »
O meu grande obrigado pela ajuda.
Mais logo já experimento e digo alguma.
Realmente as minhas noções de Arduino e programação nem de perto nem de longe são as melhores posso ate dizer que nenhumas.
Em relação ao livro, o problema e que o meu inglês não e o melhor.
Aconselham algum livro em português, será que existe?

O meu grande obrigado.
João Oliveira

Offline vdr

  • Mini Robot
  • *
  • Mensagens: 78
Re: RTC com alarme.
« Responder #9 em: 03 de Fevereiro de 2013, 19:27 »
Na altura aprendi por este, Linguagem C - Luís Damas. Encontras usados por 15€

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #10 em: 03 de Fevereiro de 2013, 23:33 »
Citar
Aconselho-te a ganhar umas bases em C.
Existem muitos bons livros para tal, acredita que te poupa muitas dores de cabeça.

Citar
Na altura aprendi por este, Linguagem C - Luís Damas. Encontras usados por 15€

Em relação ao livro já estou a tratar de o encomendar, em prencipio já o arranjei usado.

Agora vamos ao que interessa:
Hoje depois da ajuda que me deram ganhei outra vontade e resolvi começar de novo e tentar eu mesmo aproveitando bocados de codigo que fui guardando ao longo das minhas pesquisas  ;D ;D ;D.

O codigo que tenho neste momento é:

Código: [Seleccione]
// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
 
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>  // Inclui a biblioteca para LCD

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int rele1 = 13;

void setup () {
    Serial.begin(57600);
    Wire.begin();
    RTC.begin();
    lcd.begin(20, 4);
 
  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(__DATE__, __TIME__));
  }
 
}
 
void loop () {
    DateTime agora = RTC.now();
   
    int dia = agora.day();
    int mes = agora.month();
    int ano = agora.year();
   
    lcd.setCursor(0,0);
    lcd.print("Data: ");
    lcd.print(agora.day(), DEC);
    lcd.print('/');
    lcd.print(agora.month(), DEC);
    lcd.print('/');
    lcd.print(agora.year(), DEC);
   
   lcd.print(' ');
 
   
    int hora = agora.hour();
    int minuto = agora.minute();
    int segundo = agora.second();
 
   
    lcd.setCursor(0,1);
    lcd.print("Hora: ");
   
    lcd.print(agora.hour(), DEC);
    lcd.print(':');
    lcd.print(agora.minute(), DEC);
    lcd.print(':');
    lcd.print(agora.second(), DEC);
    lcd.print("");
   
   
    if ( hora == 22 && minuto == 24)
  {
   digitalWrite(rele1,HIGH);
  }
  if ( hora == 22 && minuto == 25)
  {
   digitalWrite(rele1,LOW);
  }
  Serial.println();
    delay(1000);
   


   

}

Parece estar a funcionar á exceção de um promenor.
O que acontece?
Nos segundos, quando cchega a 59s, o 9 mantem-se ficando assim, 19,29,39,49,59,69,79,89 a seguir 10, 11 até 59 e depois retoma a mesma situação.
Não me parece que o relogio se atrase ou adinte mas não fica bem.
Já tentei descobrir o porquê disto acontecer mas não descobri o porquê, será que me podem ajudar?

Offline tarquinio

  • Mini Robot
  • *
  • Mensagens: 529
Re: RTC com alarme.
« Responder #11 em: 04 de Fevereiro de 2013, 01:33 »
Isso não tem a ver com o relógio, é um bug por causa de como escreves as coisas no LCD... :P
Qdo fazes os prints ele não apaga o que estava lá antes... Ele não está a escrever 19, 29, 39..., está a escrever 1, 2, 3..., só que o 9 dos 59 segundos nunca foi apagado.
Tens ou de apagar texto anterior antes de escreveres o novo, ou de colocar os zeros antes nos valores <10 (que era o que fazia a função ArrumaZero()).

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #12 em: 04 de Fevereiro de 2013, 01:45 »
Obrigado pela ajuda, tinha quase a certeza que se tratava disso.
Agora é que não estou a ver como fazer sem ser com a string tenho de ver melhor.

Isto é tudo novidade
lol

Offline pmj_pedro

  • Mini Robot
  • *
  • Mensagens: 328
Re: RTC com alarme.
« Responder #13 em: 04 de Fevereiro de 2013, 01:52 »
Obrigado pela ajuda, tinha quase a certeza que se tratava disso.
Agora é que não estou a ver como fazer sem ser com a string tenho de ver melhor.

Isto é tudo novidade
lol

Nao sei pk tens os dados em string, mas começas por ver a string como um array de char, que é o que acontece em C, verificas se o 1 char da um numero, depois convertes esse char para numero ( basta subtrair '0'), fazes isso para os restantes elementos da string e compares com o que queres

Offline jony-kid

  • Mini Robot
  • *
  • Mensagens: 54
Re: RTC com alarme.
« Responder #14 em: 04 de Fevereiro de 2013, 02:19 »
A string estava a usar anteriormente agora não.
Agora estou a estudar um novo codigo.