Debido a la huelga he tenido un hueco, he escrito el código de abajo para el receptor
El emisor tendrá que enviar algo como:
Serial.print('/')//El byte de incio de la trama
Serial.print(1)//el servo a controlar
Serial.print(150)//el angulo del servo
Y este el codigo del receptor:
/*! \mainpage Mountain_Board Index Page
*
* \section intro_sec Descripcion
*
Mountain_Board_rx.ino v1.0
\n Leemos el puerto Serie y esperamos por 3 bytes. Comprobamos si el primer byte es el "Byte_Inicio" si asi fuese almacenamos los dos siguientes bytes como
"servo" y "pos" usando como intermediario el array "userInput[2]".
\n\n eg comando para mover servo1 180 grados == /1180.
\n eg comando para mover servo2 5 grados == /25.
*/
/** Incluimos la libreria <Servo.h>. */
#include <Servo.h>
/**create servo object to control a servo*/
Servo servo1;
/**create servo object to control a servo*/
Servo servo2;
/*--Variables y constantes para manejar los bytes que recibimos---*/
/**Valor en decimal de nuestro Byte_Inicio*/
#define Byte_Incio 47 //Valor en decimal de nuestro Byte_Inicio(47 = '/')
/**Almacena primer Byte*/
int first_Byte;
/**Almacena el servo*/
int servo;
/**Almacena la posicion*/
int pos;
void setup()
{
Serial.begin(9600);
servo1.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop()
{
Leer_Serial();
Switch_Servo();
//DEBUG();
delay(10);//10-20ms
}
/** \brief Leer datos recibidos del Serial */
void Leer_Serial(){
/**
\details Esperamos por 3 bytes y comprueba si el primer byte es el
Byte_Inicio, luego almacena los dos siguientes bytes.
*/
if (Serial.available() > 2)//Esperar a tener por lo menos 3 bytes
{
// Leer el primer byte
first_Byte = Serial.read();
// Si es realmente el first_Byte (47) ... '/'
if (first_Byte == Byte_Incio)
{
int i;
int userInput[2];// ... entonces almacenar los 2 siguientes bytes
for (i=0;i<2;i++) {
userInput[i] = Serial.read();
}
// Primer byte = que servo a mover
servo = userInput[0];
// Segundo byte = a que posicion
pos = userInput[1];
}
}
}
/** \brief Para manejar mas de un servo si fuese necesario*/
void Switch_Servo(){
/**
\details Para manejar mas de un servo si fuese necesario.
\n Escoge que servo mover segun lo recibido en leer_serial().
*/
switch (servo) {
case 1:
servo1.write(pos); // mover servo1 a 'pos'
break;
case 2:
servo2.write(pos);
break;
default:
break;
}
}
/**\brief DEBUGGING.....*/
void DEBUG(){
Serial.print(first_Byte);//DEBUG
Serial.print(servo);//DEBUG
Serial.print(pos);//DEBUG
}
Con esto ya puedes adaptar el código a tus necesidades.