Taller Introducción a la Ingeniería Eléctrica Robot y comunicaciones basados en Microcontrolador Arduino Instituto de Ingeniería Eléctrica Taller 3: Aspectos básicos de comunicación. 18 de marzo de 2016 IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 1/1 Introducción ¾Para qué queremos comunicación? Necesidad de compartir información con otro/s dispositivo. Comunicación con sistema tipo Arduino: Sensar eventos. Mostrar información al usuario, debug. Compartir información con otra parte del sistema. Trasmisión de datos serie y paralelo: IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 2/1 Introducción ¾Para qué queremos comunicación? Necesidad de compartir información con otro/s dispositivo. Comunicación con sistema tipo Arduino: Sensar eventos. Mostrar información al usuario, debug. Compartir información con otra parte del sistema. Trasmisión de datos serie y paralelo: IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 2/1 Introducción ¾Para qué queremos comunicación? Necesidad de compartir información con otro/s dispositivo. Comunicación con sistema tipo Arduino: Sensar eventos. Mostrar información al usuario, debug. Compartir información con otra parte del sistema. Trasmisión de datos serie y paralelo: IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 2/1 Introducción ¾Para qué queremos comunicación? Necesidad de compartir información con otro/s dispositivo. Comunicación con sistema tipo Arduino: Sensar eventos. Mostrar información al usuario, debug. Compartir información con otra parte del sistema. Trasmisión de datos serie y paralelo: IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 2/1 Introducción ¾Para qué queremos comunicación? Necesidad de compartir información con otro/s dispositivo. Comunicación con sistema tipo Arduino: Sensar eventos. Mostrar información al usuario, debug. Compartir información con otra parte del sistema. Trasmisión de datos serie y paralelo: IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 2/1 Comunicación serial Arduino Todos los Arduinos tienen por lo menos un puerto serie inconsciente (UART o USART). En pines 0 y 1 o también en USB. IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 3/1 Comunicación serial Arduino Todos los Arduinos tienen por lo menos un puerto serie inconsciente (UART o USART). En pines 0 y 1 o también en USB. IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 3/1 Comunicación serial asíncrona IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 4/1 Librería Serial Funciones predenidas para manejo de puerto serial: begin() available() read() write() print() / println() ush() IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 5/1 Ejemplo librería Serial IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 6/1 Ejemplo 2 librería Serial IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 7/1 Caracteres Lenguaje de máquina es con bits: PCs no manejan caracteres! Solución: codicar caracteres numéricamente. IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 8/1 Caracteres Lenguaje de máquina es con bits: PCs no manejan caracteres! Solución: codicar caracteres numéricamente. IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 8/1 Tabla ASCII IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 9/1 Otro ejemplo Serial: ASCIITable IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 10 / 1 Ejercicio comunicación Serial ¾Qué otro tipo de alfabeto para comunicación serial conoce? IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 11 / 1 Ejercicio comunicación Serial ¾Qué otro tipo de alfabeto para comunicación serial conoce? IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 11 / 1 Ejercicio1 Completar el alfabeto Morse con el código para las vocales. void MorseDash() MorseDot(). Escribir la función función Utilizando la función función boozer() tone() tomando como referencia la de los ejemplos de Arduino, escribir una que prenda y apague un piezo eléctrico. Utilizaremos ésto para trasmitir el mensaje Morse en forma sonora. Recibir un caracter desde el puerto serial del arduino y traducirlo a código Morse, mostrarlo en forma lumínica y sonora. IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 12 / 1 Ejercicio comunicación código Morse IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 13 / 1 Sentencias de Selección Hasta ahora conocemos if. ¾Qué sucede si tenemos varias opciones? Usaremos la sentencia de selección switch-case. switch-case switch ( expresion ) case 1: { sentencias1 ; break ; case 2: sentencias2 ; break ; case n: sentenciasN ; break ; default : sentencias_default ; break ; } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 14 / 1 Sentencias de Selección Hasta ahora conocemos if. ¾Qué sucede si tenemos varias opciones? Usaremos la sentencia de selección switch-case. switch-case switch ( expresion ) case 1: { sentencias1 ; break ; case 2: sentencias2 ; break ; case n: sentenciasN ; break ; default : sentencias_default ; break ; } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 14 / 1 Sentencias de Selección Hasta ahora conocemos if. ¾Qué sucede si tenemos varias opciones? Usaremos la sentencia de selección switch-case. switch-case switch ( expresion ) case 1: { sentencias1 ; break ; case 2: sentencias2 ; break ; case n: sentenciasN ; break ; default : sentencias_default ; break ; } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 14 / 1 Repaso: Funciones ¾Qué es una función? Una función es un conjunto de declaraciones, deniciones, expresiones y sentencias que realizan una tarea especíca. El formato general de una función es: nombreFuncion variables locales código de la función retorno de valor TipoDeRetorno ( listaParámetros ) { } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 15 / 1 Funciones Un ejemplo simple float encontrar_promedio ( i n t float num1 , int num2 ) { promedio ; p r o m e d i o = ( num1 + num2 ) / 2.0; r e t u r n ( promedio ) ; } // D e s d e float otro programa o funcion k = encontrar_promedio IIE (TallerIne) (4 , se llama a la función 5); Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 16 / 1 ARRAYS Para Arduino, es una estructura de datos que permite tener un conjunto de variables asociadas que se pueden referenciar por su posición. La estructura arrays o arreglos unidimensionales son una secuencia de valores del mismo tipo. Los elementos del array se almacenan en localidades contiguas de memoria según el orden del índice. ¾Cómo inicializo una matriz? Denir Array i n t myArray [ 2 ] = { 2 , 3 , 4 , 1 0 , 7 3 } ; // f i n de l a d e c l a r a c i o n d e l a r r a y IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 17 / 1 ARRAYS Para guardar, leer, o recorrer los elementos en un arreglo es muy frecuente utilizar la sentencia for. Sentencia for i n t myArray [ 5 0 ] ; void setup (){ S e r i a l . begin (9600); } void loop (){ int i ; f o r ( i =0; i <6; i ++) { myArray [ i ] = i ∗ 1 0 ; // a s i g n a 1 ∗ 10 a l e l e m e n t o en l a p o s i c i ó n i } } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 18 / 1 ARRAYS ¾Cómo hago para mostrar el array en pantalla? El siguiente programa muestra en el PC los valores de un array de 5 elementos . Recorro y muestro en pantalla myArray i n t myArray [ 5 ] = { 2 , 3 , 4 , 1 0 , 7 3 } ; void setup (){ S e r i a l . begin (9600); } void loop (){ int i ; f o r ( i =0; i <6; i ++) { S e r i a l . p r i n t ("\ t " ) ; S e r i a l . p r i n t ( myArray [ i ] ) ; S e r i a l . p r i n t ("\ t " ) ; / i n t r o d u c e un t a b u l a d o r e n t r e l a s c o l u m n a s Serial . println (); } delay (1000); } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 19 / 1 ARRAYS ¾Cómo hago para mostrar el array en pantalla? El siguiente programa muestra en el PC los valores de un array de 5 elementos . Recorro y muestro en pantalla myArray i n t myArray [ 5 ] = { 2 , 3 , 4 , 1 0 , 7 3 } ; void setup (){ S e r i a l . begin (9600); } void loop (){ int i ; f o r ( i =0; i <6; i ++) { S e r i a l . p r i n t ("\ t " ) ; S e r i a l . p r i n t ( myArray [ i ] ) ; S e r i a l . p r i n t ("\ t " ) ; / i n t r o d u c e un t a b u l a d o r e n t r e l a s c o l u m n a s Serial . println (); } delay (1000); } IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 19 / 1 STRING Es una estructura de datos que sirve para almacenar cadenas de texto, es fundamental a la hora de enviar texto por el puerto serie. ¾Cómo inicializo un string? Recorro y muestro en pantalla myArray char Str1 [ 1 5 ] ; char Str2 [ 8 ] = { 'a ' , ' r ' , 'd ' , 'u ' , ' i ' , 'n ' , 'o ' } ; char Str3 [ 8 ] = { 'a ' , ' r ' , 'd ' , 'u ' , ' i ' , 'n ' , 'o ' , '\0 '}; char Str4 [ ] = " arduino "; char Str5 [ 8 ] = " arduino "; char Str6 [ 1 5 ] = " arduino "; S t r i n g s t r 7 = S t r i n g ( s t r 4 + " w i t h more " ) ; / / c o n c a t e n a 2 s t r i n g IIE (TallerIne) Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 20 / 1 Ejercicio 2 y 3 Ejercicio 2 Estudiar y entender la función void recibirMensaje(). Completar el código para que reciba un string por el serial del PC y recorriendo un array de tipo char pueda motrarlo en Morse a través del Led y del parlante. Ejercicio3 Conectar dos Arduinos por su puerto serie. Programar uno como trasmisor el cual enviará un mensaje (tipo string ) al receptor, éste último lo mostrará en Morse con el Led y el Parlante. array charMorse(). Escribir el código que recorra el uno con la función IIE (TallerIne) de caracteres y los muestre de a Taller Introducción a la Ing. Eléctrica 18 de marzo de 2016 21 / 1