Error de complilación

ARDUINO L293D(Puente H)
5 10
6 15
9 7
10 2
5V 1, 9, 16
GND 4, 5, 12, 13

El motor 1 se conecta a los pines 3 y 6 del Puente H
El motor 2 se conecta a los pines 11 y 14 del Puente H

La fuente de alimentacion de los Motores se conecta a tierra y
el positivo al pin 8 del puennte H.

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.

Conexion Sensor Ultrasonido HC-SR04
ARDUINO Ultrasonido HC-SR04
2 Echo
3 Trig
5V VCC
GND Gnd

Conexion Servo SG90
ARDUINO Ultrasonido HC-SR04
11 Signal
5V VCC
GND Gnd
*/

#include <Servo.h> // Incluye la libreria Servo
Servo servo1; // Crea el objeto servo1 con las caracteristicas de Servo

int izqA = 5;
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'c'; // inicia detenido

int pecho = 2; // define el pin 2 como (pecho) para el Ultrasonido
int ptrig = 3; // define el pin 3 como (ptrig) para el Ultrasonido
int duracion, distancia; // para Calcular distacia

void setup() {
Serial.begin(9600); // inicia el puerto serial para comunicacion con el Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);

pinMode(pecho, INPUT); // define el pin 2 como entrada (pecho)
pinMode(ptrig,OUTPUT); // define el pin 3 como salida (ptrig)
pinMode(13,OUTPUT);

servo1.attach(11,660,1400); // Asocia el servo1 al pin 11, define el min y max del ancho del pulso
// eso depende del fabricante del servo
}

void loop() {

if(Serial.available()>0){ // lee el bluetooth y almacena en estado
estado = Serial.read();
}
if(estado=='a'){ // Boton desplazar al Frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
if(estado=='b'){ // Boton IZQ
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
if(estado=='c'){ // Boton Parar
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
if(estado=='d'){ // Boton DER
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}

if(estado=='e'){ // Boton Reversa
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}

if (estado =='f'){ // Boton ON, se mueve sensando distancia

 digitalWrite(ptrig, HIGH);   // genera el pulso de trigger por 10us
 delay(0.01);
 digitalWrite(ptrig, LOW);
 
 duracion = pulseIn(pecho, HIGH);          // Lee el tiempo del Echo
 distancia = (duracion/2) / 29;            // calcula la distancia en centimetros
 delay(10); 
 
 if (distancia <= 15 && distancia >=2){    // si la distancia es menor de 15cm
    digitalWrite(13,HIGH);                 // Enciende LED
    
    analogWrite(derB, 0);             // Parar los motores por 200 mili segundos
    analogWrite(izqB, 0); 
    analogWrite(derA, 0);    
    analogWrite(izqA, 0); 
    delay (200);
    
    analogWrite(derB, vel);          // Reversa durante 500 mili segundos
    analogWrite(izqB, vel); 
    delay(500);           
    
    analogWrite(derB, 0);            // Girar durante 600 milisegundos   
    analogWrite(izqB, 0); 
    analogWrite(derA, 0);  
    analogWrite(izqA, vel);  
    delay(600);
    
    digitalWrite(13,LOW);
 }
 else{                             // Si no hay obstaculos se desplaza al frente  
     analogWrite(derB, 0);     
     analogWrite(izqB, 0); 
     analogWrite(derA, vel);  
     analogWrite(izqA, vel); 
 }

}
if(estado=='g'){ // Boton SER, activa el Servomotor
servo1.write(30); // Gira el servo a 30 grados
delay(1000); // Espera 1000 mili segundos a que el servo llegue a la posicion

servo1.write(90);                // Gira el servo a 90 grados  
delay(700);                      // Espera 700 mili segundos a que el servo llegue a la posicion 

servo1.write(150);               //Gira el servo a 150 grados 
delay(700);  

}

if(estado=='h'){                 //Programacion de los botones 13-10-9-6-5
digitalWrite(13,1);        

}
if(estado=='m'){
digitalWrite(13,0);
}
if(estado=='i'){
digitalWrite(derB,1);
}
if(estado=='n'){
digitalWrite(derB,0);
}
if(estado=='j'){
digitalWrite(derA,1);
}
if(estado=='o'){
digitalWrite(derA,0);
}
if(estado=='k'){
digitalWrite(izqB,1);
}
if(estado=='p'){
digitalWrite(izqB,0);
}
if(estado=='l'){
digitalWrite(izqA,1);
}
if(estado=='q'){
digitalWrite(izqA,0);
}

}

me sale:
Arduino:1.8.9 (Windows 10), Tarjeta:"Arduino Uno"

:0:9: error: expected unqualified-id before numeric constant

D:\Desktop\digitales\ROBOT\ROBOT1\ROBOT1.ino:2:2: note: in expansion of macro 'ARDUINO'

ARDUINO L293D(Puente H)

^~~~~~~

In file included from D:\Documents\Arduino\libraries\Servo\src/Servo.h:63:0,

             from D:\Desktop\digitales\ROBOT\ROBOT1\ROBOT1.ino:39:

D:\Documents\Arduino\libraries\Servo\src/avr/ServoTimers.h:57:41: error: 'timer16_Sequence_t' does not name a type

typedef enum { _timer1, _Nbr_16timers } timer16_Sequence_t;

Se encontraron varias bibliotecas para "Servo.h"
Usado: D:\Documents\Arduino\libraries\Servo
No usado: C:\Program Files (x86)\Arduino\libraries\Servo
exit status 1
Error compilando para la tarjeta Arduino Uno.

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

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @kellygomez10.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Por favor edita tu post y adjunta el código de acuerdo a las Normas del Foro en Español, punto 7. También usa la opción "Autoformato" del menú "Herramientas" de la IDE antes de copiar el código así nos facilitas su lectura.

Si intentas compilar todo el texto que has posteado claramente va a dar errores.
Tienes que compilar únicamente lo que es código.

Por otro lado delay() solo acepta un parámetro entero.

delay(0.01);

No es válido.

El error de compilacion te viene porque cuando hiciste el corta pega del código te dejaste la primera línea de boceto:

/*

Añádesela y compilara correctamente.

Efectivamente:

delay(0.01);

Es incorrecto ya que "delay ()" solo funciona con milisegundos, (numeros enteros), si quieres retrasar micro segundos tienes el comando especifico que seria:

delayMicroseconds(10);

Teniendo en cuenta esto la forma de calcular la distancia podria quedar asi:

float calculaDistancia() {
  // Primero, generar un pulso corto de 2-5 microsegundos.
  digitalWrite(ptrig, LOW);
  delayMicroseconds(3);
  digitalWrite(ptrig, HIGH);
  // Después de ajustar un nivel de señal alto,
  //esperamos unos 10 microsegundos.
  //En este punto el sensor enviará señales con una frecuencia de 40 kHz.
  delayMicroseconds(10);
  digitalWrite(ptrig, LOW);
  // Tiempo de retardo de la señal acústica en el sensor.
  float duration = pulseIn(pecho, HIGH);
  // calculo de la distancia en cm.
  float distance = duration * 0.0172;
  return distance;
}

Te aconsejo que lo hagas así tipo "función" , detrás del "loop", porque seguro que la tendrás que llamar varias veces en tu código. Si así lo hacer podrías fundir los estados f y g, (seguro que es lo próximo que intentarías). :slight_smile: :slight_smile:
Quedaría el estado f de la siguiente forma:

  if (estado == 'f') { // Boton ON, se mueve sensando distancia

    float distancia = calculaDistancia();

    if (distancia <= 15 && distancia >= 2) {  // si la distancia es menor de 15cm
      digitalWrite(13, HIGH);                // Enciende LED

      analogWrite(derB, 0);             // Parar los motores por 200 mili segundos
      analogWrite(izqB, 0);
      analogWrite(derA, 0);
      analogWrite(izqA, 0);
      delay (200);

      analogWrite(derB, vel);          // Reversa durante 500 mili segundos
      analogWrite(izqB, vel);
      delay(500);

      servo1.write(30); // Gira el servo a 30 grados
      delay(700); // Espera 700 mili segundos a que el servo llegue a la posicion
      float distancia_1 = calculaDistancia();
      
      servo1.write(150);               //Gira el servo a 150 grados
      delay(700);
      float distancia_2 = calculaDistancia();

      if ( distancia_1 > distancia_2) {
        analogWrite(derB, 0);            // Girar durante 600 milisegundos a izquierdas
        analogWrite(izqB, 0);
        analogWrite(derA, 0);
        analogWrite(izqA, vel);
        delay(600);
      }
      else {
        analogWrite(derB, 0);            // Girar durante 600 milisegundos a derechas
        analogWrite(izqB, 0);
        analogWrite(derA, vel);
        analogWrite(izqA, 0);
        delay(600);
      }
      digitalWrite(13, LOW);
      servo1.write(90);                // Gira el servo al frente
    }

    else {                            // Si no hay obstaculos se desplaza al frente
      analogWrite(derB, 0);
      analogWrite(izqB, 0);
      analogWrite(derA, vel);
      analogWrite(izqA, vel);
    }
  }
  

Saludod:
E.Gonzalez.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.