Ir ao conteúdo
  • Cadastre-se

Arduino Problema com código “intertravamento”


Posts recomendados

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.

 

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);
        }

    }

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Já pensou em algo minimalista como...

if ((voice==mover frente) && (sensor_frente>29)) ande_pra_frente();
else freia();
//o mesmo pra ré, esquerda, direita

...?

 

Não vejo loop no seu fonte. Sua falta também ajuda a executar uma vez só. De fato, causa.

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz , muito obrigado por responder.

 

Não coloquei o código completo e isso possivelmente atrapalhou o seu entendimento sobre o código.

 

Então, segue o código completo:

 

Como eu havia dito, assim que a distância chega aos 30cm, não consigo dar mais comandos. Gostaria de "intertravar". Se o comando fosse mover frente, mover esquerda ou mover direita continuasse travado, entretanto, se eu pedisse o comando mover ré, ela voltasse para que assim eu pudesse ter uma maior distância da parede e poder usar todos os comandos novamente. Como já tem os 30 centímetros, o comando if postado abaixo "proíbe" que eu execute o comando mover ré.

 

 

Desculpe pelo tamanho do texto e desde já, agradeço pela prestatividade.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Amigo, pro caso da re() penso que deve ter um tratamento especial pois afinal ele já andou e sabe que não tem nada atrás. Tenta dar um tempinho de movimento livre pra ele... Algo como...

 

 else if (voice == "mover ré")
    {
      freio();
      delay(100);
      re();
    delay(200);
	}

Assim durante os 200mS (ou +) ele deve distanciar dos 30cm e te libertar destas amarras. Amém?

 

Também tenho dúvidas se entendi e me expressei direito...

 

abç

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Irei retirar o código para que não haja aumento no limite da porcentagem de plágio aceita, pois quando o programa verificar na internet se há algo igual, irá reconhecer meu código e o do artigo.

 

Desde já, agradeço a Isadora pela prestatividade e paciência.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!