Ir al contenido principal

Robot 4x4 -> Arduino Uno + Shield L293D + HC-SR04 + Servo + Bluetooth + App Android

Robot 4x4 con Arduino Uno

Tengo montado el chasis con 4 motores, arduino uno, shield L293D,  sensor ultrasónico HC-SR04 con un servomotor también he introducido el modulo HC-05 de Bluetooth para poderlo controlar con una aplicación para el movil con sistema android.

Tengo el código que he ido modificando, hasta el montaje del sensor ultrasónico. Perfecto
Pero ahora he introducido el Bluetooth, y la verdad el código me da error en la copilación...

Aquí pongo el código:

#include   // Llama a la librería del sensor ultrasónico HC-SR04
#include      // Llama a la librería del Shield L293D
#include        // Llama a la librería del Servo

/* Conexion del Modulo Bluetooth HC-06 y el Arduino
 ARDUINO    Bluetooth HC-06
 0 (RX)       TX
 1 (TX)       RX
 5V           VCC
 GND          GND
 !!Cuidado!! Las conexiones de TX y RX al modulo Bluetooth deben estar desconectadas
 en el momento que se realiza la carga del codigo (Sketch) al Arduino.
*/
Servo PingServo;      // creamos un objeto tipo Servo que llamamos PingServo
AF_DCMotor motor1(1); // Motor 1 - Delante Derecha conectado al Puerto 1
AF_DCMotor motor2(2); // Motor 2 - Delante Izquierda conectado al Puerto 2
AF_DCMotor motor3(3); // Motor 3 - Atrás Izquierda conectado al Puerto 3
AF_DCMotor motor4(4); // Motor 4 - Atrás Derecha conectado al Puerto 4

int minDistGuardada = 15 ;
// Mínima distancia para el sensor ultrasónico de la orden de parar y girar.
int trigger = 13; // trigger conectado al pin 13 digital
int eco = 2;      // eco conectado al pin 2 digital
int centroDist, izqDist, drchDist, atrasDist;
// Define variables centro, izq., drch. y atrás para la distancia
long tiempo, pulgadas, cm;  // Define variables para el sensor
int estado = 'g';         // inicia detenido

void setup() {
Serial.begin(9600);    // inicia el puerto serial para comunicacion con el Bluetooth
PingServo.attach(10); // El servo está conectado pin 10 del módulo shield
PingServo.write(90);  // Centra la posición del servo a 90º
motor1.setSpeed(100); // Configura velocidad motor1 a 180 (de 0 (stop) a 255 (fast)
motor2.setSpeed(100); // Configura velocidad motor2 a 180 (de 0 (stop) a 255 (fast)
motor3.setSpeed(100); // Configura velocidad motor3 a 180 (de 0 (stop) a 255 (fast)
motor4.setSpeed(100); // Configura velocidad motor4 a 180 (de 0 (stop) a 255 (fast)
Serial.begin(9600);   // Inicia el monitor serial
Serial.println("Serial test!"); // Testea la comunicación al monitor serial
}

void TodoParado() {      // Hace que el robot este PARADO
motor1.run(RELEASE);  // Motor 1 - Delante Derecha
motor2.run(RELEASE);  // Motor 2 - Delante Izquierda
motor3.run(RELEASE);  // Motor 3 - Atrás Izquierda
motor4.run(RELEASE);  // Motor 4 - Atrás Derecha
}
void TodoAvance() {   // Hace que el robot AVANCE
motor1.run(FORWARD);  // Motor 1 - Delante Derecha
motor2.run(FORWARD);  // Motor 2 - Delante Izquierda
motor3.run(FORWARD);  // Motor 3 - Atrás Izquierda
motor4.run(FORWARD);  // Motor 4 - Atrás Derecha
Serial.println("Hacia Adelante"); // Escribe en el monitor serial
}
void GirarDerecha() {    // Hace que el robot gire a la DERECHA
motor1.run(FORWARD);  // Motor 1 - Delante Derecha
motor2.run(BACKWARD); // Motor 2 - Delante Izquierda
motor3.run(BACKWARD); // Motor 3 - Atrás Izquierda
motor4.run(FORWARD);  // Motor 4 - Atrás Derecha
delay(1600);          // Tiempo requerido para girar a la DERECHA 1.6 seg.
Serial.println("Girando a la Derecha"); // Escribe en el monitor serial
}
void MarchaAtras(){         // Hace que el robot vaya marcha ATRÁS
motor1.run(BACKWARD);  // Motor 1 - Delante Derecha
motor2.run(BACKWARD);  // Motor 2 - Delante Izquierda
motor3.run(BACKWARD);  // Motor 3 - Atrás Izquierda
motor4.run(BACKWARD);  // Motor 4 - Atrás Derecha
delay(1600);           // Tiempo requerido para poner marcha ATRÁS 1.6 seg.
Serial.println("Marcha Atrás"); // Escribe en el monitor serial
}
void GirarIzquierda() {      // Hace que el robot gire a la IZQUIERDA
motor1.run(BACKWARD);  // Motor 1 - Delante Derecha
motor2.run(FORWARD);   // Motor 2 - Delante Izquierda
motor3.run(FORWARD);   // Motor 3 - Atrás Izquierda
motor4.run(BACKWARD);  // Motor 4 - Atrás Derecha
delay(1600);           // Tiempo requerido para girar a la IZQUIERDA 1.6 seg.
Serial.println("Girando a la Izquierda");// Escribe en el monitor serial
}


// Comienza la función para decidir qué hacer
void loop(){
  void MirarFrente() { // Servo mirar al frente
    PingServo.write(90); // Posición servo a 90º para mirar al frente.
    delay(175);
    ping();
    }

    void MirarLados(){  // Servo mira a los lados 180º y 0º
    PingServo.write(180); // Posición de 180° - derecha
    delay(320); 
    ping();
    drchDist = cm; // obtiene la distancia a la derecha
    PingServo.write(0); // Posición de 0º - izquierda
    delay(620); 
    ping();
    izqDist = cm; // obtiene la distancia a la izquierda
    PingServo.write(90); // Posición de 90° (al frente)
    delay(275);
    }

  if(Serial.available()>0){
    estado = Serial.read();
  }
  if(estado=='c'){      // Boton de Parada
    TodoParado();       // Detener todos los motores
  }
  if (estado=='a'){
    TodoAvance(); // Todas las ruedas adelante
  }
  if (estado=='b'){
    GirarIzquierda();
  }
  if (estado=='d'){
    GirarDerecha();
  }
  if (estado=='e'){
    MarchaAtras();
  }
  if (estado=='f'){
   
 
    MirarFrente();
    //Serial.print(cm);
    //Serial.println(" cm"); // Imprime una línea en el monitor serial
    if(pulgadas >= minDistGuardada) /* Si las pulgadas delante de un objeto
        son mayores que o iguales a la distancia mínima salva (11 pulgadas),
        reaccionar*/
    {
    TodoAvance(); // Todas las ruedas adelante
    delay(110);
    }
    else // Si no:
    {
    TodoParado(); // Detener todos los motores
    MirarLados(); // Compruebe su entorno para elegir la mejor ruta
    if(drchDist > izqDist) // Si la distancia derecha es mayor que la distancia izquierda, girar a la derecha
    {
    GirarDerecha();
    }
    else if (izqDist > drchDist) // Si la distancia izquierda es mayor que la distancia derecha, girar a la izquierda
    {
    GirarIzquierda();
    }
    else if (izqDist&&drchDist    {
    MarchaAtras();
    }
    }
   
    unsigned long ping() {
    pinMode(trigger, OUTPUT); // Declaramos trigger como SALIDA
    digitalWrite(trigger, LOW); // Por cuestión de estabilización del sensor lo ponemos en estado BAJO
    delayMicroseconds(2); // esperamos 2 microsegundos
    digitalWrite(trigger, HIGH); // Envío del pulso ultrasónico, estado ALTO
    delayMicroseconds(5); // esperamos 5 microsegundos
    digitalWrite(trigger, LOW); // Lo ponemos en estado BAJO
    pinMode(eco,INPUT); // Declaramos eco como ENTRADA
    tiempo = pulseIn(eco, HIGH); /* Función para medir la longitud del pulso entrante.
        Mide el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando
        el sensor recibe el rebote, es decir: desde que el pin 2 empieza a recibir el rebote,
        HIGH, hasta que deja de hacerlo, LOW, la longitud del pulso entrante*/

    /* Convertir microsegundos a pulgadas */
      pulgadas = microsegundosApulgadas(tiempo);
      cm = microsegundosAcentimetros(tiempo);
      }
      long microsegundosApulgadas(long microsegundos) // convierte el tiempo en distancia
      {
      return microsegundos / 74 / 2;
      }
      long microsegundosAcentimetros(long microsegundos) // convierte el tiempo en distancia
      {
      return microsegundos / 29 / 2;
      }
      }
          
  if (estado=='g'){
     TodoParado(); // Detener todos los motores 
  }
}


Mensaje de error en la copilacion:

Arduino:1.6.8 (Windows 7), Tarjeta:"Arduino/Genuino Uno"

C:\Users\Santravis\Dropbox\ARDUINO\0_PROYECTO_ROBOT_4X4\_0_CODIGO\CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04\CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04.ino: In function 'void loop()':

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:80: error: a function-definition is not allowed here before '{' token

   void MirarFrente() { // Servo mirar al frente

                      ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:86: error: a function-definition is not allowed here before '{' token

     void MirarLados(){  // Servo mira a los lados 180º y 0º

                      ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:119: error: 'MirarFrente' was not declared in this scope

     MirarFrente();

                 ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:132: error: 'MirarLados' was not declared in this scope

     MirarLados(); // Compruebe su entorno para elegir la mejor ruta

                ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:147: error: a function-definition is not allowed here before '{' token

     unsigned long ping() {

                          ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:165: error: a function-definition is not allowed here before '{' token

       {

       ^

CODIGO_COMPLETO_5_Mi_Robot4x4_Bluetooth_HC-SR04:169: error: a function-definition is not allowed here before '{' token

       {

       ^

exit status 1
a function-definition is not allowed here before '{' token

Este reporte podría tener más información con
"Mostrar salida detallada durante la compilación"
opción habilitada en Archivo -> Preferencias.

Comentarios

Entradas populares de este blog

Shield L293D

Algún que otro problema a la hora de conectarlo...

He conectado los 5v para el arduino y los 9v para el shield L293D el modulo bluetooth no esta encendido ¿? *** SOLUCIONADO, tenia el HC-05 a 9600 en el codigo y estaba configurado a 38400.  Estas son las conexiones realizadas; Pin 2 - el Echo del sensor ultrasonico HC-SR04 Pin 13 - Trig del sensor ultrasonico HC-SR04 Cable Blanco positivo del sensor HC-SR04 Cable Gris negativo del sensor HC-SR04 He realizado unas soldaduras en el Shield L293D, Pin 0 y Pin 1 para el modulo Bluetooth He realizado dos soldaduras para poder conectar el modulo de bluetooth al shield L293D. Positivo y negativo del modulo.