Código ASCII
La comunicación a través de cualquier puerto serie es en código binario y se mandan en grupos de 8 bits (byte). Puesto que el humano entiende caracteres alfanuméricos, codificamos los caracteres en binario según el código ASCII.
Práctica: Generar con Arduino una tabla de caracteres y sus valores ASCII en decimal, hexadecimal, octal y binario. http://arduino.cc/en/Tutorial/ASCIITable
Caracteres ASCII: http://es.wikipedia.org/wiki/ASCII y http://www.asciitable.com/
Fijaros en el carácter ÿ y recordad cuál es su valor en binario.
Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio12-ASCII
Otro ejemplo: http://diymakers.es/usando-el-puerto-serie-del-arduino/
Leer Números por Puerto Serie
Ver, entender y ejecutar este ejemplo https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio10-LeerStringSerie donde cada vez que reinicio Arduino espero a que se introduzca una cadena de caracteres y luego la muestro por pantalla. Con la opción DEBUG = 1, se muestra paso a paso cómo lee del puerto serie Arduino.
Basándonos en este ejemplo hacer una nueva versión donde me pide un número al iniciar Arduino y lo paso por el puerto serie. Luego multiplicar por 15 ese número y sacar por el puerto serie el resultado. En caso que lo introducido no sea un número sacar por pantalla el error.
Lo que hacemos es coger una cadena de texto que representa un número y lo convertimos a un número para poder operar con él. Esto lo aplicaremos en varios ejemplos para manejar por ejemplo la luminosidad de un led con un valor que paso por el puerto serie.
Recordar que es necesario usar la función toInt(): http://arduino.cc/en/Reference/StringToInt
Coche Fantástico Serial
Sobre el ejemplo del coche fantástico mejorado https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio09-CocheFantasticoMejorado, modificar el código para que el valor de la velocidad del efecto de los leds se pase por puerto serie y Arduino lo recoja y lo modifique para cambiar la velocidad a la que lucen los leds.
Esquema de conexión:
Chat Serie
Para comunicar dos arduinos por el puerto serie y ver por pantalla lo que escribe desde el Arduino remoto, necesitamos dos puertos serie en cada uno de los Arduinos, uno para comunicar Arduino con el monitor serie (HW Serial) y otro para comunicar con el otro Arduino (SW Serial).
Hacer un programa que comunique por puerto serie un arduino UNO (usar la librería software serial) con otro Arduino UNO y saque por pantalla (puerto serie HW del USB) lo recibido por el puerto serie SW y mande por el puerto serie SW todo aquello que mandes desde el terminal. Es decir, hacer un chat punto a punto entre dos Arduinos.
Esquema de conexión:
Funciones y librerías a usar:
- Librería softwareSerial: http://arduino.cc/en/Reference/SoftwareSerial
- Funciones software serial: softwareSerial(), begin(), available(), print(), listen(), write(),
- Solo puede recibir por un puerto softwareSerial simultáneamente, no todos los pines soportan interrupciones de cambio. Ver limitaciones en https://www.arduino.cc/en/Reference/SoftwareSerial
- Otra librería softwareSerial alternativa a la incluida en el core de Arduino: http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html últil cuando hay varios flujos de datos simultaneos.
Preguntas:
- Leer el código de la librería Softwareserial ¿Que tamaño de buffer tiene?. La librería está en la ruta “C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries”
Solución: https://github.com/jecrespo/aprendiendoarduino-Curso_Arduino_2017/tree/master/Ejercicio15-ChatSerie
Chat Serie Avanzado
Hacer una versión mejorada del anterior chat, de forma que al escribir en el monitor serie la cadena “repite”, Arduino pregunte cuantas veces y mandar por el chat serie la cadena “repite” tantas veces como se haya indicado. En este caso la estrategia es diferente, en lugar de leer un carácter del buffer en cada loop, en este caso hay que leer todo el buffer en el mismo loop para analizar lo que he recibido. Otra estrategia sería leer en cada loop línea por línea.
Comprobar las luces de Tx, Rx cada vez que se manda o recibe datos. Se podría hacer lo mismo con unos LEDs en los pines 10 y 11, encendiendo los leds cada vez que hagamos un write() o un read() en el puerto serie software y veríamos si se están mandando datos o no por la comunicación serie entre los dos Arduinos.
Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio22-ChatSerieMejorado
Pingback: Saber Más Programación | Aprendiendo Arduino
Pingback: Saber Más Avanzado 2017 | Aprendiendo Arduino
Pingback: Saber Más Iniciación Arduino 2017 | Aprendiendo Arduino
Pingback: Saber Más Arduino Empresas | Aprendiendo Arduino
Pingback: Saber Más Iniciación Arduino 2018 | Aprendiendo Arduino
Pingback: Saber Más Iniciación Arduino 2019 | Aprendiendo Arduino
Pingback: Saber Más Gestión de Proyectos con Arduino | Aprendiendo Arduino