Buenas tardes roboseros.
He creado un programa que hace lo siguiente:
Lee dos parametros numericos por Serial.
El primer valor es el numero del servo y el segundo valor es el angulo.
Utilizo la instrucción switch/case para seleccionar el servo y default para aplicar el angulo a todos los servos.
El hardware es una placa MegaPi que tiene conectados 6 servos desde A6 hasta A11. En si funcionan bien todos los servos, pero hay algo en el programa que no me está haciendo lo que quiero corectamente.
Y es que a pesar de darle los parámetros desde el monitor serie del IDE de Arduino, mueve el servo indicado al angulo que quiero, pero a los pocos segundos indicado por "delay(100)" toma el valor de cero y me pone el servo en angulo 0.
Este es el programa:
#include "MeMegaPi.h"
#include <Arduino.h>
#include <SoftwareSerial.h>
#include <Wire.h>
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
Servo servo6;
int angulo = 90;
int numeroservo;
int vectorDatos[2];
int i;
//============================
void setup() {
Serial.begin(9600);
servo1.attach(60); //60 AL 69 SON A6 AL A15
servo2.attach(61);
servo3.attach(62);
servo4.attach(63);
servo5.attach(64);
servo6.attach(65);
//
servo1.write(angulo);
servo2.write(angulo);
servo3.write(angulo);
servo4.write(angulo);
servo5.write(angulo);
servo6.write(angulo);
//
delay(1000);
}
void loop()
{
if(Serial.available() > 1)
{
for(i = 0; i < 2; i ++) {
vectorDatos[i] = Serial.parseInt();
Serial.print(vectorDatos[i]);Serial.print(" ");
}
Serial.flush();
Serial.println(" ");
numeroservo=vectorDatos[0];
Serial.print(" Servo:");Serial.println(numeroservo);
angulo=vectorDatos[1];
Serial.print(" Angulo:");Serial.println(angulo);
switch (numeroservo) {
case 1:
servo1.write(angulo);
break;
case 2:
servo2.write(angulo);
break;
case 3:
servo3.write(angulo);
break;
case 4:
servo4.write(angulo);
break;
case 5:
servo5.write(angulo);
break;
case 6:
servo6.write(angulo);
break;
default:
servo1.write(90);
servo2.write(90);
servo3.write(90);
servo4.write(90);
servo5.write(90);
servo6.write(90);
break;
}
}
delay(100);
}
y esta es la salida de los print:
1 20 <-- servo 1 angulo 20
Servo:1
Angulo:20
0 0 <-- esto lo pone automaticamente,
Servo:0
Angulo:0
2 180 <-- servo 2 angulo 180
Servo:2
Angulo:180
0 0 <-- y me vuelve a poner 0 0 a pesar de que yo no los paso por el monitor serial.
Servo:0
Angulo:0
3 80 <-- servo 3 angulo 80
Servo:3
Angulo:80
0 0 <--------- y otra vez el mismo prpoblema.
Servo:0
Angulo:0
No se que puede estar pasando, ¿alguien la habrá psado algo similar? ¿Alguna sugerencia?
Muchas gracias y buen descanso en estos días.