Go Down

Topic: hc sr04 + manejar motores con IR (Read 474 times) previous topic - next topic

zaran

Hola!
He adquirido un sensor de ultrasonidos (hcsr04) para integrarlo en un coche manejado con un mando a distancia por IR. El sensor  lo he probado y funciona bien, y por otro lado el control del coche por IR tambien perfecto.
El problema viene cuando intento hacer un programa donde funcionen los dos. El coche deja de responder al mando a distancia y no funciona.
puede ser que el sensor de ultrasonidos ralentice el programa?
pd: si es necesario puedo colgar aqui todo el codigo :)

Jukar

Si quieres que te ayuden más que necesario yo diría que es imprescindible que subas el código ...

zaran

entendido! :)
pues ahi va el codigo. El control por infrarojos me funciona bien si lo cargo por si solo. Pero al meter la ultima parte de ultrasonidos no funciona nada. He probado a imprimir en el monitor serial los valores que recive el IR, y recive valores pero tardan en llegar mas de lo normal.
es un coche controlado por IR  con dos motores. espero que se entienda bien.

#include <IRremote.h>
#include <IRremoteInt.h>

//pines motor 1
int motor1der=2;
int motor1izq=3;
int motor1on=9;
//pines motor 2
int motor2der=5;
int motor2izq=6;
int motor2on=10;
//poner IR en marcha
int RECV_PIN = 8 ; //Definimos el pin donde tiene que esta el IR
IRrecv irrecv(RECV_PIN);
decode_results results;
int ValorIR=0; //declramos variable almacen valor ir
//sensor ultrasonidos
int trigPin=11;
int echoPin=12;


void setup() {
  //pines motores
  pinMode(motor1der,OUTPUT);
  pinMode(motor1izq,OUTPUT);
  pinMode(motor1on,OUTPUT);
  pinMode(motor2der,OUTPUT);
  pinMode(motor2izq,OUTPUT);
  pinMode(motor2on,OUTPUT);
  //pines IR
  pinMode(8,INPUT);
  //pines sensor ultrasonidos
  pinMode(trigPin,OUTPUT);
  pinMode(echoPin,INPUT);
 
Serial.begin(9600); //Ponemos el puerto serie a 9600
irrecv.enableIRIn(); // el receptor ir en marcha

analogWrite(motor1on,150);
analogWrite(motor2on,150);}


//definimos una función llamada "leerIR" esto nos ayuda a que en el futuro podamos reutilizarla.
//no tiene parámetros de entra y devuelve un INT
int leerIR(){
if (irrecv.decode(&results)) { // si recibe señal IR
    int lectura = results.value; //Guarda el valor de la señal en la variable lectura
    irrecv.resume(); // Recive siguiente valor IR
    Serial.println(lectura);
    return lectura; //devuelve lectura
}
}

void loop() {

    ValorIR=leerIR(); //asignamos a esa variable el valor que devuelve leerIR
  if (ValorIR==6375){ //pulsar tecla 2
digitalWrite(motor1der,HIGH);
digitalWrite(motor2der,HIGH);
digitalWrite(motor1izq,LOW);
digitalWrite(motor2izq,LOW);}
  if (ValorIR==4335){ //pulsar tecla 4
digitalWrite(motor1der,HIGH);
digitalWrite(motor2der,LOW);
digitalWrite(motor1izq,LOW);
digitalWrite(motor2izq,HIGH);}
  if (ValorIR==23205){ //pulsar tecla 6
digitalWrite(motor1der,LOW);
digitalWrite(motor2der,HIGH);
digitalWrite(motor1izq,HIGH);
digitalWrite(motor2izq,LOW);}
  if (ValorIR==19125){ //pulsar tecla 8
digitalWrite(motor1der,LOW);
digitalWrite(motor2der,LOW);
digitalWrite(motor1izq,HIGH);
digitalWrite(motor2izq,HIGH);}
  if (ValorIR==14535){ //pulsar tecla 5
digitalWrite(motor1der,HIGH);
digitalWrite(motor2der,HIGH);
digitalWrite(motor1izq,HIGH);
digitalWrite(motor2izq,HIGH);}

//sensor ultrasonidos

int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
  if (distance >= 10){
digitalWrite(motor1der,HIGH);
digitalWrite(motor2der,HIGH);
digitalWrite(motor1izq,HIGH);
digitalWrite(motor2izq,HIGH);
}
}

Go Up