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! 

Exibições: 451

Responder esta

Respostas a este tópico

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 faltantes

IF (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!

Anexos

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!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço