Go Down

Topic: Logica do If por marcador (Read 241 times) previous topic - next topic

KORSH

Salve a todos.

Estou realizando um experimento um teste, no qual preciso acionar um contador toda vez que pisco um led e depois de X piscada ele apaga, marco um tempo e depois pisco denovo.

O que não estou conseguindo fazer é a logica, escrever ela.

eu estou rodando as acoes pelo TimerAction.


void Avanca2(){
 
         if (ContSegundosAv2 >= 0 && ContSegundosAv2 <= 7){
//        if ( ContSegundosAv2 <= 7){
           AvancaStatus ? AvancaStatus=false : AvancaStatus=true;
          digitalWrite(Avanca,AvancaStatus);
          Serial.println("                1. parte -  AVANCANDO    ");
            Serial.print("Avanco eh ");         
          Serial.println(ContSegundosAv2); 
              Serial.print("REcuo eh ");         
          Serial.println(ContSegundosRec2);
          ContSegundosAv2++;
          ContSegundosRec2++;

         }
      if (ContSegundosAv2 >=8 && ContSegundosAv2<=12){ 
          Serial.println("                2. parte -     ");
          //nao executa nada, soh contagem
            Serial.println("Avanco eh");         
          Serial.println(ContSegundosAv2); 
              Serial.println("REcuo eh");         
          Serial.println(ContSegundosRec2);         
          ContSegundosAv2++;
          ContSegundosRec2++;
            }
      if (ContSegundosAv2 >= 13 && ContSegundosAv2<=20 ){                                             
          RecuaStatus ? RecuaStatus=false : RecuaStatus=true;
          digitalWrite(Recua,RecuaStatus);
          Serial.println("                3 fase -      ");
          Serial.println("Recuo eh");         
          Serial.println(ContSegundosRec2);         
          ContSegundosAv2++;         
          ContSegundosRec2++;         

       }
       
       else{
          digitalWrite(Avanca,false);
          digitalWrite(Recua,false);
               ContSegundosAv2=0;
               ContSegundosRec2=0;
                  Serial.println("                4 fase - zerando contadores      ");
          Serial.println(ContSegundosAv2);         
          Serial.println(ContSegundosRec2);         
        }
}

Quando executo ele me dá print apenas da fase 1 e 4.

bubulindo

Podes explicar-me o que é que esta linha faz?

Code: [Select]
AvancaStatus ? AvancaStatus=false : AvancaStatus=true;

Acho que o teu código está um pouco estranho... imagina que a variável ContSegundosAv2 é igual a 1.

O processador vai processar o primeiro if porque 1 está entre 0 e 7. Mas depois no último if, porque 1 não está entre 13 e 20, o que está dentro do else vai ser executado... é isso que pretendes?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up