1 00:00:00,000 --> 00:00:12,320 Buenos días. Vamos a terminar el último vídeo del proyecto 1 con la implementación del Boil Loop. 2 00:00:12,320 --> 00:00:17,960 Es lo único que nos queda y ya probaremos todo. Veremos, acordaos que nos quedó un error que 3 00:00:17,960 --> 00:00:23,000 teníamos con la función leer potenciómetro, pero yo creo que es porque no tenemos todavía el loop. 4 00:00:23,000 --> 00:00:34,000 Ahora cuando tengamos el loop veremos si tenemos el error, pondremos los serial activados para que se vea cuando leemos el potenciómetro y bueno, lo vemos todo. 5 00:00:34,600 --> 00:00:49,859 Lo primero que vamos a hacer es irnos al loop y vamos a escribir primero, lo primero que necesitamos saber dentro del loop es la distancia del objeto, del vehículo con respecto al sensor para ver si se va o no se va. 6 00:00:50,560 --> 00:00:52,840 Esto lo vamos a reflejar, ¿dónde? En centímetros. 7 00:00:53,039 --> 00:00:56,219 Esta variable la creamos, era una variable global, que la teníamos aquí. 8 00:00:57,179 --> 00:00:57,619 Aquí está. 9 00:00:58,880 --> 00:01:03,380 Vamos a ponerlo aquí, creamos variables globales para que quede claro. 10 00:01:04,420 --> 00:01:08,819 Variable global la puede ver cualquier método de todo el programa. 11 00:01:09,280 --> 00:01:11,120 Entonces el Boilub puede acceder a ella. 12 00:01:12,060 --> 00:01:13,200 ¿Centímetros cómo los tenemos? 13 00:01:13,200 --> 00:01:16,700 Pues los teníamos a través de, acordaos, leer distancia. 14 00:01:16,700 --> 00:01:24,560 Entonces, queremos que en todo momento leer la distancia de ese sensor. Entonces, llamamos a la función leer distancia. 15 00:01:26,079 --> 00:01:35,219 Y como esa función nos devolvía un log, lo almacenamos dentro de centímetros, que será la distancia que habrá del vehículo con respecto al sensor. 16 00:01:36,040 --> 00:01:41,700 A continuación, necesitaremos una serie de condicionales. ¿Para qué? Primero, tenemos que saber si se ha dado al pulsador. 17 00:01:41,700 --> 00:02:08,400 Si se ha dado el pulsador es que hay un coche que quiere entrar. Entonces, pondremos un IF, ponemos la apertura y el cierre. Vale. Llave de apertura y llave de cierre. A ver que esto… Ahora. Llave de apertura y llave de cierre. 18 00:02:08,400 --> 00:02:37,900 ¿La condición cuál va a ser? Queremos saber si con el DigitalWrite, queremos saber si, perdón, Digital, estamos aquí, DigitalWrite, porque lo que queremos es leer. 19 00:02:37,900 --> 00:02:47,199 acordaos que el pulsador lo que va es a leer si realmente le está llegando un valor 1 o 0 20 00:02:47,199 --> 00:02:52,360 0 cuando no se pulsa y cuando le das a pulsar nos daría un valor de 1 21 00:02:52,360 --> 00:02:56,719 que lo va a recibir justamente este, el pin 7 22 00:02:56,719 --> 00:03:02,639 entonces vamos a leer del pin 7 y el pin 7 se llamaba pin pulsador 23 00:03:02,639 --> 00:03:07,360 cogemos el constante y le ponemos aquí y vamos a leer del pin 7 24 00:03:08,879 --> 00:03:20,520 ¿Qué queremos que ese valor sea? Queremos comprobar si realmente está recibiendo un 1, entonces si ese valor es high. Esa será la condición. 25 00:03:21,340 --> 00:03:29,000 Si eso se cumple, ¿qué sucederá? Que es que hay un coche en la entrada que quiere pasar, pero claro, antes tendremos que comprobar si el parking está lleno o no. 26 00:03:29,000 --> 00:03:48,159 Entonces ponemos otro condicional dentro de este condicional y comprobamos si lleno tiene un valor de 1 o de 0. 27 00:03:48,400 --> 00:03:53,500 Si está lleno tendrá un valor de 1, si está vacío tendrá un valor de 0. 28 00:03:53,500 --> 00:04:08,500 Entonces, llave de apertura y llave de cierre. Y aquí, ¿qué es lo que pondremos? Una vez que hemos comprobado tanto que se ha dado el pulsador como que... 29 00:04:08,500 --> 00:04:44,259 Vamos a ponerlo aquí, comprobación de si se ha pulsado el pulsador y aquí comprobación de si el parking está lleno. 30 00:04:44,259 --> 00:04:50,079 Bien, si veis que este condicional está dentro de este 31 00:04:50,079 --> 00:04:52,819 o sea que previo a que esté lleno 32 00:04:52,819 --> 00:04:56,579 tiene que haber cumplido que alguien ha dado el pulsador 33 00:04:56,579 --> 00:04:59,860 Entonces, si se ha dado el pulsador y el parking está lleno 34 00:04:59,860 --> 00:05:00,899 entonces ¿qué haremos? 35 00:05:01,620 --> 00:05:05,300 Pues tendremos que encender el LED rojo y apagar el verde 36 00:05:05,300 --> 00:05:08,459 Entonces, DigitalWrite 37 00:05:08,459 --> 00:05:12,480 y pondremos aquí, lo vamos a repetir dos veces 38 00:05:12,480 --> 00:05:18,259 digital 39 00:05:18,259 --> 00:05:19,660 write 40 00:05:19,660 --> 00:05:22,519 aquí tendremos 41 00:05:22,519 --> 00:05:23,740 en el primero 42 00:05:23,740 --> 00:05:25,360 tendremos que decir que el LED 43 00:05:25,360 --> 00:05:27,160 vamos a poner, ¿cómo se llamaba el LED? 44 00:05:27,899 --> 00:05:29,939 el LED se llamaba 45 00:05:29,939 --> 00:05:33,160 pin LED verde 46 00:05:33,160 --> 00:05:35,620 pues que el pin 47 00:05:35,620 --> 00:05:36,660 del LED verde 48 00:05:36,660 --> 00:05:41,300 se ponga a low 49 00:05:41,300 --> 00:05:43,100 porque queremos 50 00:05:43,100 --> 00:05:44,379 si está lleno el parking 51 00:05:44,379 --> 00:05:49,639 lógicamente el led verde se apagará 52 00:05:49,639 --> 00:05:53,879 mientras que el led rojo se encenderá 53 00:05:53,879 --> 00:05:55,139 entonces el pin rojo 54 00:05:55,139 --> 00:05:57,920 estaremos dando al rojo 55 00:05:57,920 --> 00:06:00,879 un valor de high 56 00:06:00,879 --> 00:06:04,439 repaso, si está lleno el parking 57 00:06:04,439 --> 00:06:06,259 le mandamos a su pin 58 00:06:06,259 --> 00:06:09,439 el pin del led verde, le vamos a mandar un 0 59 00:06:09,439 --> 00:06:13,819 y al pin del led rojo le mandamos un 1 60 00:06:13,819 --> 00:06:33,759 Queremos que se encienda el led rojo y el verde se apague. A continuación tendremos que actualizar la pantalla llamando a la función mostrar pantalla para que en la pantalla aparezca que el parking está lleno. 61 00:06:33,759 --> 00:06:54,759 Si nos vamos a mostrar pantalla, está llamando a esta función, verá, comprobará el número de plazas y verá que el parking está lleno. Entonces pondrá en la pantalla parking lleno. Bien, ¿qué más? Le dejamos aquí que paramos un poquito la ejecución durante medio segundo, por ejemplo, para que se actualice. 62 00:06:54,759 --> 00:07:10,759 Y ya estaría. ¿Qué sucede si no está lleno? Entonces pasaríamos al ELSE, abrimos llave, cerramos llave y aquí tendríamos que poner los semáforos, o sea, los LED que actúan como semáforos. 63 00:07:10,759 --> 00:07:20,300 semáforos sería al revés ahora el verde es el que se enciende porque no está lleno y el rojo se apaga 64 00:07:20,300 --> 00:07:27,920 porque no está lleno bien y además tendremos que abrir la barrera aquí lo que hemos dicho es que 65 00:07:27,920 --> 00:07:33,060 no nos abre la barrera porque está lleno y lo único que nos introduce es un mensaje de oye que 66 00:07:33,060 --> 00:07:39,259 está lleno te tendrás que esperar mientras que si no está lleno entonces ahora el led verde se 67 00:07:39,259 --> 00:07:47,100 enciende y el rojo se apaga y además tenemos que abrir la barrera. ¿Cómo lo abrimos? Llamando a la 68 00:07:47,100 --> 00:07:58,449 función abrir y cerrar barrera. La copiamos y la ponemos aquí. Se abre la barrera, espera unos 69 00:07:58,449 --> 00:08:05,189 segundos en función de cómo esté el potenciómetro y luego la vuelve a cerrar. Y además tenemos que 70 00:08:05,189 --> 00:08:10,089 añadir aquí que si está entrando un vehículo que sucede que habrá una plaza menos, entonces habrá 71 00:08:10,089 --> 00:08:33,269 que actualizar el número de plazas. Número plazas. Tiene que ser igual a número plazas, pero ahora menos 1. ¿Qué nos quedaría de nuevo? Pues ahora tenemos que también aquí, al igual que sucedía en la parte de arriba, tendremos que actualizar la pantalla. 72 00:08:33,269 --> 00:08:58,950 Entonces llamaríamos a la función, mostrar pantalla, veis la utilidad de las funciones, el hecho de que puedan hacerme una tarea en función de la tarea y yo pueda llamar a esa función sin saber qué es lo que hace esa tarea y me la haga y una vez que me haga la tarea que yo pretendo que se haga, volvería a mi programa y seguiría. 73 00:08:58,950 --> 00:09:15,049 Pero veis la utilidad de establecer secciones, secciones de tareas, de diferentes tareas que quiero que se realicen en el loop y que metiéndolas aquí el loop generaría un método excesivamente grueso en líneas. 74 00:09:15,450 --> 00:09:23,850 Entonces, al derivar todas esas tareas en determinadas funciones, veis la utilidad del estar llamando a cada una de ellas y luego volver a mi loop y continuar. 75 00:09:23,850 --> 00:09:30,110 bien, hemos mostrado pantalla y podemos ponerle aquí también un delay 76 00:09:30,110 --> 00:09:34,509 para que espere medio segundo para que se actualice 77 00:09:34,509 --> 00:09:39,169 y esto sería el boil loop 78 00:09:39,169 --> 00:09:44,409 y con esto ya tendríamos todo el código que vamos a ver ahora 79 00:09:44,409 --> 00:09:49,149 luego actualizo los serial, los pongo, los descomento 80 00:09:49,149 --> 00:09:50,970 pero vamos a ver si esto funciona o no 81 00:09:50,970 --> 00:10:12,149 Nos está diciendo que aparece un error que era el error que teníamos antes. Si yo pongo, voy a poner como sucedía en la línea ya sea otra vez no va muy bien Tinkercad hoy y veis se queda en bucle y no te deja hacer nada. 82 00:10:12,149 --> 00:10:14,970 menos mal que lo va dejando grabado 83 00:10:14,970 --> 00:10:16,350 lo que vas escribiendo 84 00:10:16,350 --> 00:10:18,549 conforme vas escribiendo se va quedando grabado 85 00:10:18,549 --> 00:10:19,210 porque si no 86 00:10:19,210 --> 00:10:22,289 entonces voy a abrir otra vez Tinkercad 87 00:10:22,289 --> 00:10:25,820 y vuelvo 88 00:10:25,820 --> 00:10:27,179 al mismo proyecto 89 00:10:27,179 --> 00:10:29,120 y este le borro 90 00:10:29,120 --> 00:10:30,820 a ver que lo tenga ya 91 00:10:30,820 --> 00:10:34,000 veis el código, se ha actualizado y está todo 92 00:10:34,000 --> 00:10:35,419 este le voy a borrar 93 00:10:35,419 --> 00:10:36,840 y lo que voy a hacer 94 00:10:36,840 --> 00:10:39,399 ahora es quitar la función 95 00:10:39,399 --> 00:10:40,519 leer potenciómetro 96 00:10:40,519 --> 00:10:43,279 para ver si realmente el único error que teníamos 97 00:10:43,279 --> 00:10:52,120 era en esa función. La quitamos y como comento la línea leer potenciómetro, puesto que ahora no existe, 98 00:10:52,360 --> 00:10:59,779 si no me daría error también, y vemos que funciona. Con lo cual tenemos un problema nada más que en la función leer potenciómetro 99 00:10:59,779 --> 00:11:10,740 y vamos a ver por qué. Le vamos a poner otra vez, lo detengo, espero que no se le... Vale, pongo la función y descomento esta línea. 100 00:11:11,559 --> 00:11:26,330 Si veo, si miro en el potenciómetro, la función se llama exactamente igual, con lo cual está bien. 101 00:11:27,830 --> 00:11:30,230 Tiene su llave de apertura y de cierre, está bien. 102 00:11:31,090 --> 00:11:38,350 Y no sé si lo que no coge es la función de mapeo. Voy a comentarla también y voy a darle. 103 00:11:38,350 --> 00:11:59,139 Y eso no es. Y se nos ha vuelto a quedar aquí en bucle sin poder hacer nada. Voy otra vez a ponerla. Hoy no sé qué le pasa a Tinkercad, pero no va muy bien. 104 00:11:59,139 --> 00:12:01,019 vale, vamos a ver 105 00:12:01,019 --> 00:12:03,980 en la función potenciómetro que era la que fallaba 106 00:12:03,980 --> 00:12:06,019 había comentado esta línea 107 00:12:06,019 --> 00:12:07,919 pero seguía existiendo el mismo error 108 00:12:07,919 --> 00:12:09,440 con lo cual esta línea no es 109 00:12:09,440 --> 00:12:11,919 y puede ser a lo mejor 110 00:12:11,919 --> 00:12:14,000 el analog red 111 00:12:14,000 --> 00:12:16,120 no lo sé, voy a comprobar 112 00:12:16,120 --> 00:12:20,139 el pin 113 00:12:20,139 --> 00:12:21,460 es el correcto 114 00:12:21,460 --> 00:12:22,879 el pin poten 115 00:12:22,879 --> 00:12:26,279 está escrito bien y es el A3 116 00:12:26,279 --> 00:12:29,360 sí, está correcto 117 00:12:29,360 --> 00:12:32,120 y no debería dar ningún problema 118 00:12:32,120 --> 00:12:36,080 vale 119 00:12:36,080 --> 00:12:38,299 y aquí 120 00:12:38,299 --> 00:12:41,600 ah, que mirad, veis 121 00:12:41,600 --> 00:12:42,460 he puesto analog 122 00:12:42,460 --> 00:12:45,379 he puesto, fijaos, una letra 123 00:12:45,379 --> 00:12:46,320 lo que supone 124 00:12:46,320 --> 00:12:48,419 bien, entonces ya habíamos visto el error 125 00:12:48,419 --> 00:12:52,299 voy a quitar, descomentar esto 126 00:12:52,299 --> 00:12:54,620 para luego ver que veamos cómo se ejecuta 127 00:12:54,620 --> 00:12:56,340 y le vamos a dar a ejecutar 128 00:12:56,879 --> 00:13:02,639 Tendría que estar ya bien. Voy a darle y ya funciona. 129 00:13:03,379 --> 00:13:10,100 Si veo el monitor, en principio no pasa nada, pero si yo modifico el... 130 00:13:10,980 --> 00:13:20,919 Fijaos, voy a ponerlo a la mitad del potenciómetro, que tendría que darme un valor entre 0 y la mitad de 1023. 131 00:13:20,919 --> 00:13:27,419 Ese 1023, con la función de mapeo, lo va a comprender en un valor entre 2000 y 6000. 132 00:13:28,100 --> 00:13:38,519 Vamos a ver con el monitor cuál es ese valor. Claro, no llama al potenciómetro hasta que yo no le doy a pulsar. Cuando yo le doy a pulsar, se enciende en verde, ¿lo veis? 133 00:13:39,779 --> 00:13:43,580 Aquí está listo para que se vea bien y nos dice que hay dos plazas. 134 00:13:43,580 --> 00:14:02,039 Bien, vamos al monitor a ver cómo aparece y veis, nos ha dicho, valor analógico, bueno, las tildes no las coge y nos dice que son 511 que corresponde a un valor de 3.998 milisegundos, o sea, casi 4 segundos, ¿vale? 135 00:14:02,039 --> 00:14:09,679 que sería justo la mitad, el valor intermedio entre 2.000 y 6.000, o sea que estaría bien. 136 00:14:10,720 --> 00:14:15,080 Lo que sí vamos a ver, bueno, vamos a comprobar ahora que esto funciona, 137 00:14:16,360 --> 00:14:26,980 y claro, en cuanto he dado al botón, perdón, mi vehículo ha entrado 138 00:14:26,980 --> 00:14:42,159 y el tiempo que ha transcurrido desde que se ha abierto hasta que se ha cerrado el propio, la barrera o el servo, ha sido de 4 segundos. 139 00:14:42,799 --> 00:14:47,039 Vamos a poner que un vehículo sale para demostrar que esto funciona y le damos aquí. 140 00:14:47,240 --> 00:14:53,980 Entonces, para la distancia y debería ponerse salir un vehículo. 141 00:14:53,980 --> 00:15:20,580 Bien, vamos a darle a esto al máximo para que sea, y aún bajando la distancia, esto no abre, o sea que no nos está funcionando bien el sensor. Ahora debería estar, pero no lo hace. Vamos a detener la simulación y vamos a darle otra vez por si acaso. 142 00:15:20,580 --> 00:15:28,899 bienvenido 143 00:15:28,899 --> 00:15:34,100 vamos a bajar la distancia y vemos que no funciona 144 00:15:34,100 --> 00:15:39,549 vamos a ver qué es lo que sucede al código para que 145 00:15:39,549 --> 00:15:42,809 esto no funcione, vamos a quitar el monitor para tener más espacio 146 00:15:42,809 --> 00:15:47,529 y vamos a ver qué es lo que le falta a la propia 147 00:15:47,529 --> 00:15:51,210 algo tiene que estar mal para que no lea la distancia 148 00:15:51,210 --> 00:15:52,970 entonces 149 00:15:52,970 --> 00:16:01,450 Entonces, claro, nos queda...