Ir ao conteúdo

Posts recomendados

Postado

Bem, eu estou fazendo um robô, ja contrui ele e tudo, mas a programação esta difícil, estou a muito tempo tentando e não consigo, aqui está o código:

#include <Ultrassonico.h>
#include <Servo.h>


#define motoE1 6 //faz o motor Esquerdo ir para traz
#define motoE2 7 //faz o motor Esquerdo ir para frente

#define motoD1 8//faz o motor direito ir para traz
#define motoD2 9//faz o motor direito ir para frente

#define p_trigger 5 // dispara o som que vai ser rebatido
#define p_echo 4 // recebe a onda de som

int viraservo;
int viradireita;
int viraesquerda;


Servo sensor,garra; //servos da garra e da base do sensor

float dist_cm;


Ultrassonico ultrassonico(p_trigger, p_echo); 


void setup() {
  
  
sensor.attach(2);
garra.attach(3);

viradireita = 180;
viraesquerda = 0;


pinMode(motoE1, OUTPUT);
pinMode(motoE2, OUTPUT);
pinMode(motoD1, OUTPUT);
pinMode(motoD2, OUTPUT);

digitalWrite (motoE1, LOW);
digitalWrite (motoE2, LOW);
digitalWrite (motoD1, LOW);
digitalWrite (motoD2, LOW);
sensor.write(90);
garra.write(60);
delay(100);

}

void loop() {
  dist_cm=ultrassonico.ditancia_cm();

  
  if (dist_cm >= 14.00 ){
      digitalWrite (motoE2, HIGH);
      digitalWrite (motoD2, HIGH);
 
    
  }else{ 
      digitalWrite (motoE2, LOW);
      digitalWrite(motoD2, LOW);
      if(dist_cm <=14.00){
        viraservo = viradireita;
        sensor.write(viraservo);
        if(dist_cm >14.00){
        digitalWrite(motoE2, HIGH);
        digitalWrite(motoD1,HIGH);
        delay(500);
        }else {
        viraservo = viraesquerda;
        sensor.write(viraservo);
        
        if(dist_cm >14.00){
        digitalWrite(motoE1, HIGH);
        digitalWrite(motoD2,HIGH);
        delay(500);
          }
        
        }
        
        
      
    }
    }
}

O que eu queria fazer era o robô seguir em frente mas quando chegar a 14.00 cm da parede ele parar virar o sensor para a direita e caso tenha distancia o suficiente ele virar para a direita, caso contrario ele vira o sensor para a esquerda e caso tenha distância suficente ele vira para a esquerda, o robo possui 3 rodas 2 com motor e uma roda guia, coloquei uma placa H l298 que permite que o motor vire para os dois lados, e até a parte de chegar na parede e parar eu consegui porém depois disso o sensor fica maluko virando de um lado para o outro, Eu agradeceriam s alguem podesse me dar uma ideia de como resolver isso
            
  
    
  

 

  • Amei 1
  • Membro VIP
Postado

... ou seja, a cada uso da variável dist_cm há de se chamar antes a função dist_cm=ultrassonico.ditancia_cm();

 

Uma alternativa minimamente curiosa que pode lhe dar noção de um recurso precioso do mundo dos mc 's que é a interrupção...

Como usa o dado dist_cm o tempo todo no loop, criar uma interrupção por timer pra lê-lo. Assim ela é atualizada 'automaticamente' o 'tempo todo'.

Obs: necessário conhecer as funções dos #includes a um nível mais elevado (ou baixo: em hw) e saber se usam recursos do hw do mc (o timer) pra não conflitar.

  • Curtir 1
  • Obrigado 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!