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.

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.
189
vistas
0
respuestas
1
seguidores
vista previa (en vivo)
introduzca al menos un 10 caracteres
Advertencia: Mencionaste a %MENTIONS%, pero ellos no pueden ver el mensaje y no serán notificados
Guardando...
Guardado
Todos los posteos de este tema serán borrados ?
Borrador pendiente ... Click para continuar editando
Descartar borrador