Ir ao conteúdo
  • Cadastre-se
Leo_01

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

    }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!