Go Down

Topic: Logica do If por marcador (Read 318 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?
This... is a hobby.

Go Up