Go Down

Topic: Arduino uno (Read 733 times) previous topic - next topic

Alejandro_18

hola
necesito ayuda estoy haciendo un proyecto de bachillerato que consiste en programar un pequeño robot de dos ejes con placa arduino, un sensor de ultrasonidos HC-SRO4 y dirigido con infrarrojos. El problema que tengo es el siguiente que el código que he hecho me funciona bien exceptuando una cosa el ULTRASONIDOS que le mando unas instrucciones y me hace otras. Os adjunto el código completo para que lo miréis porfavor necesito solucionar eso, porque lo tengo que entregar dentro de poco.

Código:

#include <NECIRrcv.h> //libreria para infrarojos
#include <Ultrasonic.h>// libreria para ultrasonidos
Ultrasonic ultrasonic(9,8);// trigger pin 8, echo pin 9


#define IRPIN 2 //pin del receptor de infrarojos.

NECIRrcv ir(IRPIN);

//pins dels motors
#define motor1Pin1 5 //B-1A
#define motor1Pin2 6 //B-1B
#define motor2Pin1 3 //A-1B
#define motor2Pin2 10 //A-1A

//codis dels botons del comandament IR
#define endavant 3877175040 // pulsamos el numero 4 y va para adelante
#define endarrere 2907897600 // pulsamos el numero 6 y va para atras
#define esquerra 4144561920 // pulsamos el numero 8 y va para la derecha
#define dreta 2774204160 // pulsamos el numero 2 y va para la izquierda
#define parada 3810328320 // pulsamos el numero 5 y para




unsigned long ircode; //variable para almacenar el codigo recibido

void setup() {
//declaració dels motors com a sortides
pinMode (motor1Pin1,OUTPUT);
pinMode (motor1Pin2,OUTPUT);

pinMode (motor2Pin1,OUTPUT);
pinMode (motor2Pin2,OUTPUT);

ir.begin(); //comiença la recepcion infraroja

}


void loop() {



if (ir.available()) // mientras el sensor este disponible
{
// leemos i mantenemos el codigo en la variable ircode
ircode = ir.read();
if (ircode==endavant) ENDAVANT(); //si el codigo recibido es adelante ves hacia adelante
if (ircode==endarrere) ENDARRERE();//si el codigo recibido es atras ves hacia atras
if (ircode==esquerra) ESQUERRA();//si el codigo recibido es izquierda ves hacia izquierda
if (ircode==dreta) DRETA();//si el codigo recibido es derecha ves hacia derecha
if (ircode==parada) PARADA();//si el codigo recibido es parar, parate
}

unsigned int distancia = ultrasonic.Ranging(CM);


if ( distancia < 10 ) // si la distancia es 10
{
PARADA(); // para
delay(2000);// espera 2 segundos
ENDARRERE();// ves hacia atras (AQUI TENGO EL PROBLEMA EN VEZ DE IR HACIA ATRAS COMO LE INDICO GIRA A DERECHA)


}
}

void ENDARRERE() //anar endarrere/atras
{
digitalWrite (motor1Pin1,LOW);
digitalWrite (motor1Pin2,HIGH);
//analogWrite (motor1Pwm,250);
digitalWrite (motor2Pin1,HIGH);
digitalWrite (motor2Pin2,LOW);
//analogWrite (motor2Pwm,250);
}

void ESQUERRA() //anar esquerra/izquierda
{
digitalWrite (motor1Pin1,HIGH);
digitalWrite (motor1Pin2,LOW);
//analogWrite (motor1Pwm,250);
digitalWrite (motor2Pin1,HIGH);
digitalWrite (motor2Pin2,LOW);
//analogWrite (motor2Pwm,250);
}
void DRETA() //anar dreta/derecha
{
digitalWrite (motor1Pin1,LOW);
digitalWrite (motor1Pin2,HIGH);
//analogWrite (motor1Pwm,250);
digitalWrite (motor2Pin1,LOW);
digitalWrite (motor2Pin2,HIGH);
//analogWrite (motor2Pwm,250);
}
void PARADA() //ir parada/parar
{
digitalWrite (motor1Pin1,LOW);
digitalWrite (motor1Pin2,LOW);
//analogWrite (motor1Pwm,0);
digitalWrite (motor2Pin1,LOW);
digitalWrite (motor2Pin2,LOW);
//analogWrite (motor2Pwm,0);
}
void ENDAVANT() //ir endavant/adelante
{
digitalWrite (motor1Pin1,HIGH);
digitalWrite (motor1Pin2,LOW);
//analogWrite (motor1Pwm,250);
digitalWrite (motor2Pin1,LOW);
digitalWrite (motor2Pin2,HIGH);
//analogWrite (motor2Pwm,250);
}

Os adjunto imágenes para que podáis ver la conexión.

Gracias.

Go Up