// se incluye las librerias software serial, servo y se definenen nombres para los pines usados
#include <SoftwareSerial.h>
#include <Servo.h>
#define RxD 10
#define TxD 11
#define LED1 6
#define LED2 7
SoftwareSerial BTSerial(RxD, TxD);
// inicializacion de las variables usadas
char letra; //caracter recibido desde android
int valor_1; //valor eje x
int valor_2; //valor eje y
int valor_3; //valor eje z
int valor_4; //valor boton oprimido
Servo myservo_izq; // se define clase para el servo izquierda
Servo myservo_der; // se define clase para el servo derecha
int s_izq; //valor enviado al servo
int s_der; //valor enviado al servo
void setup()
{
myservo_izq.attach(3); //se identifica el pin del servo izquierda
myservo_der.attach(2); //se identifica el pin del servo derecha
//se definen los pines de los leds como salidas
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
// se inicia la comunicacion serial Software con el modulo
BTSerial.flush(); //se limpia el buffer
delay(500); //retardo
BTSerial.begin(38400); //se inicia la comunicacion serial con el framerate
//configurado en el modulo
Serial.begin(9600); //se inicia la comunicacion serial para ver el dato
//recibido
delay(100); //retardo
}
void loop()
{
if (BTSerial.available()){ // se ejecuta este bloque si hay un dato existente en el buffer
// se lee el caracter inmediatamente disponible
letra = BTSerial.read();
// aqui se condiciona el caracter leido
if (letra == \'b\'){ //si el caracter es "b"
valor_1 = BTSerial.parseInt(); //se guarda el valor numerico siguiente
//en valor_1
//Serial.println(valor_1);
}
if (letra == \'x\'){ //si el caracter es "x"
valor_2 = BTSerial.parseInt(); //se guarda el valor numerico siguiente
//en valor_2
//Serial.println(valor_2);
}
if (letra == \'y\'){ //si el caracter es "y"
valor_3 = BTSerial.parseInt(); //se guarda el valor numerico siguiente
//en valor_3
//Serial.println(valor_3);
}
if (letra == \'z\'){ //si el caracter es "z"
valor_4 = BTSerial.parseInt(); //se guarda el valor numerico siguiente
//en valor_4
//Serial.println(valor_4);
}
}
if((valor_4==0)&&(valor_3==0)){ //Condicion si el dato Y y Z es 0
//los servos se encuentran en posicion reposo (90)
s_izq= 90;
s_der= 90;
}
else{ //si Y y Z son diferentes de cero se modifica la velocidad
//de los servos sumando el valor recibido de cada eje
s_izq= (valor_4+valor_3) + 90; //se suman los valores de Y y Z a 90 para definir la velocidad
s_der= (-valor_4+valor_3) + 90; //se resta el valor de Z y se suma el Y porque esta invertido
}
myservo_izq.write(s_izq); // se envia el dato al servo
myservo_der.write(s_der); // se envia el dato al servo
if(valor_1 == 6){ // se determina el numero de "b" es START
digitalWrite(LED1, HIGH); // se encienden los leds
digitalWrite(LED2, HIGH);
delay(50);
}
if (valor_1==5){ // se deremina el numero de "b" es SELECT
digitalWrite(LED1, LOW); // se apagan los leds
digitalWrite(LED2, LOW);
delay(50);
}
//Serial.println(valor_1);
//Serial.println(digitalRead(LED1));
}