0 00:00:00,000 --> 00:00:07,000 Hola, en este ejercicio vamos a ver otra forma que tiene la placa Arduino de conectarse con 1 00:00:07,000 --> 00:00:11,000 otros dispositivos, con otros periféricos. Hemos visto ya la conexión serie, que es 2 00:00:11,000 --> 00:00:17,000 a través del puerto USB, que le permite conectarse con el ordenador, y hoy vamos a ver otro tipo 3 00:00:17,000 --> 00:00:27,000 de conexión serie, que se llama la I2C. Aquí tenemos un ejemplo de dos dispositivos, dos 4 00:00:27,000 --> 00:00:32,000 pantallas LCD que estén conectados a un Arduino Board. Podría haber más pantallas 5 00:00:32,000 --> 00:00:39,000 LCD, pero con dos nos vale para entender cómo funciona esto. Cada una de estas pantallas 6 00:00:39,000 --> 00:00:45,000 LCD tiene cuatro conectores, uno es el GND, la tierra, que es el cable negro, si lo seguimos 7 00:00:45,000 --> 00:00:51,000 ambas tierras están juntas y ambas van al GND del Arduino, otro es la VCC, cable de 8 00:00:51,000 --> 00:00:56,000 color rojo, están ambas conectadas y luego van a los cinco voltios del Arduino. La tierra 9 00:00:56,000 --> 00:01:02,000 es la referencia de voltaje, VCC son los cinco voltios que suministra potencia a ambos dispositivos 10 00:01:02,000 --> 00:01:08,000 y luego tenemos dos cables, dos conexiones que son SDA, cable verde, que están ambas 11 00:01:08,000 --> 00:01:16,000 conectadas, ambas pantallas LCD, y luego van siguiendo al conector SDA, lo indica el puntero, 12 00:01:16,000 --> 00:01:20,000 y el cable amarillo es lo que se llama la conexión SCL, que están las dos conexiones 13 00:01:21,000 --> 00:01:27,000 pantallas juntas y si seguimos el cable amarillo van al conector SCL del Arduino. Yo podría 14 00:01:27,000 --> 00:01:33,000 tener más pantallas, podría tener una más arriba, dos más arriba, en total cuatro, 15 00:01:33,000 --> 00:01:39,000 y todas estarían conectadas de la misma manera, todas a la misma tierra, todas al mismo cinco 16 00:01:39,000 --> 00:01:44,000 voltios, todas al mismo SDA y todas al mismo SCL, con lo cual es muy fácil conectar. 17 00:01:44,000 --> 00:01:53,000 La idea es muy sencilla, ya sabemos que tierra y VCC son señales de voltaje, suministran 18 00:01:53,000 --> 00:01:58,000 una referencia y una energía, y los datos, la información, se va a transmitir a través 19 00:01:58,000 --> 00:02:05,000 de estos dos cables, SDA y SCL. ¿Por qué puede haber varios dispositivos conectados? 20 00:02:05,000 --> 00:02:12,000 Luego lo vemos, cada uno de los dispositivos va a poder programarse de manera distinta 21 00:02:12,000 --> 00:02:17,000 y va a poder responder de manera distinta. Eso se debe gracias a las direcciones, a los 22 00:02:17,000 --> 00:02:22,000 que cada dispositivo va a tener una dirección distinta. Todos están escuchando los mismos 23 00:02:22,000 --> 00:02:26,000 cables, por así decirlo, están conectados a los mismos cables, pero sólo responderán 24 00:02:26,000 --> 00:02:31,000 si la información va dirigida a ellos, porque esa información tiene un destinatario, que 25 00:02:31,000 --> 00:02:36,000 es la dirección. Por ejemplo, este dispositivo de abajo, si yo clico sobre él, yo lo programa 26 00:02:36,000 --> 00:02:40,000 para que esté en la dirección 34, bueno, defino que este dispositivo va a tener la 27 00:02:40,000 --> 00:02:46,000 dirección 34, y el de arriba va a tener la dirección 32. Otro parámetro de configuración 28 00:02:46,000 --> 00:02:52,000 que para los dos es lo mismo, es el tipo, es decir, basado en PCF 8574, es el mismo 29 00:02:52,000 --> 00:02:58,000 para ambos. Clico arriba, PCF tal tal tal, pico abajo, PCF tal tal tal. Ese es el protocolo 30 00:02:58,000 --> 00:03:03,000 de comunicación, el lenguaje que usan para comunicarse con el ordenador. Nosotros vamos 31 00:03:04,000 --> 00:03:09,000 a usar ese, ya está, no hace falta que nos quemamos más la cabeza con eso. Pero sí, 32 00:03:09,000 --> 00:03:12,000 muy importante que tengamos en cuenta que cada uno de los dispositivos tendrá su propia 33 00:03:12,000 --> 00:03:17,000 dirección, este por ejemplo la 32 y de abajo la 34. Esto nos permite programar desde la 34 00:03:17,000 --> 00:03:24,000 32 hasta la 39, es decir, 8 direcciones distintas. Con este simulador nos permite conectar hasta 35 00:03:24,000 --> 00:03:32,000 8 dispositivos diferentes al Arduino, cada uno identificado por su dirección. Bueno, 36 00:03:32,000 --> 00:03:37,000 y estos componentes nuevos, estas pantallas, que no las hemos visto hasta ahora, las podemos 37 00:03:37,000 --> 00:03:44,000 buscar aquí en la librería, en la biblioteca de componentes, si ponemos todos, podemos 38 00:03:44,000 --> 00:03:51,000 escribir LCD, y aparecen dos tipos de LCD, el de 16 x 2, el ordinario, y este de 16 x 39 00:03:51,000 --> 00:03:58,000 2 también, pero que admite el protocolo I2C. Este es el que estamos usando, el que puede 40 00:03:58,000 --> 00:04:03,000 funcionar con este protocolo, ya no sería nada más que clicar y arrastrar. Bueno, pues 41 00:04:03,000 --> 00:04:08,000 ahí lo tendríamos. Ya tenemos todo lo necesario, el Arduino sabemos de dónde cogerlo, las 42 00:04:08,000 --> 00:04:13,000 pantallas LCD sabemos de dónde cogerlas también, y sabemos cómo tirar los cables. Ahora ya 43 00:04:13,000 --> 00:04:18,000 entraríamos en lo que es la programación hardware, ya lo tenemos y vamos a programar. 44 00:04:18,000 --> 00:04:25,000 Bueno, abrimos el código, me encuentro ya aquí algunos bloques que los he dejado ahí 45 00:04:25,000 --> 00:04:30,000 explicándolos. Estos son la base de lo que vamos a necesitar. Antes que nada, fijaros 46 00:04:30,000 --> 00:04:37,000 que aparecen dos bucles, dos partes del programa, la parte de al iniciar y la parte de siempre. 47 00:04:37,000 --> 00:04:42,000 Hasta ahora, nosotros hemos estado utilizando siempre esta parte de siempre, que es la que 48 00:04:42,000 --> 00:04:50,000 se repite una y otra vez. La parte de al iniciar es una parte que no siempre ha estado en Tinkercad, 49 00:04:50,000 --> 00:05:00,000 hace poco que ha aparecido, tened en cuenta que estoy grabando este vídeo en 2022. Esta 50 00:05:00,000 --> 00:05:05,000 parte de al iniciar lo que hace es que se ejecuta una única vez, es un setup, una configuración, 51 00:05:05,000 --> 00:05:09,000 y luego ya entramos de verdad en el siempre, que es el loop este que se repite una y otra 52 00:05:09,000 --> 00:05:15,000 vez, una y otra vez. En el al iniciar, como es una parte de configuración, vamos a usar 53 00:05:15,000 --> 00:05:22,000 este bloque que viene aquí en la biblioteca azul. Todos los bloques que vamos a usar son 54 00:05:22,000 --> 00:05:27,000 de tipo azul porque es información que sale del Arduino hacia las pantallas LCD, con lo 55 00:05:27,000 --> 00:05:32,000 cual todos los bloques van a estar aquí. Este bloque de configurar, lo que le decimos 56 00:05:32,000 --> 00:05:39,000 al Arduino es que lo que nosotros vamos a llamar LCD1 va a estar en la dirección 32 y nos 57 00:05:39,000 --> 00:05:44,000 vamos a comunicar con este protocolo. Y lo mismo, lo que nosotros vamos a llamar LCD2 58 00:05:44,000 --> 00:05:50,000 va a tener esta dirección y vamos a usar este protocolo. De ahora en adelante, una 59 00:05:50,000 --> 00:05:55,000 vez que lo tenemos definido y se configura una única vez, cada vez que digamos LCD1 60 00:05:55,000 --> 00:05:59,000 o LCD2 ya sabemos a cuál nos referimos, en qué dirección está y con qué lenguaje 61 00:05:59,000 --> 00:06:07,000 nos dirigimos a ir. Al iniciar y al siempre no son bloques propios del LCD, es usarlo 62 00:06:07,000 --> 00:06:13,000 en cualquier programa. Aquí los introducimos porque nos interesa, es necesario la configuración. 63 00:06:13,000 --> 00:06:21,000 Aquí es imprescindible. Estos son los bloques de configuración. Bloques que nos permiten 64 00:06:21,000 --> 00:06:31,000 actuar, enviar órdenes a las pantallas LCD. El primero es este que se llama activar la 65 00:06:31,000 --> 00:06:40,000 luz de fondo. En LCD1 activar la luz de fondo. LCD1 es el de 32 y es este de arriba. Yo ahora 66 00:06:40,000 --> 00:06:47,000 si doy a iniciar simulación, fijaos lo que pasa. Se enciende la pantalla de arriba, 67 00:06:47,000 --> 00:06:52,000 habéis visto. Si pusiera que se encendiera el LCD2, pues se encendería el de abajo, 68 00:06:52,000 --> 00:06:58,000 como podéis imaginar. Efectivamente estamos mandando comandos, estamos mandando órdenes 69 00:06:58,000 --> 00:07:04,000 y sabemos distinguir, el programa distingue una pantalla de la otra. En este bloque tenemos 70 00:07:04,000 --> 00:07:09,000 un montón de posibilidades, no vamos a usar más que dos de ellas de momento, que son 71 00:07:09,000 --> 00:07:18,000 activar la luz de fondo y borrar la pantalla. Borrar la pantalla, bueno, antes que nada, 72 00:07:18,000 --> 00:07:23,000 esto de LCD activar luz de fondo no tiene por qué estar en el siempre, porque cuantas 73 00:07:23,000 --> 00:07:27,000 veces, en principio activa uno la luz de fondo, pero activa uno, entonces podríamos LCD 74 00:07:27,000 --> 00:07:32,000 activar la luz de fondo y ya se queda activada. Si yo no voy a tocar eso, pues ahí se puede 75 00:07:32,000 --> 00:07:37,000 quedar, no necesito más que una vez. Entonces, en este bloque, ¿qué voy a hacer? Pues voy 76 00:07:37,000 --> 00:07:45,000 a jugar ahora con el bloque Imprimir. Imprimir LCD1, lo que hace es, me va a mandar un mensaje 77 00:07:45,000 --> 00:07:51,000 de texto, y lo voy a escribir, en este caso en el bloque 1, que es el de arriba, el de 78 00:07:51,000 --> 00:08:01,000 32. Entonces, vamos a ver que ocurre y se lo voy a asegurar. ¿Qué ocurre? Que me lo 79 00:08:01,000 --> 00:08:04,000 está todo el rato escribiendo, hello world, hello world, hello world, porque se repite 80 00:08:04,000 --> 00:08:10,000 todo el rato. Lo está escribiendo arriba, pero se repite todo el rato hasta que termine 81 00:08:10,000 --> 00:08:14,000 la pantalla. ¿A mí qué me interesaría? Esto no es muy práctico, a mí lo que me 82 00:08:14,000 --> 00:08:20,000 interesa es que escribiera y borrara de vez en cuando. Vamos a meter un bloque de borrar 83 00:08:20,000 --> 00:08:28,000 pantalla, pero claro, si yo escribo y borro, no veo nada. Me interesa meter uno de estos 84 00:08:28,000 --> 00:08:38,000 bloques de esperar. Vamos a esperar 500 milisegundos, por ejemplo. Me vamos a poner un segundo. 85 00:08:38,000 --> 00:08:45,000 Entonces, fijaros, imprimo, espero, borro, y si meto un esperar más, ¿eso qué sería? 86 00:08:45,000 --> 00:08:55,000 Un blink, ¿verdad? Vamos a ver si es efectivamente un blink. En el de arriba, a ver, arranca, 87 00:08:55,000 --> 00:09:01,000 borro, ahí está, un segundo borrado, escribe, estoy un segundo esperando. Efectivamente, 88 00:09:01,000 --> 00:09:05,000 estoy haciendo un blinking con el hello world, un blinking que es un encendido apagado, un 89 00:09:05,000 --> 00:09:17,000 palpadeo. Ya vamos viendo los bloques estos, cosas que podemos hacer. Ya hemos visto borrar 90 00:09:17,000 --> 00:09:25,000 la pantalla. Ahora, en realidad, de los bloques que os he traído, solo me falta este de establecer 91 00:09:25,000 --> 00:09:35,000 la posición. Imaginaros ahora, que en vez de escribir hello world, lo que quiera es 92 00:09:35,000 --> 00:09:40,000 escribir un carácter en una determinada posición de la pantalla. Pero claro, si yo pongo el 93 00:09:40,000 --> 00:09:43,000 carácter este en vez del hello world, pues ya sabéis que no va a escribir aquí a la 94 00:09:43,000 --> 00:09:47,000 izquierda, y si no, pues lo vamos a hacer un quick pass, vais a ver que lo escribe ahí 95 00:09:47,000 --> 00:09:53,000 arriba a la izquierda, y hace el palpadeo en vez de con el hello world, con el asterisco 96 00:09:53,000 --> 00:09:57,000 ¿Cómo podría hacer que en vez de que estuviera el asterisco aquí, estuviera por ejemplo aquí 97 00:09:57,000 --> 00:10:02,000 en medio? Bueno, pues tenemos que entender que la pantalla tiene dos filas, esta es la 98 00:10:02,000 --> 00:10:09,000 fila 0, ahí arriba, y la fila 1, que es la de abajo, y luego tenemos 16 columnas, 0, 99 00:10:09,000 --> 00:10:16,000 1, 2, 3, 4, 5, y así hasta la 15. Entonces, si yo quisiera que esto estuviera aquí en 100 00:10:16,000 --> 00:10:22,000 medio, por ejemplo, en la fila de abajo, tendría que poner en fila 1, para que se 101 00:10:22,000 --> 00:10:26,000 vea más abajo, y para que esté en el medio, pues más o menos en la 8, sería la 7 o la 102 00:10:26,000 --> 00:10:32,000 8 o algo así. Entonces, ¿qué va a ocurrir? Me va a imprimir aquí arriba, en la segunda 103 00:10:32,000 --> 00:10:38,000 fila, y en el medio, vamos a ver, si está controlando el palpadeo, y lo está haciendo 104 00:10:38,000 --> 00:10:43,000 donde yo quiero. Efectivamente, ahí está, ¿vale? Luego puedo controlar también donde 105 00:10:43,000 --> 00:10:49,000 quiero yo imprimir, en qué parte de la pantalla quiero yo imprimir, ¿vale? Luego ya hemos 106 00:10:49,000 --> 00:10:55,000 visto otro bloque, el de establecer posición. También podríamos hacer, porque claro, estoy 107 00:10:55,000 --> 00:11:00,000 programándose una pantalla, ¿puedo programar las dos a la vez? Pues claro, lo que voy a 108 00:11:00,000 --> 00:11:13,000 hacer es, voy a duplicar todo ello, lo dejo aquí afuera, voy a hacer que en el CD2, en 109 00:11:13,000 --> 00:11:16,000 el LC2, escriba aquí en la esquinita de abajo a la derecha, ¿vale? Pues sería la 110 00:11:16,000 --> 00:11:21,000 fila 1, la columna 15, por ejemplo, y este en vez de que esté en la fila de abajo, que 111 00:11:21,000 --> 00:11:26,000 esté en la de arriba, voy a poner 0, no cambia. Entonces, lo que quiero es imprimir, en vez 112 00:11:26,000 --> 00:11:33,000 de en el LC1 que me imprima en el LC2, vamos a poner un slash, que es un carácter de estos. 113 00:11:33,000 --> 00:11:37,000 Vamos a poner que en el LC2 se active también la luz de fondo, más que nada para que podamos 114 00:11:37,000 --> 00:11:42,000 verlo claro. ¿Veis lo que estoy haciendo? Estoy programando también el LC2 para que 115 00:11:42,000 --> 00:11:47,000 haga un palpadeo también. Entonces, en el LC1 un asterisco en esta posición, en el 116 00:11:48,000 --> 00:11:55,000 LC2 un slash en esta posición. Espero, el esperar me vale el mismo para ambos, porque 117 00:11:55,000 --> 00:12:01,000 estoy esperando para los dos, y en el LC2 tengo que borrar pantalla también. De esta manera 118 00:12:01,000 --> 00:12:11,000 vamos a hacer un palpadeo doble, ¿vale? Iniciamos simulación. ¿Veis? Estamos programando los 119 00:12:11,000 --> 00:12:18,000 dos a la vez. O podríamos hacer también, por ejemplo, que mientras uno está imprimiendo, 120 00:12:18,000 --> 00:12:30,000 el otro esté borrado. Por ejemplo, que el 2 esté borrado. Que imprimamos el LC2 mientras 121 00:12:30,000 --> 00:12:34,000 el LC1 está borrado. ¿Anticipáis lo que va a hacer? Dice que mientras en uno está 122 00:12:34,000 --> 00:12:40,000 el carácter, en el otro estaría en apagado. Es intercalar el palpadeo, vale, va a palpadear 123 00:12:40,000 --> 00:12:45,000 igual, pero intercalado. En vez de ir los dos sincronizados, van a ir opuestos. Vamos 124 00:12:45,000 --> 00:13:09,000 a verlo. ¿Se ve? Va alterado, van en posición cambiadas. Este me imprime aquí porque se 125 00:13:09,000 --> 00:13:16,000 ha colocado aquí y cuando tendría que irme, si yo quiero que me lo escriba donde antes, 126 00:13:16,000 --> 00:13:23,000 lo que tengo que hacer es este bloque de establecer posición, tengo que ponerlo justo antes del 127 00:13:23,000 --> 00:13:28,000 imprimir. Antes tenía la columna 15, fila 1. Porque es que cuando vayas a borrar pantalla 128 00:13:28,000 --> 00:13:32,000 te lo resetea, ¿vale? Te resetea. No te borra solo la pantalla, sino que te borra además 129 00:13:32,000 --> 00:13:36,000 la posición en la que estás, ¿vale? Entonces siempre que queráis establecer una posición, 130 00:13:36,000 --> 00:13:41,000 ponerla, imprimir una posición determinada, ponedle establecer posición justo antes, 131 00:13:41,000 --> 00:13:50,000 ¿vale? Entonces vamos a ver que ahora sí ya lo hace bien. Ahí, ¿lo veis? Además 132 00:13:50,000 --> 00:13:54,000 están opuestos. Cuando uno está encendido, el otro está apagado, que era lo que queríamos, 133 00:13:54,000 --> 00:14:00,000 ¿vale? Bueno, pues hemos aprendido dos cosas. El cambiar el palpadeo y además que el establecer 134 00:14:00,000 --> 00:14:06,000 posición tiene que ir justo antes del imprimir. Luego, entonces, ahí está, pues hemos aprendido 135 00:14:06,000 --> 00:14:10,000 una serie de bloques y cómo usarlos. ¿Cuál es el ejercicio que tenéis que hacer? Pues 136 00:14:10,000 --> 00:14:18,000 mirad, viene aquí. Os voy a enseñar solo el resultado y vamos a simular y viendo la 137 00:14:18,000 --> 00:14:23,000 simulación veréis lo que tenéis que programar, ¿vale? Entonces, este es el ejercicio que 138 00:14:24,000 --> 00:14:31,000 hay que hacer. Es un tipo de palpadeo, pero el asterisco va recorriendo cuatro posiciones 139 00:14:31,000 --> 00:14:40,000 distintas. Aquí, en la fila de arriba del LCD de arriba, luego a la derecha, luego 140 00:14:40,000 --> 00:14:44,000 bajo a la izquierda, ya en el segundo LCD y luego bajo a la derecha. Esas son las cuatro 141 00:14:44,000 --> 00:14:49,000 posiciones que va barriendo. Entonces es un palpadeo en el que intervienen todas las LCD 142 00:14:49,000 --> 00:14:53,000 y tenéis que ir eligiendo las posiciones en las que queréis que estén las cosas, ¿vale? 143 00:14:53,000 --> 00:14:57,000 Bueno, pues yo creo que es un ejercicio muy sencillo si habéis entendido los bloques 144 00:14:57,000 --> 00:15:02,000 que os he explicado, ¿vale? Bueno, pues ya está, muy fácil entonces.