Bluetooth IV El programa en mBlock
TeComo recomendamosya estashemos páginas:
sotros vamos a utilizar la APP BlueControl:

Problema número 1: ocupamosbloquea el puertocable serie
USB
Si
PASO has1 leído Cómo se comunica con un Arduino habrás visto que ocupamos LOS MISMOS PINES D0 Y D1 QUE UTILIZAINSTALAMOS EL DISPOSITIVO ARDUINO PARA COMUNICARSE POR EL PUERTO SERIE CON EL ORDENADOR.
Esto crea un problema: No se puede tener conectado el HC-06 mientras nos comunicamos el ordenador con el Arduino.
Solución: Pues quítalo,IDE y luego cuando acabes de descargar el programa en el Arduino, pues lo pones.
Bah!! ¿sólo era eso? pues no, que nos ocupe el puerto serie nos fastidia: ¿puedes interaccionar con el Sprite? por ejemplo ¿puedes hacer que el oso panda de mBlock se mueva según el mando de BlueControl?...NO
Problema 2 la velocidad del puerto es elevada
Al programar con mBlock fija la velocidad del puerto serie a 115200 baudios, y nuestro HC-06 soporta 9600
Solución: Bajarlo manualmente, un rollo, tenemos que salir de mBlock, editarlo en Arduino IDE .... esto se ve mejor en el ejemplo siguiente.
Reto: Encendido y apagado de LEDs con el móvil
Vamos a ejecutarDispositivos - Añadir - Arduino UNO (no vale el Echidna ni el Arduino nano)
PASO 2 INSTALAMOS LA EXTENSIÓN BLUETOOTH SERIAL
Hay muchas extensiones que trabajan el Bluetooth con Arduino (hay mucha basura) hemos elegido este pequeñopues programa,es una extensión sencilla, en castellano y que alenvía apretarcomo recibe por el botónBluetooth
PASO 3 PROGRAMA
Con la extensión instalada y el dispositivo ya podemos empezar a programar
ENUNCIADO Vamos a realizar un programa que envíe y reciba datos desde la APP del móvil al Echidna
- Si envío una R se enciende el Rojo
- Si envío una A se enciende el Amarillo
- Si envío una L que me diga el nivel de
arribaLuz que hay, 10 lecturas para ver cómo cambia
SOLUCIÓN

El programa lo puedes descargar aquí https://planet.mblock.cc/project/6844489
- Utilizamos los pines del Arduino (busca instrucciones azules Pin) el led rojo está en D13 y en naranja en el 12 de momento empezamos poniéndolos apagados
- PONEMOS LA VELOCIDAD DE BLUETOOTH A 9600 HAY QUE BAJARLO SINO NO FUNCIONA
- Y ponemos Rx que es D0 y Tx es D1 como hemos visto anteriormente
- El programa empieza con el clásico bucle y pregunta si se
enciendenhan recibido datos - Si se han recibido datos pues entonces lo almacena en una variable interna llamada "Letra"
- Si Letra = R entonces se enciende el led Rojo
- Si Letra = A entonces se enciende el led Amarillo
- Si Letra = L entonces es que preguntamos qué nivel hay de Luz
- Entramos en un bucle de 10 veces tal y como dice el enunciado
- Escribe en la APP el valor de la luz medida en el sensor LDR que está en el A5
- OJO HAY QUE MAPEARLO (ya hemos visto qué significa esto) y la instrucción de mapear está en violeta en Datos
CUÁNTO HAY QUE MAPEARLO pues el LDR según www.echidna.es va desde 1 a 900 y Bluetooth solo lee un carácter en ASCII luego convertimos el valor de A5 (1-900) a un valor ASCII que si vemos la página, lo hacemos para los ledsvalores de los caracteres 0 a 9 y alasí apretarnos elda una lectura de abajola secantidad apagan:de luz entre 0 y 9
| VALOR ASCII | CARACTER |
| 48 | 0 |
| 49 | 1 |
| 50 | 2 |
| 51 | 3 |
| 52 | 4 |
| 53 | 5 |
| 54 | 6 |
| 55 | 7 |
| 56 | 8 |
| 57 | 9 |
Resultado
SoluciónOtras APPs


PrimeroHay hayotras apps como el Arduino Bluetooth Control que vincularpermite elponer móvilflechas, concontrol lade voz... pero no permite envío de Echidna a APPSegundo hay que subir el programa solucionando los problemas anterioresMejor verlo con esta presentación:
O sea, ya podemos jugar con el móvil y con nuestro Echidna !!!
Por ejemplo..Incluso se podría hacer un coche teledirigido, el programa lo tienes en el repositorio: https://github.com/JavierQuintana/Echidna y el vídeo en el muro
// generated by mBlock5 for <your product>
// codes make you happy
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
pinMode(13,OUTPUT);
Serial.begin(9600);
digitalWrite(13,0);
while(1) {
if(Serial.available() > 0){
if(Serial.read() == 'a'){
digitalWrite(13,1);
}else{
digitalWrite(13,0);
}
}
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}

