Olá garaginos...

Sou novo por aqui... Gostaria de uma ajudinha e talvez possa servir para muitos...

Estou precisando de uma estrutura condicional como descrito abaixo, levando em conta que tenho o módulo de horas no arduino:

int hora_inicial 23;

int minuto_inicial = 30;

int hora_final = 06;

int minuto_final = 30;

Estou tentando desenvolver uma estrutura que muda seu comportamento ao atingir a hora e minuto inicial, que continua até atingir a hora e minuto final, passando então ao comportamento inicial.

Consegui apenas com a hora inicial e hora final, conforme código abaixo:

if ((myRTC.hours >= hora_inicial) and (myRTC.hours < hora_final))

{ lista de instruções }
else
{ outra série de instruções }

Não consegui acrescentar os minutos em seus locais específicos e fazer funcionar.

Alguém poderia contribuir com uma solução para este caso?

Exibições: 1165

Responder esta

Respostas a este tópico

primeiro troque o funçao "and" por "&&" por que eh assim q essa comparaçao eh feita na ide do arduino

Olá.

Tente assim:

if ((myRTC.hours = 23) and (myRTC.minutes = 30))

Comportamento = 1 //comportamento alterado

if ((myRTC.hours = 06) and (myRTC.minutes = 30))

Comportamento = 0 //comportamento normal


if(comportamento = 1)

{    lista de instruções }

else

{   outra série de instruções }




Precisaria corrigir esse código sugerido:

if ((myRTC.hours = 23) and (myRTC.minutes = 30))

if ((myRTC.hours = 06) and (myRTC.minutes = 30))

if(comportamento = 1)


primeiro porque não se faz comparação com = e sim com ==
depois porque ao invés de and, deveria ter sido usado &&

Pelo que entendi, você quer que algo ocorra entre hora_inicial, minuto_inicial e hora_final, minuto_final. Isso vai gerar um condicional quadruplo, mas pode ser dividido em dois condicionais duplos para facilitar a leitura do código.

Como o jose miguel indicou, ao invez de utilizar "and" você deve utilizar "&&" (este é o operador lógico AND da linguagem C).

Dividindo a comparação em dois condicionais, ficaria assim:

bool executarTarefa = false;

if ( ( myRTC.hours >= hora_inicial) && (myRTC.hours <= hora_final) ) /// Esta dentro da faixa de horas

{

    if ( (myRTC.minutes >= minuto_inicial) && (myRTC.minutes <= minuto_final )

    {

           executarTarefa = true;

    }

}

if ( executarTarefa )

{

         /// Dentro da faixa de horario estabelecida

}

else

{

        /// Fora da faixa de horario estabelecida

}

Algumas observações:

1 - Perceba que em todas as comparações existe o igual ( >=; <=). Isso permite que vc estipule um intervalo de tempo dentro da mesma hora (entre 01:15 e 01:20, por exemplo);

2 - Na comparação dos minutos, eu utilizei myRTC.minutes. Não sei se este nome está certo, vc deve conferir isso com o seu código

Happy hack :)

 Olá.

if ( (myRTC.minutes >= 30) && (myRTC.minutes <= 30 )

    {

           executarTarefa = true;

    }

Isso não parece muito lógico.

daniel me corrija se eu estiver errado mas no caso da IDE do arduino teria que ser na linha:

bool executarTarefa = false; (primeira que vc usou)  dessa forma :

boolean executaTarefa = false;  nao he mesmo?

acho que vc confundiu as sintaxes ou estou enganado?

Isso, é isso mesmo meu brother;  bool é coisa do c++, arduino usa boolean.

Isso acontece de vez em quando (sempre) comigo, misturar tokens do c++ no arduino rsrsrs

Valeu pelo issue :D

kkkkkkkk fica mais facil pra mim que manjo um pouquinho so de um
kkkkkkkk ai nao tem como confudir kkkkkkk

ja vc manja de mais outros ai pra gravar tudo eh osso

Uma outra possibilidade seria transformar tudo em minutos

por exemplo 23h30 seria = (23*60) + 30 = 1410 minutos (hora inicial)

06h30 seria = (6*60) + 30 = 420 minutos (hora final)

Portanto, se a hora atual (também convertida em minutos) for maior que 1410 minutos ou menor que 420 minutos, executa INSTRUÇÕES 1, caso contrário executa INSTRUÇÕES 2

Obrigado a todos pela contribuição! Que beleza, certamente ajudará muitas pessoas. Quantas possibilidades apareceram!!!

 

é bem simples são duas funções "&&" e "||"

&& = e.

|| = ou.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço