Pessoal, estou com um problema estressante:
Estou fazendo um relógio com RTC o qual está pronto, mas quero que ele me mostre quantas horas e minutos faltam para despertar. O problema é que não consigo fazer uma lógica que sirva para todos os horários! Alguém sabe como fazer? Há alguma instrução pronta para isso no arduino? Agradeço muito a ajuda!
Tags:
Enrique, boa noite.
Se puder, post aqui seu código e assim poderemos ajuda-lo melhor.
Rui
Enrique se você colocar a hora atual, minuto atual, hora para despertar e minuto para despertar cada um em uma variavel, não seria só fazer a diferença entre uma variavel e outra e em seguinda verificar se o numero é positivo ou negativo, caso seja positivo essa é a resposta e caso seja negativo somaria 24 e ai seria a resposta (ou 60 no caso dos minutos).
Assim não da certo?
A dica aqui é usar o excel como auxiliar para construir a lógica toda. Fazendo assim, vc será capaz de simular rapidamente diversas combinações de horários.
No excel, defina b3 como sendo hora atual
c3 como sendo minuto atual
e3 como sendo hora do despertador
f3 como sendo minuto do despertador
hora faltante será exibida na célula h3 e terá a fórmula: SE(B3>E3;SE(C3>F3;24-B3+E3-1;24-B3+E3);SE(C3>F3;SE(B3=E3;23;E3-B3-1);E3-B3))
minuto faltante será exibido na célula i3 e terá a fórmula: SE(C3>F3;60-C3+F3;F3-C3)
simulei aqui e funcionou em diversas combinações.
Aí peguei aquelas células de fórmulas e converti em lógica para o arduino:
// é necessário que o horário atual esteja devidamente desmembrado em HORA_ATUAL e MINUTO_ATUAL
// o horário para despertar também deve estar devidamente desmembrado em HORA_DESPERTADOR e MINUTO_DESPERTADOR
// o tempo faltante até o horário para despertar estará desmembrado em HORAS_FALTANTES e MINUTOS_FALTANTES
//// algoritmo para obtenção das horas faltantes
IF ( HORA_ATUAL > HORA_DESPERTADOR)
{
IF (MINUTO_ATUAL > MINUTO_DESPERTADOR )
{
HORAS_FALTANTES = 24 - HORA_ATUAL + HORA_DESPERTADOR - 1;
}
else
{
HORAS_FALTANTES = 24 - HORA_ATUAL + HORA_DESPERTADOR;
}
}ELSE
{
IF (MINUTO_ATUAL>MINUTO_DESPERTADOR;
{
IF (HORA_ATUAL = HORA_DESPERTADOR)
{
HORAS_FALTANTES = 23;
}
ELSE
{
HORAS_FALTANTES = HORA_DESPERTADOR - HORA_ATUAL - 1;
}
}
ELSE
{
HORAS_FALTANTES = HORA_DESPERTADOR - HORA_ATUAL;
}
}
// algoritmo para obtenção dos minutos faltantesIF (MINUTO_ATUAL>MINUTO_DESPERTADOR)
{
MINUTOS_FALTANTES = 60 - MINUTO_ATUAL + MINUTO_DESPERTADOR;
}
ELSE
{
MINUTOS_FALTANTES = MINUTO_DESPERTADOR - MINUTO_ATUAL;
}
Eu só testei pelo excel e funcionou. Não testei no arduino, então talvez possa existir algum errinho que tenha que ser corrigido, mas o algoritmo aparentemente funciona
olhando ali o código que postei, encontrei um errinho que deve ser corrigido:
onde está: IF (HORA_ATUAL = HORA_DESPERTADOR)
deve ser corrigido para: IF (HORA_ATUAL == HORA_DESPERTADOR)
Prezado imhugo:
Excelente sua idéia! funcionou perfeitamente! Não observei nenhum erro! Você precisa explicar como transforma a lógica do excel em lógica arduino! Coloquei uma foto do display para você ver! Eu tinha feito uma lógica, mas dava erros quando a hora despertador era maior que a hora atual e estava ficando super-complexo o programa! Valeu!
Muito obrigado!
desconheço alguma forma automatizada de converter lógica de excel em lógica pro arduino. Eu faço no método bruto mesmo, na marra, na unha. Precisa apenas entender a sintaxe do excel e enterder a sintaxe do arduino, daí vc faz a conversão. Faça uma analogia com a tradução de texto de uma lingua pra outra: pra vc fazer a tradução, é necessário conhecer as duas linguas, correto?
Veja mais ou menos como eu fiz. Dá pra ter uma idéia do processo:
O excel é muito bom pra fazer certas operações matemáticas. Então ao invés de fazer direto no arduino, use o excel. Use e abuse da grande capacidade de lidar com fórmulas e depois de tudo pronto e testado, converta a lógica pra linguagem que quiser.
Show! Muito obrigado pelas dicas!
Abraços!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por