Saltar la navegación

Dos motores servos controlados por serial ×

/*
Enviaremos un número entero por Serial. Arduino lo leerá con la instrucción Serial.parseInt(). Recordad que a diferencia de Serial.read(), que sólo lee carácteres, Serial.parseInt() sirve para leer un entero directamente por Serial.
En realidad, este entero será un código. Llevará el número de servo que queremos mover y su posición.
Por ejemplo,
si le enviamos el 902, le estamos diciendo:
posición 90 a servo2
Si enviamos el 1801,
estamos moviendo el motor 1 a 180º.
Si enviamos 712,
estamos moviendo el motor 2 71º
Explicación código:
Separamos el número en dos partes con la operación módulo. Es como si lo recortásemos con unas tijeras. Si tenemos 902, el residuo módulo 10 será 2 (902%10 = 2) , que es el número del motor.
*/
#include<Servo.h>

//Creamos los objetos servo
Servo myservo1;
Servo myservo2;

int enviado; //Aqui enviamos el numero completo
int num; //Numero del servo
int posicion; //Posicion del servo

void setup()
{
//Inicializamos los Servos
myservo1.attach(9);
myservo2.attach(10);

//Inicializamos la comunicacion por Serial
Serial.begin(9600);
}

void loop()
{
if(Serial.available() >= 1)
{
/*
1- Leer un numero entero por serial
2- Calculamos su modulo (resto de la división) al dividir por 10 (sera el numero del motor)
3-Asignamos este valor a num
4- Dividir el entero inicial por 10
5- El resultado entero de la división, sera la posicion del motor
6-Asignamos este valor a posicion
*/
enviado = Serial.parseInt();
num = enviado%10;
enviado = enviado/10;
posicion = enviado;

//Hora de mover los servos!
if(num == 1)
{
myservo1.write(posicion);
}
else if(num == 2)
{
myservo2.write(posicion);
}
}

}