Boa tarde pessoal , estou com pequeno problema na programação . Eu configurei o rtc certinho , mas eu preciso manipula-lo pois gostaria de transformar o arduino em um despertador , mas eu nao estou sabendo de que forma usar o codigo . atualmente meu codigo esta assim:
//Carrega a biblioteca do RTC DS1307
#include <LiquidCrystal.h>
#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68
//Modulo RTC DS1307 ligado as portas A4 e A5 do Arduino
// Inicializa a biblioteca com os números dos pinos de interface
LiquidCrystal lcd (12, 11, 5, 4, 3, 2); // Cria um objeto lcd e atribui os pinos
// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/1016) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/1610) + (val%16) );
}
void setup()
{
Wire.begin();
Serial.begin(9600);
// set the initial time here:
//DS3231 seconds, minutes, hours, day, date, month, year
setDS3231time(00,13,14,1,21,11,16);
}
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(0)); // set seconds
Wire.write(decToBcd(14)); // set minutes
Wire.write(decToBcd(14)); // set hours
Wire.write(decToBcd(2)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(21)); // set date (1 to 31)
Wire.write(decToBcd(11)); // set month
Wire.write(decToBcd(16)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(
byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void displayTime()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
// send it to the serial monitor
lcd.print(hour, DEC);
// convert the byte variable to a decimal number when displayed
lcd.print(":");
if (minute<10)
{
lcd.print("0");
}
lcd.print(minute, DEC);
lcd.print(":");
if (second<10)
{
lcd.print("0");
}
lcd.print(second, DEC);
lcd.print(" ");
lcd.print(dayOfMonth, DEC);
lcd.print("/");
lcd.print(month, DEC);
lcd.print("/");
lcd.print(year, DEC);
lcd.print(" Dia ");
switch(dayOfWeek){
case 1:
lcd.println("Dom");
break;
case 2:
lcd.println("Seg");
break;
case 3:
lcd.println("Ter");
break;
case 4:
lcd.println("Qua");
break;
case 5:
lcd.println("Qui");
break;
case 6:
lcd.println("Sex");
break;
case 7:
lcd.println("Sab");
break;
}
}
void loop()
{
displayTime(); // display the real-time clock data on the Serial Monitor,
delay(1000); // every second
}
byte botao;
byte botaoConfirma=0;
byte botaoMais=0;
byte botaoMenos=0;
byte sensorFDC=0;
int dia =1;
int hora = 0;
int minuto = 0;
//void setup()
//lcd.begin(16, 2); // Define o display com 16 colunas e 2 linhas
// pinMode(13,OUTPUT);
// pinMode(1,INPUT); // sensorFDC
// pinMode(6,INPUT); // botao
// pinMode(7,INPUT); // RTC
//pinMode(10,INPUT); // RTC
// pinMode(8,INPUT); // botaoMais
// pinMode(9,INPUT); // botaoMenos
// pinMode(0,INPUT); // buzzer
//}
void logoProjeto()
{
lcd.clear(); // Limpa o display
lcd.print("Nao esqueca"); // Imprime algum texto
lcd.setCursor(16,2);
lcd.print("De levar");
}
//void loop(){
// inicioPrograma();
//}
void inicioPrograma(){
botao = digitalRead(6);
if (botao == 1)
tarefaCotidiana;
else{
sensorFDC = digitalRead(1);
if (sensorFDC == 1)
tarefaObjeto;
}
}
void tarefaCotidiana(){
lcdCotidiano();
// piscaLcd();
lcd.clear();
}
void tarefaObjeto(){
lcdObjeto();
}
void lcdCotidiano(){
lcd.clear(); // Limpa o display
lcd.print("Buscar Filho"); // Imprime algum texto
lcd.setCursor(16,2);
lcd.print("Defina o horario");
delay(2000);
lcdDia();
lcdHora();
lcdMinuto();
// *dayOfWeek = bcdToDec(Wire.read());
// *hour = bcdToDec(Wire.read() & 0x3f);
// *minute = bcdToDec(Wire.read());
// while (dia != *dayOfWeek && hora != *hour && minuto != *minute)
{}
digitalWrite(0, HIGH);
while (botao != 1){
botao = digitalRead(6);
}
digitalWrite(0, LOW);
}
void lcdObjeto(){
lcd.clear(); // Limpa o display
lcd.print("Objeto colocado"); // Imprime algum texto
lcd.setCursor(0,1);
lcd.print("Definir horario?");
delay(2000);
for (int x =0; x<=10; x++){
delay(1000);
// piscaLcd();
}
botao = digitalRead(6);
if(botao == 1){
lcdDia();
lcdHora();
// AlarmeProg();
}
else{
// AlarmeNProg();
}
}
void lcdDia(){
lcd.print("Informe o dia");
lcd.setCursor(0,1);
lcd.cursor();
while(botaoConfirma == 0){
while(botaoMais == 0 || botaoMenos == 0){
botaoMenos = digitalRead(9);
botaoMais = digitalRead(8);
}
if (botaoMenos == 1)
{
if(dia > 1)
dia = dia -1;
else
dia = 1;
}
else if(botaoMais == 1){
if(dia < 30)
dia = dia +1;
else
dia = 31;
}
if (dia < 10){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe o dia");
lcd.setCursor(0,1);
lcd.print("0");
lcd.setCursor(1,1);
lcd.print(dia);
lcd.cursor();
}
else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe o dia");
lcd.setCursor(0,1);
lcd.print(dia);
lcd.cursor();
}
}
}
void lcdHora(){
lcd.print("Informe a hora");
lcd.setCursor(0,1);
lcd.cursor();
while(botaoConfirma == 0){
while(botaoMais == 0 || botaoMenos == 0){
botaoMenos = digitalRead(9);
botaoMais = digitalRead(8);
}
if (botaoMenos == 1)
{
if(hora > 0)
hora = hora -1;
else
hora = 0;
}
else if(botaoMais == 1){
if(hora < 23)
hora = hora +1;
else
hora = 0;
}
if (hora < 10){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe a hora");
lcd.setCursor(0,1);
lcd.print("0");
lcd.setCursor(1,1);
lcd.print(hora);
lcd.cursor();
}
else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe a hora");
lcd.setCursor(0,1);
lcd.print(hora);
lcd.cursor();
}
}
}
void lcdMinuto(){
lcd.print("Informe o minuto");
lcd.setCursor(0,1);
lcd.cursor();
while(botaoConfirma == 0){
while(botaoMais == 0 || botaoMenos == 0){
botaoMenos = digitalRead(9);
botaoMais = digitalRead(8);
}
if (botaoMenos == 1)
{
if(minuto > 0)
minuto = minuto -1;
else
minuto = 0;
}
else if(botaoMais == 1){
if(minuto < 60)
minuto = minuto +1;
else
minuto = 0;
}
if (minuto < 10){
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe o minuto");
lcd.setCursor(0,1);
lcd.print("0");
lcd.setCursor(1,1);
lcd.print(minuto);
lcd.cursor();
}
else{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Informe o minuto");
lcd.setCursor(0,1);
lcd.print(minuto);
lcd.cursor();
}
}
}
//void AlarmeProg{
//}
//void AlarmeNProg{
//}
void piscaLcd(){
lcd.noDisplay();
delay(1000);
lcd.display();
delay(1000);
}
Eu nao entendo muito de programação , estou aprendendo ainda , mas o que preciso fazer é manipular o horario para que eu possa programar/agendar um tal horario para ativar o buzzer.Mas nao sei qual codigo usar.
Espero que tenham entendido,estou perdido.