[AUDIO EN BLANCO] Hola, seguimos con la última clase de esta lección donde vamos a hablar un poco más de lo que son las entradas y las salidas digitales. Entonces hablemos de los puertos digitales, el microcontrolador como dijimos tiene entradas y salidas que llamamos puertos para comunicarse con el exterior. Generalmente estos puertos son digitales pero también algunos procesadores tienen puertos analógicos. Por ahora vamos a hablar de los puertos digitales, estos se pueden usar como ya mencionamos antes como entrada o como salida. Por supuesto que no vamos a usar ambas simultáneamente porque esto produciría un corto circuito, y ya vamos a hablar en el próximo módulo que no queremos corto circuitos. Entonces recordemos un poco ¿qué es una señal digital? Una señal digital es una señal que solamente toma dos valores bajo o alto y este valor bajo o alto que llamamos cero o uno lógico, representa un voltaje que está en un rango, el valor alto está en un rango de voltaje y el valor bajo en otro rango de voltaje. En los microcontroladores que usamos nosotros, este rango de voltaje es cero en torno cero y esto es cercano a cinco voltios y los valores intermedios son invarios. Por lo tanto, yo solo quiero que señal digital sea bajo, alto y esté el menor tiempo posible en los flancos. Entonces el microcontrolador tiene entradas que son digitales, puede hacer algún tipo de procesamiento y producir salidas y estas como decía están sujetas a este riel de alimentación que en el caso de los Arduinos, son cinco voltios. Entonces esto una entrada y una salida en general funcionan más o menos así, estos son esquemáticos muy simplificados pero sirven para entender el concepto. Entonces cuando yo tengo una salida digital lo que estoy haciendo es conectar esta salida a cinco volt cuando tengo uno o a cero volt cuando tengo un cero. Así de sencillo y la entrada digital podemos decir que es un puerto que está de una forma mirando, mira este valor y si está cercano a cinco volts guarda un uno y si está cercano a cero volt guarda un cero. ¿Cómo hace esto? No es iii que lo entendamos pero si sabemos que esto va a estar siempre mirando el valor de la entrada que yo puedo usar esa función cuando la necesite. Entonces veamos un poco más en detalle las funciones para manejar la entrada y salida, que ya hablamos algo de eso en las clases anteriores. Primero tenemos la función pin mode, que como vimos yo le digo un número de pin y el modo en el que quiero que funcione ese pin. Inicialmente hablamos de dos modos que son input para usarlo como entrada, output para usarlo como salida, que ahora entendemos un poco más qué significa eso y además hay un modo adicional que puede servir, pueden verlo en algún código, no vamos a entrar mucho en detalle que es el módulo pull up, que es básicamente que utiliza un resistor conectado a vdd. ¿Para qué se hace eso? Para que igual que hicimos con el botón, para que cuando no haya nada conectado, este nodo inmediatamente quede en un uno lógico. Ahora vamos a hablar de la función digital write que ya la mencionamos anteriormente y ya sabemos que me sirve para decirle a un pin que previamente estaba configurado como salida, si yo quiero tener un valor uno lógico o un valor cero lógico. ¿Y esto cómo funciona? Si yo tengo un cero lógico estoy conectando mi salida a tierra, si tengo un uno lógico estoy conectando mi salida a VDD. Y es importante recordar que esto solo puede entregar o recibir hasta 40 miliamperes, ¿por qué entregar o recibir? Porque si está conectado como uno a lógico a VDD, la corriente va a ir en esta dirección y mi controlador está entregando corriente, si está conectado a tierra la corriente va a ir en esta dirección y está recibiendo corriente. En cualquiera de los dos casos, esto no debe exceder los 40 miliamperes y hay que tener las precauciones necesarias con eso. Y por último esta función que mencionábamos en un ejemplo, me sirve para ver el valor de la señal en la entrada, entonces es tan sencillo como lo hablamos, aquí hay una señal idealmente digital, y yo en cualquier momento puedo decirle mira el valor actual y dime si es un uno lógico o un cero lógico y eso se hace simplemente diciéndole digital read y el número de pin que yo quiero leer. Por supuesto este pin tiene que estar configurado como entrada previamente, es decir input en pin mode. Ahora vamos a ver un tipo especial de comunicación digital, que es la comunicación serial. La comunicación serial es un protocolo de comunicación digital muy usado en diferentes dispositivos, y la ventaja es que las tarjetas Arduino permiten usarlos en funciones sencillas. Y el software Arduino incluye un monitor serial que también permite realizar comunicaciones desde el computador. Por lo tanto desde la tarjeta lo puedo usarlo fácilmente, desde el computador puedo usarlo fácilmente entonces tengo el sistema completo de comunicación y yo puedo digamos conversar con el procesador con funciones muy sencillas. ¿Cómo se hace esto? Tenemos dos pines que son especiales que están dedicados a la comunicación serial. Pueden hacer otras cosas pero tienen la ventaja de que tienen el hardware necesario para realizar comunicación cero y el pin uno y por eso la placa de desarrollo tiene normalmente estos símbolos, que son los símbolos de la comunicación serial. En el módulo cuatro vamos a hablar un poco más en detalle de este protocolo, ahora solo vamos a ver lo necesario para usar este sistema de comunicación. Y en el software yo tengo un monitor serial que se activa con este botón. Entonces vamos a aprender a inicializar este protocolo de comunicación y a enviar datos desde el microcontrolador al computador. Más adelante en el módulo cuatro vamos a ver algo de recepción de datos pero por ahora solo vamos a mandar desde el microcontrolador al computador porque esto nos sirve mucho para saber lo que está pasando dentro del programa y lo vamos a usar bastante durante todo lo que queda de este módulo. Para esto necesitamos tres funciones, la primera se llama serial.begin y uno le entrega una tasa de datos, entonces qué hace esta función, esta función inicializa el protocolo serial si es que yo no he usado esta función las dos siguientes funciones no nos van a servir. Y ¿qué es la tasa de datos? La tasa de datos significa cuántos bits por segundo va a estar enviando el microcontrolador, y esta tasa de datos tiene que ser sabida tanto por el microcontrolador como por el monitor serial y ya vamos a ver cómo configurarla en el monitor serial. Lo típico es que uno use acá 9600 bit por segundo. La siguiente función es serial.print que envía el contenido entre comillas esto es un texto por el terminal. Así de sencillo, yo quiero enviar algo, solamente tengo que usar la función serial.print y el contenido. Si es yo quiero enviar texto escribo texto entre comillas, si es yo quiero enviar por ejemplo un valor, un nueve, puedo escribir directamente el número nueve. Ya veremos más sobre los tipos de variables que podemos usar en la próxima lección. Y por último está este comando que es muy similar que se llama serial.println ¿qué significa? Que envía el contenido que yo le doy pero además envía el comando de cambio de línea. Por lo tanto la próxima vez que envíe contenido, en vez de seguir escribiéndose en la misma línea se va a escribir en la línea siguiente. Ahora vamos a ver dos ejemplos de cómo usar la comunicación serial, el primer ejemplo es bastante sencillo, vamos a verlo paso por paso para tratar de entender qué es lo que está pasando. Primero en setup inicializamos una comunicación serial y ponemos aquí una tasa de datos de 9600. Después, aplicamos un delay de cinco segundos este delay no es necesario solamente nos sirve para tener tiempo de abrir el terminal serial, antes que empiece la comunicación y después enviamos la palabra hola, serial.print line hola, por lo tanto se va a enviar la palabra hola y además el comando del cambio de línea. Y después cada 500 milisegundos yo voy a escribir ha pasado, espero 500 milisegundos y escribo un segundo. Noten la diferencia que aquí uso print y aquí uso print line por tanto yo debería ver ha pasado, luego un segundo escrito en la misma línea y después un cambio de línea y vuelvo a ver ha pasado un segundo y así sucesivamente. Vamos a compilar el programa. Una vez que termina de cargarse abrimos el modelo serial y esperamos a que empiece a transmitir, por mientras podemos ver que está seteado para 9600 bau que significa 9600 bits por segundo entonces vemos que se imprime hola, y se imprime ha pasado un segundo todo en una misma línea porque esto lo escribimos con print, esto lo escribimos con print line y esto se va a repetir indefinidamente. Algunas otras cosas que podemos aprender del monitor serial es esta función de auto scroll que simplemente hace que cuando llegue nuevas líneas, si es necesario la pantalla baje y esta opción de cómo terminar la línea, donde se pueden usar algunos de estos comandos que veremos más en detalle cuando trabajemos más con la comunicación serial en el módulo cuatro. Ahora vamos a pasar al siguiente ejemplo, vamos a imprimir en la consola el estado de un botón, y esto como les decía nos sirve para ver qué está pasando internamente en el programa. Por ejemplo para saber si un botón está bien conectado, si efectivamente el programa lo está leyendo o lo que sea necesario. ¿Cómo lo vamos a hacer? Vamos a usar el mismo circuito del ejemplo anterior, tenemos un botón, que el botón está conectado en el pin ocho, tenemos el led porque podemos usarlo también en generar un led adicional no molesta. Entonces veamos cómo funciona esto, definimos la variable de botón al igual que el programa anterior, definimos el pin ocho como entrada, el pin 11 como salida, aquí tenemos el botón y en el pin 11 tenemos el led. Inicializamos la comunicación serial a 9600 bau y esperamos dos segundos para tener tiempo de abrir el modelo serial. Todo eso en setup, luego pasamos a loop. Y ¿qué vamos a hacer? En cada ciclo vamos a escribir la frase, el botón tiene valor y sin el comando de cambio de línea vamos a leer el valor del botón y vamos a imprimir el valor del botón. Por lo tanto, ¿qué deberíamos ver? Deberíamos ver el botón tiene valor cero o el botón tiene valor uno. Y finalmente solo para ver también lo que está pasando en el led, vamos a escribir este mismo valor en el led como lo hicimos en el ejemplo anterior y esperamos 500 milisegundos. Compilemos el programa. Ahora que el programa está cargado, abrimos el monitor serial y vamos a ver qué está pasando en el circuito. Primero, vemos que tenemos el mismo circuito que antes y no hemos usado estos pines RX y TX. ¿Por qué no los hemos usado? Simplemente porque estamos usando la comunicación serial por el computador que se hace a través del puerto usb, cuando nos comuniquemos con otro dispositivo vamos a usar estos puertos. Entonces, ¿qué es lo que nos está mostrando en este momento la consola? La consola nos muestra el botón tiene valor cero constamente porque no hemos apretado el botón, si apretamos el botón la consola va a mostrar el botón tiene valor uno y el led se prende. Como vemos esto puede no ser instantáneo porque tenemos muchos delay en nuestro código. Yo a veces puedo apretar el botón y no alcanzar a prender el led porque el programa solo mira el botón en el instante que yo le pido. Más adelante vamos a ver cómo mejorar eso usando interrupciones. Eso es todo por la clase de hoy. Muchas gracias.