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: Ajuda paraLigar e desligar rele com rtc  (Lida 13145 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline be_water

  • Mini Robot
  • *
  • Mensagens: 3
Ajuda paraLigar e desligar rele com rtc
« em: 18 de Agosto de 2014, 20:27 »
Boas

Tenho arduino uno
RTC DS3231 Ligado (pino A4 e A5)
LCD 16x2
3 botoes para acertar as horas
tenho  tentado ligar os reles atraves do RTC com Dias horas e minuto (por exp 2ª e 4ª ligar as 18H00 e desligar as 00H30)
e 3ª e 5ª ligar as 16H00 e desligar as 23H00 mas não consigo.è verdade que sou um leigo e programação mas tenho tentado aproveitar outros codigos e não me safo.
Gostaria que alguem me podesse ajudar.
os codigos que tenho a funcionar para já são estes
muito obrigado


Código: [Seleccione]
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include <Wire.h>
#include <Time.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <DS1307RTC.h>

#define ONE_WIRE_BUS 10
#define RELAY13 //pino do rele
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xDF, 0x63, 0x51, 0x05, 0x00, 0x00, 0xC3 };

// Pinos de comando dos botões do relógio
#define clockSet A0
#define clockUp 9
#define clockDown 8
 
//Estados de Clock
#define stClockRunning 0
#define stSetDay 1
#define stSetMonth 2
#define stSetYear 3
#define stSetHour 4
#define stSetMinute 5
#define stSetSecond 6
int pinorelay13 = 13;
int stat = stClockRunning;
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd
 
void Print(int number)
{
 lcd.print(number/10);
 lcd.print(number%10);
}
 
// Preenchimento do display LCD
void printTime()
{
 lcd.setCursor(2,1); Print(hour());
 lcd.print(":"); Print(minute());
 lcd.print(":"); Print(second());
 lcd.setCursor(3,0); Print(day());
 lcd.print("/"); Print(month());
 lcd.print("/"); Print(year());
 lcd.setCursor(0,0);
 lcd.noCursor(); // Cursor invisível
 lcd.noBlink(); // Efeito blink desligado
 
 if (stat != stClockRunning)
 lcd.print("*");
 else
 lcd.print(" ");
 simbolorelogio();
 lcd.setCursor(0,1);
 lcd.write(3);
 
 switch(stat)
 {
 case stSetDay:
 lcd.setCursor(1,0);
 lcd.print("d ");
 lcd.setCursor(4,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMonth:
 lcd.setCursor(1,0);
 lcd.print("m ");
 lcd.setCursor(7,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetYear:
 lcd.setCursor(1,0);
 lcd.print("a ");
 lcd.setCursor(12,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetHour:
 lcd.setCursor(1,0);
 lcd.print("h ");
 lcd.setCursor(3,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMinute:
 lcd.setCursor(1,0);
 lcd.print("M ");
 lcd.setCursor(6,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetSecond:
 lcd.setCursor(1,0);
 lcd.print("s ");
 lcd.setCursor(9,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 }
}
 
// Lê pino usando limiar, como um interruptor, isto é,
// interruptor pressionado primeira vez liga, pela segunda vez desliga
int readPinSwitch(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while (digitalRead(pin));
 if ((millis() - tt) > threshold)
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
//Lê pino usando limiar
int readPin(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while ((digitalRead(pin) && (millis() - tt) <= threshold));
 if (digitalRead(pin))
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
// obter novo status, se houver
int getStat()
{
 if (readPinSwitch(clockSet,300))
 if (stat == stSetSecond)
 return stClockRunning;
 else
 return stat+1;
 else
 return stat;
}
 
// definir Arduino e tempo do RTC
void setRTCTime(int hour, int minute, int second, int day, int month, int year)
{
// define tempo do Arduino
 setTime(hour,minute,second,day,month,year);
 time_t t = now();
// define tempo do RTC
 RTC.set(t);
}
 
void simbolorelogio()
{
 byte relogio[8] = {
 B00000,
 B01110,
 B10101,
 B10111,
 B10001,
 B01110,
 B00000,
 B00000};
 lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
}


else
{
lcd.setCursor(11,1); 
lcd.print(tempC);
lcd.print("");

}
}
 
void setup()
{
 pinMode(pinorelay13, OUTPUT); //Define o pino como saida
sensors.begin();
sensors.setResolution(insideThermometer, 10);
// Start the I2C interface
Wire.begin();
       
// Start the serial interface
Serial.begin(9600);
lcd.begin(16, 2);     
lcd.clear(); // start with a blank screen



 pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada
 pinMode(clockDown,INPUT);
 pinMode(clockSet,INPUT);
 
 lcd.begin(16, 2); // Seta o display para 16 colunas and 2 linhas
 setSyncProvider(RTC.get); // função para obter o tempo do RTC
 if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro
 {
 lcd.setCursor(0,0);
 lcd.print("Erro do RTC:");
 lcd.setCursor(0,1);
 lcd.print("Ajuste o Relogio");
 delay(3000);
 lcd.clear();
 }
}
 
int oldStat = stat;
unsigned long t=millis();
 
void loop()
{
  //Aciona o rele
  digitalWrite(pinorelay13, HIGH);
  delay(50); //Aguarda 2 Horas
  //Desliga o rele
  digitalWrite(pinorelay13, LOW);
  delay(50); //Aguarda 5 segundos e reinicia o processo
  sensors.requestTemperatures();

printTemperature(insideThermometer);
lcd.setCursor(17,1);
delay(04/33/20); //
  //Desliga o rele

  delay(04/36/20); //Aguarda 5 segundos   
 
 int value = 0;
 printTime(); // rotina que imprime o tempo no lcd
 delay(100);
 stat=getStat();
 if (stat != oldStat)
 {
 t=millis();
 oldStat = stat;
 }
 else
 if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em milisegundos que o ajuste do relógio ficará disponível para ser alterado
 stat=stClockRunning;
 switch(stat)
 {
 case stClockRunning:
 break;
 case stSetDay:
 // inicializa value
 value=day();
 //si botao UP (para cima) for pressionado
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 31)
 value=1;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 //si botao DOWN (para baixo) for pressionado
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=31;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 break;
// ver comentários em stSetDay
 case stSetMonth:
 value=month();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 12)
 value=1;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=12;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 break;
 case stSetYear:
 value=year();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 2050)
 value=2000;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 2000)
 value=2050;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 break;
 case stSetHour:
 value=hour();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 23)
 value=0;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=24;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetMinute:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetSecond:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 }
 }

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #1 em: 19 de Agosto de 2014, 06:17 »
Ora bons dias, se faz favor podias usar a opção de introduzir codigo do editor de texto? torna mais facil ler tudo.

O que nao funciona? No LCD tao as horas bem?
Tens a certeza que os reles sao de 5V DC na bobine?
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline be_water

  • Mini Robot
  • *
  • Mensagens: 3
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #2 em: 19 de Agosto de 2014, 10:35 »
Bom dia
pesso desculpa mas como sou novo no forum não estou habituado a postar, já agora como se faz para opção de introduzir codigo do editor de texto?
Quanto ao funcionamento das horas e temperatura no lcd está tudo bem e os reles são de 5V eles com a função de acender e apagar sem ser programado pelo RTC funciona o que eu pretendo é conseguir acender e apagar as horas desejadas em dias alternados por exp2ª Feira acender as 14h00 2 apagar 00H30
3ª feira acender as 18H00 e apagar as 23h00.
Os reles são estes
5V Activo Tablero del Módulo 8 Canales de Relé para Arduino PIC AVR MCU ARM DSP
http://www.ebay.es/itm/111287099235?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1423.l2649
Muito obrigado pela atenção.

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.224
    • Clube de Robotica
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #3 em: 19 de Agosto de 2014, 13:34 »
não há problema  ;D quando estas a escrever ha em cima /\ estes icons todos. há um que é um #, é esse.

ja experimentas-te simplesmente meter um pin digital a piscar e ligar ao rele a ver se funciona? prefiro ver o hardware antes de ver programaçao :p

tens algo assim:
 delay(50); //Aguarda 2 Horas

Isto nao está certo. O delay recebe valores em milisegundos, logo esta a fazer um delay de so 50 milisegundos.
« Última modificação: 19 de Agosto de 2014, 13:44 por LuísR.A. »
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline be_water

  • Mini Robot
  • *
  • Mensagens: 3
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #4 em: 19 de Agosto de 2014, 22:01 »
Boas o delay(50); //Aguarda 2 Horas não estava assim eu é que coloquei para experimentar e com os ledes a piscar consuante se modifica o delay, antes tinha assim
delay(5000); //Aguarda 5 segundos
  //Desliga o rele
  digitalWrite(sinalparaorele, LOW);
  delay(5000); //Aguarda 5 segundos e reinicia o processo
}
o que eu estou a tentar fazer é aproveitar esta biblioteca


Código: [Seleccione]
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
#include <Wire.h>
#include <Time.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <DS1307RTC.h>

#define ONE_WIRE_BUS 10
#define RELAY13 //pino do rele
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer = { 0x28, 0xDF, 0x63, 0x51, 0x05, 0x00, 0x00, 0xC3 };

// Pinos de comando dos botões do relógio
#define clockSet A0
#define clockUp 9
#define clockDown 8
 
//Estados de Clock
#define stClockRunning 0
#define stSetDay 1
#define stSetMonth 2
#define stSetYear 3
#define stSetHour 4
#define stSetMinute 5
#define stSetSecond 6
int pinorelay13 = 13;
int stat = stClockRunning;
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //configuração dos pinos do lcd
 
void Print(int number)
{
 lcd.print(number/10);
 lcd.print(number%10);
}
 
// Preenchimento do display LCD
void printTime()
{
 lcd.setCursor(2,1); Print(hour());
 lcd.print(":"); Print(minute());
 lcd.print(":"); Print(second());
 lcd.setCursor(3,0); Print(day());
 lcd.print("/"); Print(month());
 lcd.print("/"); Print(year());
 lcd.setCursor(0,0);
 lcd.noCursor(); // Cursor invisível
 lcd.noBlink(); // Efeito blink desligado
 
 if (stat != stClockRunning)
 lcd.print("*");
 else
 lcd.print(" ");
 simbolorelogio();
 lcd.setCursor(0,1);
 lcd.write(3);
 
 switch(stat)
 {
 case stSetDay:
 lcd.setCursor(1,0);
 lcd.print("d ");
 lcd.setCursor(4,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMonth:
 lcd.setCursor(1,0);
 lcd.print("m ");
 lcd.setCursor(7,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetYear:
 lcd.setCursor(1,0);
 lcd.print("a ");
 lcd.setCursor(12,0);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetHour:
 lcd.setCursor(1,0);
 lcd.print("h ");
 lcd.setCursor(3,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetMinute:
 lcd.setCursor(1,0);
 lcd.print("M ");
 lcd.setCursor(6,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 case stSetSecond:
 lcd.setCursor(1,0);
 lcd.print("s ");
 lcd.setCursor(9,1);
 lcd.cursor(); // Cursor visível
 lcd.blink(); // Cursor piscando
 break;
 }
}
 
// Lê pino usando limiar, como um interruptor, isto é,
// interruptor pressionado primeira vez liga, pela segunda vez desliga
int readPinSwitch(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while (digitalRead(pin));
 if ((millis() - tt) > threshold)
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
//Lê pino usando limiar
int readPin(int pin, int threshold)
{
 if (digitalRead(pin))
 {
 unsigned long tt = millis();
 while ((digitalRead(pin) && (millis() - tt) <= threshold));
 if (digitalRead(pin))
 return 1;
 else
 return 0;
 }
 else
 return 0;
}
 
// obter novo status, se houver
int getStat()
{
 if (readPinSwitch(clockSet,300))
 if (stat == stSetSecond)
 return stClockRunning;
 else
 return stat+1;
 else
 return stat;
}
 
// definir Arduino e tempo do RTC
void setRTCTime(int hour, int minute, int second, int day, int month, int year)
{
// define tempo do Arduino
 setTime(hour,minute,second,day,month,year);
 time_t t = now();
// define tempo do RTC
 RTC.set(t);
}
 
void simbolorelogio()
{
 byte relogio[8] = {
 B00000,
 B01110,
 B10101,
 B10111,
 B10001,
 B01110,
 B00000,
 B00000};
 lcd.createChar(3, relogio); // Cria o caractere personalizado de um relogio
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
}


else
{
lcd.setCursor(11,1); 
lcd.print(tempC);
lcd.print("");

}
}
 
void setup()
{
 pinMode(pinorelay13, OUTPUT); //Define o pino como saida
sensors.begin();
sensors.setResolution(insideThermometer, 10);
// Start the I2C interface
Wire.begin();
       
// Start the serial interface
Serial.begin(9600);
lcd.begin(16, 2);     
lcd.clear(); // start with a blank screen



 pinMode(clockUp,INPUT); // configura os pinos dos botões como entrada
 pinMode(clockDown,INPUT);
 pinMode(clockSet,INPUT);
 
 lcd.begin(16, 2); // Seta o display para 16 colunas and 2 linhas
 setSyncProvider(RTC.get); // função para obter o tempo do RTC
 if(timeStatus()!= timeSet) // verifica status do RTC e retorna erro
 {
 lcd.setCursor(0,0);
 lcd.print("Erro do RTC:");
 lcd.setCursor(0,1);
 lcd.print("Ajuste o Relogio");
 delay(3000);
 lcd.clear();
 }
}
 
int oldStat = stat;
unsigned long t=millis();
 
void loop()
{
  //Aciona o rele
  digitalWrite(pinorelay13, HIGH);
  delay(50); //Aguarda 2 Horas
  //Desliga o rele
  digitalWrite(pinorelay13, LOW);
  delay(50); //Aguarda 5 segundos e reinicia o processo
  sensors.requestTemperatures();

printTemperature(insideThermometer);
lcd.setCursor(17,1);
delay(04/33/20); //
  //Desliga o rele

  delay(04/36/20); //Aguarda 5 segundos   
 
 int value = 0;
 printTime(); // rotina que imprime o tempo no lcd
 delay(100);
 stat=getStat();
 if (stat != oldStat)
 {
 t=millis();
 oldStat = stat;
 }
 else
 if ((stat != stClockRunning) && ((millis() - t) > 30000)) //tempo em milisegundos que o ajuste do relógio ficará disponível para ser alterado
 stat=stClockRunning;
 switch(stat)
 {
 case stClockRunning:
 break;
 case stSetDay:
 // inicializa value
 value=day();
 //si botao UP (para cima) for pressionado
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 31)
 value=1;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 //si botao DOWN (para baixo) for pressionado
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=31;
 setRTCTime(hour(),minute(),second(),value,month(),year());
 printTime();
 }
 break;
// ver comentários em stSetDay
 case stSetMonth:
 value=month();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 12)
 value=1;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=12;
 setRTCTime(hour(),minute(),second(),day(),value,year());
 printTime();
 }
 break;
 case stSetYear:
 value=year();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 2050)
 value=2000;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 2000)
 value=2050;
 setRTCTime(hour(),minute(),second(),day(),month(),value);
 printTime();
 }
 break;
 case stSetHour:
 value=hour();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 23)
 value=0;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 1)
 value=24;
 setRTCTime(value,minute(),second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetMinute:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),value,second(),day(),month(),year());
 printTime();
 }
 break;
 case stSetSecond:
 value=minute();
 while(readPin(clockUp,200))
 {
 value++;
 if (value > 59)
 value=0;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 while(readPin(clockDown,200))
 {
 value--;
 if (value < 0)
 value=59;
 setRTCTime(hour(),minute(),value,day(),month(),year());
 printTime();
 }
 }
 }

e juntar com esta para poder ligar os reles as horas que eu pretendo como neste codigo seguinte
Código: [Seleccione]
#include <WProgram.h> //é um recurso para referenciar a biblioteca Wiring
#include <Wire.h> //inclui a biblioteca Wire necessaria para comunicaçao i2c
#include <DS1307.h> //inclui a biblioteca de comandos do DS1307 utilizada neste programa. Necessário baixá-la no link acima
#include <RTC.h>
int rtc[7];
int rele = 7;
int led = 13;

void setup()
{
Serial.begin(9600);
pinMode(rele, OUTPUT); //define o pino 10 como saída
pinMode(led, OUTPUT); //define o led (pino 13) do arduino como como saída
digitalWrite (rele, LOW); //desliga relé
digitalWrite(led, LOW); //desliga led

/*
Esta sequencia de comandos deve ser escrita apenas uma vez, para
configurar a hora do Shield RTC 1307. Troque os numeros pela hora atual

RTC.stop();
RTC.set(DS1307_SEC,30);        //define o segundo
RTC.set(DS1307_MIN,50);     //define o minuto
RTC.set(DS1307_HR,23);       //define a hora
RTC.set(DS1307_DOW,3);       //define o dia da semana
RTC.set(DS1307_DATE,19);       //define o dia
RTC.set(DS1307_MTH,8);        //define o mes
RTC.set(DS1307_YR,14);         //define o ano
RTC.start();
*/
}

void loop()
{
RTC.get(rtc,true);

/*
Comando utilizado apenas pra ficar enviando via USB a hora atual
para que possam monitorar no "serial monitor" do simulador Arduino
e ver se esta tudo funcionando de acordo
*/

for(int i=0; i<7; i++)
{
    Serial.print(rtc[i]); // print os vários valores
    Serial.print(" ");
}

// ligar às 22:22:22
if (rtc[2] == 11 && rtc[1] == 50 && rtc[0] == 00) {
digitalWrite(rele, HIGH);
digitalWrite(led, HIGH);
}
// desligar às 11:11:11
if (rtc[2] == 11 && rtc[1] == 52 && rtc[0] == 00) {
digitalWrite(rele, LOW);
digitalWrite(led, LOW);
}

Serial.println();

/*
O codigo abaixo significa que, quando o RTC estiver no segundo 22,
ele irá acionar o relé e o led. Para utilizar o minuto como referencia,
alterar rtc[0] para rtc[1], e assim sussecivamente
*/

if (rtc[2] == 11 && rtc[1] == 11 && rtc[0] == 11) {
digitalWrite(rele, HIGH);
digitalWrite(led, HIGH);
}
delay(1000);

}

E muito obrigado pela tua disponibilidade

Offline argel

  • Mini Robot
  • *
  • Mensagens: 6
AJUDA COM RTC 1307
« Responder #5 em: 26 de Março de 2015, 18:10 »
Olá a todos.

Estou tentando fazer um simulador de presença com um arduino uno e um rtc, até aqui tranquilo,meu problema está no código que quando vou compilar da erro. 'RTC' was not declared in this scope
Já tentei o seguinte: INSTALAR DE NOVO AS BIBLIOTECAS USADAS NO CÓDIGO
                            MUDEI A VERSÃO DA IDE FUI DE 1.0.0 ATÉ 1.6.1

Segue o código:

#include <WProgram.h> //é um recurso para referenciar a biblioteca Wiring
#include <Wire.h> //inclui a biblioteca Wire necessaria para comunicaçao i2c
#include <DS1307.h> //inclui a biblioteca de comandos do DS1307 utilizada neste programa. Necessário baixá-la no link acima
int rtc[6];
int alarme1 = 7;
int alarme2 = 8;
int quarto = 9;
int banheiro = 10;
int radio = 11;
int sirene = 12;
int sensor1 = 0; //variavel para gravar o nivel de sinal do sensor
int sensor2 = 0; //variavel para gravar o nivel de sinal do sensor
int SSalarme = 60; //variavel para guardar o segundo atual que o sensor detectou movimento
void setup()
{
Serial.begin(9600);
pinMode(alarme1, INPUT);
pinMode(alarme2, INPUT);
for (int pino = 9; pino <= 13; pino++) { // configura pinos 10 ao 13 como saída
pinMode(pino, OUTPUT);
digitalWrite(pino, LOW); // desliga pinos 10 ao 13
}
/* Esta sequencia de comandos deve ser escrita apenas uma vez, para
configurar a hora do Shield RTC 1307. Troque os numeros pela hora atual
RTC.stop();
RTC.set(DS1307_SEC,10); //define o segundo rtc[0]
RTC.set(DS1307_MIN,12); //define o minuto rtc[1]
RTC.set(DS1307_HR,0); //define a hora rtc[2]
RTC.set(DS1307_DOW,1); //define o dia da semana rtc[3]
RTC.set(DS1307_DATE,2); //define o dia rtc[4]
RTC.set(DS1307_MTH,5); //define o mes rtc[5]
RTC.set(DS1307_YR,13); //define o ano rtc[6]
RTC.start();
*/
RTC.get(rtc,true);
delay(60000); //espera 60segundos para os sensores se estabilizarem e a pessoa trancar a casa.
}
void MudaDispositivo(byte dispositivo, byte estado, byte hora, byte minuto, byte segundo, int* rtc) {
if ( rtc[2] == hora && rtc[1] == minuto && rtc[0] == segundo )
digitalWrite(dispositivo, estado);
}
void loop()
{
//ALARME - Os sensores ficam sempre HIGH. Quando ele detecta movimento, cortam o sinal (LOW)
sensor1 = digitalRead(alarme1);
sensor2 = digitalRead(alarme2);
if (sensor1 == LOW || sensor2 == LOW){
digitalWrite(sirene, HIGH);
SSalarme = rtc[0];
--SSalarme;
}
if (SSalarme == rtc[0]){
digitalWrite(sirene, LOW);
SSalarme = 60; //coloca um valor que nao existe no ssalarme pra nao ficar desligando a sirene em vão no proximo loop.
}
if (SSalarme == -1){ //garantir que nunca vai ficar com segundo -1, oque deixaria a sirene ligada enternamente
SSalarme = 59;
}
RTC.get(rtc,true);
//Simula presença durante o dia
MudaDispositivo(radio, HIGH, 9, 40, 10, rtc);
MudaDispositivo(radio, LOW, 10, 20, 10, rtc);
MudaDispositivo(radio, HIGH, 14, 45, 10, rtc);
MudaDispositivo(radio, LOW, 15, 20, 10, rtc);
MudaDispositivo(radio, HIGH, 16, 30, 10, rtc);
MudaDispositivo(radio, LOW, 16, 55, 10, rtc);
//Simula presença de noite
MudaDispositivo(banheiro, HIGH, 18, 40, 10, rtc);
MudaDispositivo(banheiro, LOW, 18, 43, 10, rtc);
MudaDispositivo(quarto, HIGH, 18, 43, 20, rtc);
MudaDispositivo(radio, HIGH, 18, 55, 10, rtc);
MudaDispositivo(quarto, LOW, 18, 58, 10, rtc);
MudaDispositivo(quarto, HIGH, 19, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 19, 40, 30, rtc);
MudaDispositivo(banheiro, LOW, 19, 41, 40, rtc);
MudaDispositivo(quarto, LOW, 19, 42, 10, rtc);
MudaDispositivo(radio, LOW, 20, 5, 10, rtc);
MudaDispositivo(quarto, HIGH, 20, 10, 10, rtc);
MudaDispositivo(quarto, LOW, 20, 10, 40, rtc);
MudaDispositivo(banheiro, HIGH, 20, 10, 50, rtc);
MudaDispositivo(banheiro, LOW, 20, 11, 20, rtc);
MudaDispositivo(quarto, HIGH, 20, 20, 50, rtc);
MudaDispositivo(quarto, LOW, 20, 21, 20, rtc);
MudaDispositivo(banheiro, HIGH, 20, 45, 40, rtc);
MudaDispositivo(banheiro, LOW, 20, 46, 10, rtc);
MudaDispositivo(quarto, HIGH, 21, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 21, 11, 10, rtc);
MudaDispositivo(banheiro, LOW, 21, 15, 10, rtc);
MudaDispositivo(radio, HIGH, 21, 15, 40, rtc);
MudaDispositivo(quarto, LOW, 21, 16, 10, rtc);
MudaDispositivo(quarto, HIGH, 22, 10, 10, rtc);
MudaDispositivo(quarto, LOW, 22, 10, 50, rtc);
MudaDispositivo(radio, LOW, 22, 16, 10, rtc);
//Simula colocar pijama e escovar os dentes
MudaDispositivo(quarto, HIGH, 22, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 22, 41, 10, rtc);
MudaDispositivo(banheiro, LOW, 22, 43, 10, rtc);
MudaDispositivo(quarto, LOW, 22, 43, 30, rtc);
MudaDispositivo(quarto, HIGH, 23, 40, 10, rtc);
MudaDispositivo(banheiro, HIGH, 23, 40, 30, rtc);
MudaDispositivo(banheiro, LOW, 23, 41, 20, rtc);
MudaDispositivo(quarto, LOW, 23, 41, 40, rtc);
//Simula presença de madrugada
MudaDispositivo(quarto, HIGH, 2, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 2, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 2, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 2, 11, 40, rtc);
MudaDispositivo(quarto, HIGH, 4, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 4, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 4, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 4, 11, 40, rtc);
MudaDispositivo(quarto, HIGH, 6, 10, 10, rtc);
MudaDispositivo(banheiro, HIGH, 6, 10, 30, rtc);
MudaDispositivo(banheiro, LOW, 6, 11, 20, rtc);
MudaDispositivo(quarto, LOW, 6, 11, 40, rtc);
/*
Comando utilizado apenas pra ficar enviando via USB a hora atual
para que possam monitorar no "serial monitor" do simulador Arduino
e ver se esta tudo funcionando de acordo

for(int i=0; i<=6; i++){
Serial.print(rtc);
Serial.print(" ");
}
Serial.println();
Serial.println(SSalarme);
delay(1000);
*/
}
                                 

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #6 em: 26 de Março de 2015, 18:16 »
Pois, ele tem razão no erro, nunca declaras/crias nenhuma variavel com o nome RTC..
Só vou dizer para ires ler..

https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview
Avr fanboy

Offline argel

  • Mini Robot
  • *
  • Mensagens: 6
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #7 em: 26 de Março de 2015, 18:27 »
Pois, ele tem razão no erro, nunca declaras/crias nenhuma variavel com o nome RTC..
Só vou dizer para ires ler..

https://learn.adafruit.com/ds1307-real-time-clock-breakout-board-kit/overview

Vou tentar ler já que é em inglês e não tenho muita intimidade com o mesmo.
Mas achei que a variavel já estava declarada em: int rtc[6];

Offline jm_araujo

  • Mini Robot
  • *
  • Mensagens: 2.947
  • NERD!
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #8 em: 26 de Março de 2015, 18:45 »
O C é case-sensitive.
RTC é definida na biblioteca DS1307. Usaste a versão errada ou instalaste a mesma mal.

Aproveita e lê sobre indentação de código. Como está é ilegível.

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.733
  • Helpdesk do sitio
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #9 em: 26 de Março de 2015, 18:49 »
Nunca fazes RTC.begin() nem wire.begin(), para começar.
Avr fanboy

Offline argel

  • Mini Robot
  • *
  • Mensagens: 6
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #10 em: 26 de Março de 2015, 19:01 »
O C é case-sensitive.
RTC é definida na biblioteca DS1307. Usaste a versão errada ou instalaste a mesma mal.

Aproveita e lê sobre indentação de código. Como está é ilegível.

Mas o código está certo ? como deveria ser ? .
Como faço para saber qual versão da bibliotéca devo usar
estou apenas a menos de um mes nesse mundo  do arduino e ainda não consegui fazer esse código: não vou desistir, mas se puderem me ajudar mais visualmente agradeço.
Quanto a  indentação de código vou pesquisar.

Offline Tiobel

  • Mini Robot
  • *
  • Mensagens: 27
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #11 em: 27 de Março de 2015, 08:23 »
Abres o ficheiro "DS1307.h" com um editor de texto por exemplo e vês o nome da class onde são definidas as funções que te estão a dar erro.

Depois tens de criar a class no código que meteste ai, tipo

"nome da classe do ficheiro .h" RTC;

E já deve dar.

Outra coisa a biblioteca que estás a usar não tem um exemplo? Existem centenas de outras bibliotecas para esse RTC vê os exemplos de como implementar.

Offline argel

  • Mini Robot
  • *
  • Mensagens: 6
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #12 em: 27 de Março de 2015, 11:01 »
Abres o ficheiro "DS1307.h" com um editor de texto por exemplo e vês o nome da class onde são definidas as funções que te estão a dar erro.

Depois tens de criar a class no código que meteste ai, tipo

"nome da classe do ficheiro .h" RTC;

E já deve dar.

Outra coisa a biblioteca que estás a usar não tem um exemplo? Existem centenas de outras bibliotecas para esse RTC vê os exemplos de como implementar.
Ok, vou tentar isso, depois volta a postar o resultado.
Obrigado

Offline Rui Santos

  • Mini Robot
  • *
  • Mensagens: 4
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #13 em: 30 de Março de 2015, 22:02 »
Boas não sou grande entendido na materia mas tenho um código funcional que podes adaptar. É um projecto que controla 8 reles  tipo temporizador.  Estou no telemóvel mas amanhã posso deixar te aqui o código. Pode ser que seja útil.

Offline argel

  • Mini Robot
  • *
  • Mensagens: 6
Re: Ajuda paraLigar e desligar rele com rtc
« Responder #14 em: 31 de Março de 2015, 12:36 »
Boas não sou grande entendido na materia mas tenho um código funcional que podes adaptar. É um projecto que controla 8 reles  tipo temporizador.  Estou no telemóvel mas amanhã posso deixar te aqui o código. Pode ser que seja útil.
Bom dia Rui, agradeço muito se puder me enviar o código para eu estuda-lo pois ainda não consegui por a funcionar meu RTC do jeito que gostaria.
FICA UM ABRAÇO.