En la entrada anterior expliqué cómo conectar el Módulo Bluetooth HC-06 al arduino y enviar mensajes desde el celular a través de una app llamada Bluetooth SPP.
Hasta ahora lo utilizamos en modo “terminal”. Ya podemos pasar al modo “Control” de la aplicación (en el menú de hamburguesa – las tres rayitas)
Comenzamos investigando qué recibe el Arduino cuando tocamos cada tecla. Para ello, abrimos el monitor serie y pulsamos los botones. Recibe una A, una B, una C, una D y cuando soltamos, una Z.
Por lo tanto, modificamos el programa para que nos avise qué recibe cada vez que tocamos una flecha. Vamos a pedirle que cuando se oprime el botón hacia arriba nos devuelva “Arriba”, y eso mismo con todos los botones:
void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { char dato=Serial.read(); Serial.print("Dato recibido: "); Serial.println(dato); if (dato=='B') { Serial.println("Abajo"); } if (dato=='A') { Serial.println("Arriba"); } if (dato=='C') { Serial.println("Izquierda"); } if (dato=='D') { Serial.println("Derecha"); } } }
Y el resultado, al tocar las flechas:
Conectando el Servo Motor Tower Pro Micro Servo 9g
Si nunca utilizaste el servo motor, comenzá por aprender a utilizarlo, por ejemplo, con esta entrada: Servo motor 9g Tower Pro
Ahora vamos a hacer esas mismas conexiones, repasando:
- cable anaranjado: va a un pin de tipo PWD (los de la tilde de la eñe)
- cable color marrón: GND (tierra)
- cable color rojo: +5v
El problema es que tenemos el pin de +5v ocupado por el módulo HC-06, así que vamos a tener que conectar el módulo de Bluetooth y el Servo a una breadboard / placa de pruebas, y de allí sacar un cable para el pin de Arduino llamado +5v
Ahora le agregamos unas líneas a nuestro programa, para que se mueva el servo motor al presionar los botones:
#include <Servo.h> Servo myservo; void setup() { Serial.begin(9600); myservo.attach(9); } void loop() { if (Serial.available()) { char dato=Serial.read(); Serial.print("Dato recibido: "); Serial.println(dato); if (dato=='B') { Serial.println("Abajo"); myservo.write(90); delay(15); } if (dato=='A') { Serial.println("Arriba"); myservo.write(0); delay(15); } if (dato=='C') { Serial.println("Izquierda"); myservo.write(180); } if (dato=='D') { Serial.println("Derecha"); myservo.write(45); } } }
Como el servo no gira 360 grados, los botones no lo mandan exactamente arriba, abajo, derecha, izquierda. Ya mejoraremos eso en otra entrada.