Étape 6: Ultimas conexiones o programa
En las siguientes lineas, explicare un poco el funcionamiento del programa y algunas Betriebsanleitung. ADMITO que es largo y puedo parecer ONU pesado, pero me parece interesante super sabre y aprender estas pequeñas cosas, que pueden ser muy utiles. Si aun asi aucuns quereis, bajar podeis a la parte de resumen y consejos y saltaros todo esto para ne saber las ultimas conexiones del proyecto y algun pequeño consejo. Aun asi repito que me parece algo muy interesante de saber, pero es vuestra eleccion jaja.
Explicacion del programa
Ya hemos conectado y sabemos como funcionan casi todos los elementos de nuestro proyecto. No falta ver el programa, les entenderlo, les y acabar de conectar unas pocas cosas mas para ejecutarlo en solo.
El programa funciona de la siguiente manera :
Primero, como siempre, le decimos un arduino las Edición que vamos a necesitar, en este caso la de la pantalla LCD y la librería time.h, para controlar el tiempo (luego veréis por Qué). Wire.h es una pequeña librería dentro Escalin librería time.h, por lo que solamente descargaremos las de time.h, pues la de la pantalla LCD viene ya con el IDE y la reconoce sin descargar nada, que os la dejo ici arriba.
Después, al conectar arduino a la corriente, el programa entero se queda en espera hasta que pulsemos el botón que nos permitirá empezar. Esta espera se hace con la ya conocida instrucción de "While();". Pero si os fijáis bien, este « While() » tiene ONU pequeña diferencia, pues pas tiene corchetes y tiene ONU « punto y coma ». De después si ONU « While » ponemos punto y coma sin corchetes, el que significa en aucun hará nada mientras la condición de dentro mer verdad, esta simplemente esperando. En este caso. une impulsion se de que el botón. Como haremos para que décelée el botón pulsado ? Conectaremos el boton en modo "Pull-Down" Québec ya usamos fr de proyecto antérieure de mi "arduino con alarma/despertador". LLANERISIMOS todo el rato leyendo el estado del broche 11 de arduino, hasta que la mer haute, pues mientra mer basse, LLANERISIMOS dentro de el « while(); » esperando.
Cuando pulsemos el botón, escribiremos en la pantalla LCD que comenzamos, y le pediremos al jugador que se coloque a una mínima distancia, ya elegida variable de la fr « mínimo », en mi caso 130 cm. En la pantalla amendements aparecerá todo el rato la distancia mínima, y la distancia a la que nos encontramos, hasta que nos posicionemos suficientemente alejados. Esto se hará con la instrucción "Do {ordenes} While(condicion);". Un "faire-alors que" funciona igual que ONU While, pero la condición se evalúa al final, por lo que como mínimo las ordenes se ejecutan una vez. Fr es valido este caso, así, mínimo una vez no aparece en la pantalla la distancia a la que nos encontramos. Si nos encontramos un mínima de la distancia de mas, lo escribirá una vez en la pantalla, y el programa seguirá. La distancia, sérums medida con la función « medirDistancia », explicada anteriormente.
Al colocarnos a la distancia requerida fr la pantalla veremos ONU aviso de que nos movamos, y la cuenta de "1,2,3... Ingles Pajarito". En este tiempo sérums cuando podamos movernos, porque al acabarse este tiempo, tendremos que quedarnos quietos. Después, viene la parte complicada del programa.
Ahora, mediante un « While() » leeremos el capteur para ver si hay movimiento. Si hay movimiento, el jugador perderá, y tendremos que salir del While. Pero solo ne si hay movimiento, también podremos salir si el jugador ha pasado ONU tiempo mínimo quieto, y arduino deba empezar de nuevo un para contar Qué este se mueva de nuevo. Aparte, si se ha pulsado el botón, significara que el jugador ha llegado, y ha ganado. Como hacemos esto?
Bueno, idée mi ha sido, crear 2 booleanas variables, a et b y, que sean las condiciones de el movimiento y de el botón. Si alguien se mueve mientras debe estar parado, « a » se pondrá haute, y como podemos ver fr la condición del while(), saldremos, y el jugador habrá perdido. Si en cambio, el botón ha sido anteriormente pulsado (mientras arduino contaba), « b » se pone haute y aucun entramos en el while(). Y la parte difícil ha sido esta : como creamos ONU cronometro fr arduino para contar TR el tiempo mínimo ya ha pasado a la vez que seguimos ejecutando el programa? Arduino tiene varias funciones para contar el tiempo, delay() y millis() por ejemplo. Delay() para cualquier otra cosa que este haciendo el micro-controlador y aucun mientras se ejecuta nada mas activo este. Millis() es Nations Unies contador que empieza a contar desde que arduino ha sido conectado a la corriente. Esto aucun amendements vale pues nosotros queremos que mientras contemos el tiempo leamos por el capteur si alguien se mueve. Para ello, se me ocurrió esta idée (que puede que haya mas soluciones, y mas son, pero solo se me ocurrió esta, que me parece bastante buena, y me gustaria saber si alguien sabe de otra manera). Con la librería time.h (acompañada de wire.h), podemos llevar la cuenta Escalin horay la fecha en nuestro arduino mientras este esté conectado a la corriente. Lo que il font écho, ha sido fijarle una fecha cualquiera variable arduino fr la con t (setTime(...)), pues la fecha y la hora amendements dan igual, solo no interesa que los segundos sean 00. Cada segundo leeremos con «segundos=second(t)» los segundos que han pasado desde que "seteamos" el tiempo (justo cuando el jugador debe empezar une quieto estar), así sabremos todo el rato cuanto tiempo ha pasado desde entonces, y podremos seguir ejecutando el programa de mientras. Cuando ese tiempo mer mas que el tiempo mínimo impuesto para estar parado (Variable « Parado », 8 seg en mi caso), saldremos de el while() ; y el programa se seguirá ejecutando.
De aquí en adelante foin 3 opciones. Si el jugador se ha movido, mediante la función "teHasMovido();" le indicaremos que se ha movido y se encenderá la luz roja del RGB. Para empezar de nuevo habra que pulsar el botón. Si aucun se ha movido, arduino empezara de nuevo a contar "1, 2, 3... Pajarito Ingles". Y si por ultimo estaba Utilice el botón, se encenderá la luz verde del RGB y le indicaremos que ha ganado con la función "hasGanado();"
Resumen y consejos
Para acabar por tanto, no falta conectar el botón fr modo "Pull-Down" (o Pull-up, pero habría que cambiar el programa en la parte de lectura del botón) y conectar el pin 11 para leerlo.
El, capteur PIR, esta leyendo si ne hay movimiento o aucun cuando arduino esta ayant "1,2,3,... pajarito ingles". Esto es inévitable porque el capteur da pulsos y aucun hace falta que este conectado un arduino, dicho hemos como, por lo que si cuando esta ayant 3, nos movemos, a la hora de que leamos con el pin 12 si alguien se ha movido, amendements dara haute, debido al tiempo que el capteur esta en haut y puede empezar de nuevo a leer , y perderemos. Por lo tanto, recomiendo dejar de moverse ya fr 2 o incluso 1. Aun así, podemos arreglar esto poniendo un pequeño delay() despues de "1,2,3... Pajarito Ingles", así mientras esta ese delay() (que aucun sérum muy largo), el capteur podrá volver a leer de nuevo, aunque yo lo prefiero así.
Si amanece péché que nos vea movernos hasta arduino mientras esta ayant « 1, 2, 3..., Pajarito Ingles », tenemos que pulsar el botón para ganar. Es recomendable dejarlo pulsado ONU rato para que lea bien que el botón ha sido pulsado.
Cuando estas cerca, el capteur PIR puede llegar a ser muy sensible, por lo que hay que estar muy quietos.
Finalmente espero que os haya gustado este proyecto, que aun siendo largo es muy muy interesante y la verdad que muy muy divertido. Gracias y Buena suerte contra Arduino, de jugador buen de pues es Nations Unies muy "1,2,3... Ingles Pajarito".
Es difícil, pero aucune es invincible ! ;)