Go Down

Topic: Ajuda com código “intertravamento” (Read 138 times) previous topic - next topic

leo_01

Boa tarde, galera.Sou novato e estou tendo um pouco de dificuldade com o final da minha programação. Meu projeto é de um carrinho acionado por voz. Até então tudo certo, mas estou tendo problemas quando coloco um if para parar o carro caso a distância seja menor ou igual a 30 cm e diferente de 0. O carro para, entretanto, como a distância continua a mesma, não consigo dar outro comando para que se ele movimente, exemplo: se eu falar "mover frente", ele anda e caso o sensor ultrassonico detecte que a distância se equivale a 30, o carro freia. Após isso, não consigo dar mais comandos, como por exemplo, ré, para que assim ele fique a uma distância maior e possa assim ou ir para a esquerda ou direita. Gostaria de alguma metodologia que fizesse como se fosse um "intertravamento". Caso ele estivesse a 30cm, se eu falar mover frente, mover esquerda ou mover direita, ele continuasse travado. Entretanto, se eu falar ré, ele pudesse tomar distância da parede.
Um exemplo que tentei, mas talvez fiz de forma errada foi:

if (((cm<=30) && (cm!=0)) && !(voice == "re"))

{
freio();
}

Desculpem caso eu não tenha sido claro. Qualquer dúvida, me perguntem para que eu possa informá-los melhor.




Code: [Select]
long duration, cm;
      long duration2, cm2;


    // sensor 1
      digitalWrite(emissor, LOW);
      delayMicroseconds(2);
      digitalWrite(emissor, HIGH);
      delayMicroseconds(5);
      digitalWrite(emissor, LOW);

      duration = pulseIn(receptor, HIGH);
     
      cm = microsecondsToCentimeters(duration);

      if ((cm <=30) && (cm !=0))

      freio();
      delay(50);
        }

      //sensor 2

      digitalWrite(emissor2, LOW);
      delayMicroseconds(2);
      digitalWrite(emissor2, HIGH);
      delayMicroseconds(5);
      digitalWrite(emissor2, LOW);

      duration2 = pulseIn(receptor2, HIGH);
     
      cm2 = microsecondsToCentimeters(duration2);

     if (cm2 >=75)
    {

      freio();
      delay(50);
        }

    }

Go Up