Olá galera Garaginos...

Estou desenvolvendo uma paradinha que gostaria de configurar via serial uma hora e minuto inicial e também uma hora e minuto final que o código ira executar uma atividade diferente.

Outras leituras de dados funcionaram sem problemas, mas esta da hora, ainda não consegui resolver.

Já testei vários tipos de dados, mas sem sucesso.

Vou postar partes dos códigos para verem se conseguem me ajudar.

#define DS1307_ADDRESS 0x68

byte zero = 0x00;

// ESTA PARTE DO CÓDIGO SE EU FAÇO A CONFIGURAÇÃO DA HORA E MUNITO NO CÓDIGO, FUNCIONA NORMALMENTE, MAS VIA SERIAL, ATÉ MOSTRA OS DADOS LIDOS, MAS NÃO FUNCIONA

int hora_inicial=00;
int minutos_inicial=00;
int total_min_inicial_conf = hora_inicial * 60 + minutos_inicial; // Calcula quantidade de minutos para INICIAR atividade

int hora_final=00;
int minutos_final=00;
int total_min_final_conf = hora_final * 60 + minutos_final; // Calcula quantidade de minutos para ENCERRAR atividade

//SelecionaDataeHora(); // VARIÁVEL PARA ACERTAR/SETAR DATA e HORA

//-----------------------------------------------------------------------------

void setup()
{

//CÓDIGO QUE ESTOU UTILIZANDO PARA FAZER A LEITURA DAS HORAS DIGITADAS

Serial.println("CONFIGURAÇÃO DO HORÁRIO");
Serial.println("INICIO");
Serial.println("1, 2, 3, 10, 15, 23, 00 <=> Valores em Horas");
Serial.print("Hora: ");
while (hora_inicial == 00)
{
if (Serial.available() > 0)
{
hora_inicial = Serial.parseFloat();
}
}
Serial.println (hora_inicial);

Serial.println("1, 2, 3, 10, 15, 30, 60 <=> Valores em Horas");
Serial.print("Minutos: ");
while (minutos_inicial == 00)
{
if (Serial.available() > 0)
{
minutos_inicial = Serial.parseFloat();
}
}
Serial.println (minutos_inicial);

Serial.println("TERMINO");
Serial.println("1, 2, 3, 10, 15, 23, 00 <=> Valores em Horas");
Serial.print("Hora: ");
while (hora_final == 00)
{
if (Serial.available() > 0)
{
hora_final = Serial.parseFloat();
}
}
Serial.println (hora_final);

Serial.println("1, 2, 3, 10, 15, 30, 60 <=> Valores em Horas");
Serial.print("Minutos: ");
while (minutos_final == 00)
{
if (Serial.available() > 0)
{
minutos_final = Serial.parseFloat();
}
}
Serial.println (minutos_final);

}

//---------------------------------------------------------------------------

void loop()
{
Mostrarelogio();
delay(1000);
}

void SelecionaDataeHora() //Seta a data e a hora do DS1307
{
byte horas = 15; //Valores de 0 a 23
byte minutos = 3; //Valores de 0 a 59
byte segundos = 00; //Valores de 0 a 59
byte diadasemana = 1; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 4; //Valores de 1 a 31
byte mes = 9; //Valores de 1 a 12
byte ano = 15; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados

//As linhas abaixo escrevem no CI os valores de data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero); //Start no CI
Wire.endTransmission();
}

byte ConverteParaBCD(byte val) { //Converte o número de decimal para BCD
return ( (val / 10 * 16) + (val % 10) );
}

byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
return ( (val / 16 * 10) + (val % 16) );
}

void Mostrarelogio()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor
Serial.print("Data: ");
Serial.print(diadomes);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.print(" ");
Serial.print(" Hora: "); 
Serial.print(horas);
Serial.print(":");
Serial.print(minutos);
Serial.print(":");
Serial.print(segundos);

switch (diadasemana)
{
case 0: Serial.println(", Domingo");
break;
case 1: Serial.println(", Segunda feira");
break;
case 2: Serial.println(", Terca feira");
break;
case 3: Serial.println(", Quarta feira");
break;
case 4: Serial.println(", Quinta feira");
break;
case 5: Serial.println(", Sexta feira");
break;
case 6: Serial.println(", Sabado");
}

=> USO if ABAIXO PARA CHECAR O CÁLCULO DAS HORAS P/ EXECUTAR OU NÃO UMA TAREFA... QUE PARECE ESTAR FUNCIONANDO NORMALMENTE...

if ((horas * 60 + minutos) < (total_min_inicial_conf) || (horas * 60 + minutos) >= (total_min_final_conf))

Conto com a colaboração dos companheiros

Exibições: 113

Responder esta

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço