Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
errores al compilar el sketch
#1
buenos dias,
estoy intentando hacer un programilla con arduino y a la hora de compilar me da unos cuantos errores.

adjunto código a ver si alguien me puede echar una mano.
se trata de recibir datos por el puerto serie, que son enviados a través de una app, una vez recibidos actualiza la velocidad de unos motores y unos servos.

adjunto código:

// simulación roboping con sliders v1_1
 # include <Servo.h>
 # include <SoftwareSerial.h> // libreria para poder utilzar otros pins de comunicación
 

 
SoftwareSerial BT(7, 8); // RX, TX
 int motor1 =3;    //pin motor inferior
 int motor2 =5;    //pin motor superior izquierda
 int motor3 =6;    //pin motor superior derecha
 int motor_elevador =11;    //pin motor elevador
 
 Servo servo_h;      // crea el objeto servo horizontal
 Servo servo_v;      // crea el objeto servo vertical
 
 int pos_horizontal = 0; //posición inicial del servo horizontal
 int pos_vertical = 0; //posición inicial del servo vertical

void setup()
 { 
  BT.begin(9600);  // velocidad del puerto del módulo bluetooth
  
  pinMode (motor1,OUTPUT); // declaramos  los motores como salidas
  pinMode (motor2,OUTPUT); // declaramos los motores como salidas
  pinMode (motor3,OUTPUT); // declaramos  los motores como salidas
  pinMode (motor_elevador,OUTPUT); // declaramos  los motores como salidas
  
  servo_h.attach (9); // vincula el servo horizontal al pin 9
  servo_v.attach (10); // vincula el servo vertical al pin 9
  
 }

void loop()
 { 
 // cuando haya datos disponibles
 while (BT.available () > 0 )
 {
 int valor_servo_h = BT.parseInt();  //leemos el primer valor entero (servo horizontal) y lo almacenamos en la variable
 int valor_servo_v = BT.parseInt();  //leemos el segundo valor entero (servo vertical) y lo almacenamos en la variable
 int valor_motor3 = BT.parseInt();   //leemos el tercer valor entero (motor superior derecha) y lo almacenamos en la variable
 int valor_motor2 = BT.parseInt();   //leemos el cuarto valor entero (motor superior izquierda) y lo almacenamos en la variable
 int valor_motor1 = BT.parseInt();   //leemos el quinto valor entero (motor inferior) y lo almacenamos en la variable
 int valor_m_elevador = BT.parseInt();  //leemos el último valor entero (motor elevador) y lo almacenamos en la variable
 
 // cuando lea el carácter fin de línea ('\n') quiere de decir que ha finalizado el envío de los 6 valores
 if (BT.read() =='\n')
 { 
 //enviamos los valores recibidos de los sliders a los pines de los motores y servos 
 analogwrite (servo_h,valor_servo_h);
 analogwrite (servo_v,valor_servo_v);
 analogwrite (motor3,valor_motor3);
 analogwrite (motor2,valor_motor2);
 analogwrite (motor1,valor_motor1);
 analogwrite (motor_elevador,valor_m_elevador);
 }
 }
 delay (100);
 
 }
Citar
#2
Hola, prueba con esto que pongo más abajo, para próximas veces, incluye también qué errores te aparecen


He hecho varios cambios:

analogwrite => analogWrite (la W mayúscula, si no, me fallaba)
Luego, analogWrite necesita un pin, le estabas pasando un objeto tipo "servo", así que he creado dos nuevas variables servo_h_pin y servo_v_pin para poder pasárselas e inicializar los servos correctamente.

Con estos cambios , el programa compila, pero no lo he llegado a ejecutar


Código:
// simulación roboping con sliders v1_1
# include <Servo.h>
# include <SoftwareSerial.h> // libreria para poder utilzar otros pins de comunicación



SoftwareSerial BT(7, 8); // RX, TX
int motor1 =3;    //pin motor inferior
int motor2 =5;    //pin motor superior izquierda
int motor3 =6;    //pin motor superior derecha
int motor_elevador =11;    //pin motor elevador


///// HE AÑADIDO ESTAS DOS LINEAS
int servo_h_pin = 9;
int servo_v_pin = 10;

Servo servo_h;      // crea el objeto servo horizontal
Servo servo_v;      // crea el objeto servo vertical

int pos_horizontal = 0; //posición inicial del servo horizontal
int pos_vertical = 0; //posición inicial del servo vertical

void setup()
{
  BT.begin(9600);  // velocidad del puerto del módulo bluetooth
  
  pinMode (motor1,OUTPUT); // declaramos  los motores como salidas
  pinMode (motor2,OUTPUT); // declaramos los motores como salidas
  pinMode (motor3,OUTPUT); // declaramos  los motores como salidas
  pinMode (motor_elevador,OUTPUT); // declaramos  los motores como salidas
  


///////// HE CAMBIADO EL PIN POR LA VARIABLE
  servo_h.attach(servo_h_pin); // vincula el servo horizontal al pin 9
  servo_v.attach(servo_v_pin); // vincula el servo vertical al pin 9
  
}

void loop()
{
// cuando haya datos disponibles
while (BT.available () > 0 )
{
int valor_servo_h = BT.parseInt();  //leemos el primer valor entero (servo horizontal) y lo almacenamos en la variable
int valor_servo_v = BT.parseInt();  //leemos el segundo valor entero (servo vertical) y lo almacenamos en la variable
int valor_motor3 = BT.parseInt();   //leemos el tercer valor entero (motor superior derecha) y lo almacenamos en la variable
int valor_motor2 = BT.parseInt();   //leemos el cuarto valor entero (motor superior izquierda) y lo almacenamos en la variable
int valor_motor1 = BT.parseInt();   //leemos el quinto valor entero (motor inferior) y lo almacenamos en la variable
int valor_m_elevador = BT.parseInt();  //leemos el último valor entero (motor elevador) y lo almacenamos en la variable

// cuando lea el carácter fin de línea ('\n') quiere de decir que ha finalizado el envío de los 6 valores
if (BT.read() =='\n')
{
//enviamos los valores recibidos de los sliders a los pines de los motores y servos


////////// SERVO_H ERA UN "SERVO", PERO ANALOGWRITE NECESITA UN "PIN", CAMBIADAS DOS LINEAS AQUI
analogWrite(servo_h_pin,valor_servo_h);
analogWrite(servo_v_pin,valor_servo_v);


analogWrite(motor3,valor_motor3);
analogWrite(motor2,valor_motor2);
analogWrite(motor1,valor_motor1);
analogWrite(motor_elevador,valor_m_elevador);
}
}
delay (100);

}
Citar
#3
Ojo, los servo no funcionan con un analogWrite directo... el analogWrite lo que genera es una frecuencia pwm continua. Un servo necesita un pulso de entre 1ms y 2ms (dependiendo del modelo cambia) aproximadamente cada 20ms para saber su posición. Esto es de lo que se encarga la librería de servo.h y lo que logras declarando el objeto servo.

Esto es incorrecto:
Código:
////////// SERVO_H ERA UN "SERVO", PERO ANALOGWRITE NECESITA UN "PIN", CAMBIADAS DOS LINEAS AQUI
analogWrite(servo_h_pin,valor_servo_h);
analogWrite(servo_v_pin,valor_servo_v);


Esto seria lo adecuado:

Código:
servo_h.write(valor_servo_h);
servo_v.write(valor_servo_v);

El pin del servo ya lo configuraste al inicializar el objeto servo_h y servo_v, cuando utilizas el .write el objeto ya se encarga de enviarle la posición mandando ese pequeño pulso a intervalos regulares para que se mantenga la posición.
Citar
#4
gracias por la ayuda, al final compila bien ahora falta probarlo.

he hecho las modificaciones que habeís comentado y me continuaba dando errores.

me ha pasado una cosa muy rara, me daba errores como si no estuviese declarada la libreria servo ni la libreria softwareSerial, el programa lo hice en el bloc de notas, porque no tenia un ordenador con el IDE de arduino.
al final desde el IDE de arduino he importado estas dos librerias y ha compilado correctamente.
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  error compilar skecth homer32 5 3,657 30-08-2015, 04:07 PM
Último mensaje: homer32
  (CERRADO) sketch arduino pipemonotoya1999 2 762 23-06-2015, 03:16 PM
Último mensaje: ebludt
  Problemas para cargar el sketch Electromecánico 5 8,459 09-04-2015, 02:59 PM
Último mensaje: homer32
  [AYUDA] Recuperar sketch instalado Alcamprieto 4 2,886 03-02-2015, 10:42 AM
Último mensaje: furan
  problema al compilar con la libreria LiquidCrystal_I2C pedro 16 6,373 27-12-2013, 07:29 PM
Último mensaje: pedro