Logica do If por marcador

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.

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

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?