1 00:00:00,110 --> 00:00:06,230 Bueno, ya tenemos nuestro programita con el juego de luces, pero ahora yo voy a plantear una pregunta. 2 00:00:06,629 --> 00:00:10,949 ¿Qué pasa si en lugar de tener 5 luces quiero tener otras 5 más? 3 00:00:11,449 --> 00:00:18,570 Pues bueno, montamos el circuito, cambiamos el código, añadimos líneas de código y esto funcionaría sin mayor problema. 4 00:00:19,329 --> 00:00:28,070 Y si en lugar de añadir 5 añado 500, se puede hacer, pero jolín, el tamaño de nuestro programa sería muy grande y costaría bastante tiempo, 5 00:00:28,070 --> 00:00:33,270 pero podréis hacer, en principio, si la placa mete 500 pines, pues se podría hacer, ¿no? 6 00:00:34,490 --> 00:00:38,789 Bueno, fijaros, los ordenadores son máquinas bastante torpes, bastante tontas. 7 00:00:38,869 --> 00:00:44,869 De hecho, para este sencillo juego de luces le he tenido que decir de forma muy detallada los pasos que tiene que seguir. 8 00:00:45,070 --> 00:00:50,250 Pero tienen una gran ventaja, que son muy rápidos y se prestan muy bien a hacer operaciones repetitivas. 9 00:00:50,750 --> 00:00:55,350 En esta práctica vamos a ir un paso más allá y vamos a cambiar el programa que tenemos 10 00:00:55,350 --> 00:01:02,750 para conseguir que, cambiando muy pocos elementos de nuestro código, podamos añadir o quitar ledes y que siga funcionando igual. 11 00:01:02,990 --> 00:01:08,730 Para ello vamos a utilizar dos elementos del lenguaje de programación C, como son los arrays y los bucles. 12 00:01:10,150 --> 00:01:16,730 Empezamos por los arrays. Un array no es nada más que una lista de variables a las que vamos a acceder mediante un índice. 13 00:01:17,329 --> 00:01:23,689 Vamos a verlo con un ejemplo. En nuestro caso, nos vamos a crear primero, antes de nada, una constante de tipo entero, 14 00:01:23,689 --> 00:01:29,290 indicando el número de luces, aunque no es obligatorio, las constantes se suelen poner en mayúsculas 15 00:01:29,290 --> 00:01:33,450 y en este caso como tenemos 5 LEDs, pues vamos a poner el valor de 5 16 00:01:33,450 --> 00:01:41,670 y a continuación nos vamos a crear un array, en este caso va a ser todos los elementos de array de tipo entero 17 00:01:41,670 --> 00:01:46,689 le vamos a llamar LEDs y para decir que es un array utilizaremos los corchetes 18 00:01:46,689 --> 00:01:51,890 dentro de los corchetes diremos el número de elementos del array, que va a ser luces 19 00:01:51,890 --> 00:01:56,629 Esto lo vamos a hacer así porque cuando queramos añadir o quitar luces 20 00:01:56,629 --> 00:01:59,349 Pues directamente lo que haremos será cambiar este valor 21 00:01:59,349 --> 00:02:03,390 Y todo el programa se adapta para funcionar de manera adecuada 22 00:02:03,390 --> 00:02:08,590 Bueno, si desconocéis cómo funcionan los arrays o cualquier otro elemento del lenguaje de programación 23 00:02:08,590 --> 00:02:12,969 Pues ya sabéis que dentro del aula virtual tenéis un enlace a la referencia de Arduino 24 00:02:12,969 --> 00:02:19,210 Que os trae una página donde podéis ver la información que deseáis 25 00:02:19,210 --> 00:02:30,669 Así por ejemplo, si hacéis control F y escribís Array, pues os va a llevar aquí donde están los Arrays y si pincháis dentro de Array, os van a ir explicando detalladamente cómo son los Arrays con varios ejemplos. 26 00:02:30,909 --> 00:02:33,370 Y esto lo podemos hacer con cualquier otro elemento del lenguaje de programación. 27 00:02:33,750 --> 00:02:38,409 Bueno, volvamos al circuito. Lo primero que vamos a hacer va a ser inicializar los valores del Array. 28 00:02:38,669 --> 00:02:45,689 Una manera de inicializar los valores sería diciendo que el Array LED es el elemento 0, que va a ser el primero. 29 00:02:45,689 --> 00:02:56,650 Los Arrays siempre empiezan por el elemento 0. Va a ser el valor 13. El siguiente elemento del Array sería el elemento 1, pues sería el pin 12. 30 00:02:56,889 --> 00:03:04,310 Y así sucesivamente con todos. Lo que pasa es que vemos que con esto no conseguimos ninguna mejora. Cada vez que tenga un Array, pues te voy a poner una línea nueva. 31 00:03:04,590 --> 00:03:09,810 En lugar de hacerlo así, vamos a utilizar un bucle. Un bucle que va a ir recorriendo todos los elementos del Array. 32 00:03:09,810 --> 00:03:14,870 Para referenciar a cada uno de los elementos del Array, los ingleses suelen emplear la palabra Iterator. 33 00:03:14,870 --> 00:03:23,289 Nosotros no vamos a crear una variable con ese nombre, pero no deja de ser una variable, o sea que podríamos utilizar cualquier nombre que nos diera la gana. 34 00:03:23,849 --> 00:03:33,189 Vamos a empezar a inicializarle el valor 0 y ahora dentro de un bucle while, vamos a decir que mientras que este iterador sea menor que el número de luces, 35 00:03:33,569 --> 00:03:37,909 acordaros que esta es una constante que nos creamos aquí, diciendo el número de luces que teníamos. 36 00:03:37,909 --> 00:03:43,349 Pues mientras que eso sea cierto, pues se va a estar ejecutando lo que hay dentro del array 37 00:03:43,349 --> 00:03:45,129 ¿Y qué vamos a poner dentro del array? 38 00:03:45,289 --> 00:03:47,830 Pues vamos a inicializar los valores con los pines adecuados 39 00:03:47,830 --> 00:03:52,530 Así que leds, aquí le pondremos iterator, va a ser igual a 40 00:03:52,530 --> 00:03:58,050 Fijaros, como el primer elemento 0 sería 13 y luego vamos decrementando 41 00:03:58,050 --> 00:04:04,050 Pues diríamos 13 menos el valor del iterador 42 00:04:04,050 --> 00:04:09,370 y no se nos puede olvidar nunca incrementar el valor del iterador 43 00:04:09,370 --> 00:04:12,729 porque si no entraríamos en un bucle infinito donde iterador siempre vale 0 44 00:04:12,729 --> 00:04:15,669 donde siempre se cumpliría esta condición 45 00:04:15,669 --> 00:04:19,670 y todo el rato estamos diciendo que el primer elemento de la array vale 13 46 00:04:19,670 --> 00:04:26,430 entonces tenemos que acordarnos de incrementar el valor de esta variable 47 00:04:26,430 --> 00:04:28,170 forma de hacer esto, varias 48 00:04:28,170 --> 00:04:32,990 una de ellas es decir que esta variable iterator vale lo que valga en este momento 49 00:04:32,990 --> 00:04:37,470 más 1. Bueno, ya sabemos 50 00:04:37,470 --> 00:04:41,449 que primero se va a ejecutar esto de aquí y por último 51 00:04:41,449 --> 00:04:45,870 el operador de asignación. Una forma abreviada de poner esto 52 00:04:45,870 --> 00:04:49,389 es utilizar el operador más igual, de tal manera 53 00:04:49,389 --> 00:04:53,189 que esto es exactamente lo mismo 54 00:04:53,189 --> 00:04:57,490 que lo anterior. A la variable iterator se le suma el valor 55 00:04:57,490 --> 00:05:01,310 que tengo a la derecha con el operador más igual. Y como suele ser habitual 56 00:05:01,310 --> 00:05:03,730 añadir uno, pues hay otro operador más 57 00:05:03,730 --> 00:05:04,850 que es el operador más más 58 00:05:04,850 --> 00:05:07,209 que directamente incrementa en uno 59 00:05:07,209 --> 00:05:08,209 el valor de la variable 60 00:05:08,209 --> 00:05:11,009 así, perfecto 61 00:05:11,009 --> 00:05:13,170 bueno, esta es una de las posibilidades 62 00:05:13,170 --> 00:05:15,149 que por cierto, si venís a la referencia de Arduino 63 00:05:15,149 --> 00:05:16,970 control F y ponéis while 64 00:05:16,970 --> 00:05:19,629 vais a ver las distintas 65 00:05:19,629 --> 00:05:21,889 estructuras que hay, aquí estaría la de while 66 00:05:21,889 --> 00:05:23,949 también hay un bucle do while 67 00:05:23,949 --> 00:05:25,170 vale, bueno 68 00:05:25,170 --> 00:05:27,790 todos los elementos del lenguaje 69 00:05:27,790 --> 00:05:28,750 lo tenéis en la referencia 70 00:05:28,750 --> 00:05:30,930 el bucle while se suele emplear mucho 71 00:05:30,930 --> 00:05:39,170 Pero fijaros una cosa que tiene. Al principio me creo siempre una variable y luego la tengo que incrementar. Y esto se me puede olvidar. 72 00:05:39,449 --> 00:05:48,949 Para recorrer los arrays hay otro bucle, el bucle for, que funciona muy parecido a este, pero fijaros. Dentro de los paréntesis tiene tres secciones. 73 00:05:49,290 --> 00:05:57,970 La primera sección es algo que se va a ejecutar solo una vez al principio y siempre se va a ejecutar. Sería el equivalente de crearnos la variable fuera. 74 00:05:57,970 --> 00:06:08,930 En medio, fijaros que separa un punto y coma, se pone la condición que se tiene que cumplir para que se realice el bucle, para que se haga lo que hay dentro. 75 00:06:09,509 --> 00:06:25,769 Y por último, separado por punto y coma, tendríamos lo que se ejecuta al final del todo, que se suele emplear para incrementar el valor de esa variable iterator. 76 00:06:25,769 --> 00:06:28,449 bueno, esto es tan habitual 77 00:06:28,449 --> 00:06:30,709 el realizar eso 78 00:06:30,709 --> 00:06:32,470 que claro, la gente ha empezado a simplificar 79 00:06:32,470 --> 00:06:34,449 iterator es muy largo, pues vamos a llamarle it 80 00:06:34,449 --> 00:06:36,709 en lugar de iterator 81 00:06:36,709 --> 00:06:38,769 it a esta variable 82 00:06:38,769 --> 00:06:40,629 habría que cambiarlo 83 00:06:40,629 --> 00:06:42,069 en todos los lados donde aparece iterator 84 00:06:42,069 --> 00:06:44,310 pero es que es tan habitual 85 00:06:44,310 --> 00:06:46,730 que dijeron, mira, le vamos a llamar 86 00:06:46,730 --> 00:06:48,490 i, y vais a ver 87 00:06:48,490 --> 00:06:49,889 en muchos bucles de este tipo 88 00:06:49,889 --> 00:06:52,170 como aparece 89 00:06:52,170 --> 00:06:54,670 el nombre de la variable 90 00:06:54,670 --> 00:06:57,649 y para recorrer los arrays, esto suele ser lo más habitual 91 00:06:57,649 --> 00:07:01,149 bueno, una vez que hemos inicializado los valores 92 00:07:01,149 --> 00:07:04,970 pues tendríamos que hacer lo mismo para las funciones pinMode 93 00:07:04,970 --> 00:07:07,189 lo podemos hacer en otro bucle a continuación 94 00:07:07,189 --> 00:07:10,110 o bueno, podemos aprovechar este mismo bucle 95 00:07:10,110 --> 00:07:15,290 y primero inicializamos el valor del array 96 00:07:15,290 --> 00:07:20,689 y a continuación decimos que cada uno de estos elementos del array 97 00:07:20,689 --> 00:07:22,069 lo ponemos en modo salida 98 00:07:22,069 --> 00:07:29,529 Fijaros como ya empezamos a ganar líneas de código utilizando bucles 99 00:07:29,529 --> 00:07:33,889 Bueno, pues nada, ya tengo este bucle para esto 100 00:07:33,889 --> 00:07:35,930 Vamos a aprovecharlo para otras cosas 101 00:07:35,930 --> 00:07:39,569 Y vamos a hacerlo copiando esto de aquí 102 00:07:39,569 --> 00:07:47,610 En la función loop, como realmente llamamos a otras funciones para hacer el trabajo 103 00:07:47,610 --> 00:07:49,189 Pues no tenemos que cambiar nada 104 00:07:49,189 --> 00:07:51,930 Vamos a empezar con la función ahora apagarTodos 105 00:07:51,930 --> 00:08:04,050 Pues lo mismo, en lugar de ir uno a uno, utilizamos nuestro bucle, esto lo echamos a la derecha, en C no es obligatorio intentar adecuadamente el código, pero es muy recomendable. 106 00:08:04,589 --> 00:08:19,029 Bueno, y aquí, en lugar de ponerle 1, utilizaremos nuestro array y le pondremos el índice de nuestro iterator, y que no se nos puede olvidar nunca, cerrar la llave del bucle. 107 00:08:19,029 --> 00:08:37,850 Y aquí vamos a hacer lo mismo, así que volvemos a pegarlo, lo echamos hacia la derecha, en lugar de poner LED1 ponemos LEDs, entre corchetes nuestra I, quitamos todo esto, bueno, y así con todos. 108 00:08:37,850 --> 00:08:54,350 Por ejemplo, cuando lleguemos aquí, pues en nuestro bucle for siempre vamos a esperar al principio, luego vamos a escribir, pero en lugar de led1 vamos a escribir en leds de i y todo esto nos sobra. 109 00:08:54,350 --> 00:08:58,570 aquí igual 110 00:08:58,570 --> 00:09:01,730 bueno, esto ya es ir 111 00:09:01,730 --> 00:09:03,009 función a función 112 00:09:03,009 --> 00:09:05,389 cambiando el código 113 00:09:05,389 --> 00:09:06,690 veis que el cambio es muy sutil 114 00:09:06,690 --> 00:09:08,350 no es gran cosa 115 00:09:08,350 --> 00:09:11,289 es poner el bucle y sustituir 116 00:09:11,289 --> 00:09:13,929 la variable 117 00:09:13,929 --> 00:09:15,690 por el array 118 00:09:15,690 --> 00:09:17,769 bueno, y este como realmente 119 00:09:17,769 --> 00:09:19,590 apaga todo, se enciende 120 00:09:19,590 --> 00:09:20,710 aquí no habría que hacer nada 121 00:09:20,710 --> 00:09:22,809 bueno, pues ya hemos adaptado el código 122 00:09:22,809 --> 00:09:26,980 con arrays 123 00:09:26,980 --> 00:09:27,639 y con bucles 124 00:09:27,639 --> 00:09:29,480 vemos que funciona exactamente igual 125 00:09:29,480 --> 00:09:31,299 y ahora por ejemplo, si yo dijera 126 00:09:31,299 --> 00:09:34,179 no, es que no quiero que se enciendan las 5 127 00:09:34,179 --> 00:09:35,259 quiero que se enciendan 4 128 00:09:35,259 --> 00:09:36,820 pues cambio aquí el valor de 4 129 00:09:36,820 --> 00:09:41,419 y vemos que funciona sobre 4 130 00:09:41,419 --> 00:09:43,740 ¿quiero poner otro más? 131 00:09:43,860 --> 00:09:45,039 pues bueno, pongo otro LED 132 00:09:45,039 --> 00:09:54,679 vengo al código 133 00:09:54,679 --> 00:09:56,940 pongo aquí el valor de 6 134 00:09:56,940 --> 00:09:59,480 ejecuto 135 00:09:59,480 --> 00:10:02,320 y vemos que 136 00:10:02,320 --> 00:10:04,440 no hemos cambiado prácticamente el código 137 00:10:04,440 --> 00:10:07,200 y lo hemos adaptado para la nueva situación. 138 00:10:08,519 --> 00:10:12,480 Bueno, pues en esta clase hemos aprendido dos cosas muy importantes del lenguaje de programación, 139 00:10:12,879 --> 00:10:14,580 los arrays y los bucles. 140 00:10:15,340 --> 00:10:20,600 Por último, como medida de higiene, podemos quitar este código que ya no necesitamos. 141 00:10:21,559 --> 00:10:26,960 Bueno, ahora te toca a ti adaptar el código que has hecho para utilizar arrays y bucles. 142 00:10:27,960 --> 00:10:28,159 ¡Ánimo!