{"id":2397,"date":"2020-07-07T07:00:00","date_gmt":"2020-07-07T06:00:00","guid":{"rendered":"http:\/\/sereingeniera.ugr.es\/?p=2397"},"modified":"2020-07-07T09:52:58","modified_gmt":"2020-07-07T08:52:58","slug":"juego-laser-tag-basico","status":"publish","type":"post","link":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/","title":{"rendered":"Juego l\u00e1ser-tag B\u00e1sico"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u00bfEst\u00e1is preparadas para dejar lista una versi\u00f3n b\u00e1sica del juego?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ayer nos quedamos con la ampliaci\u00f3n que propon\u00eda el reto diario: Hacer funcionar 4 LEDs y 4 fotoresistencias a la vez.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Soluci\u00f3n del RETO 2.1: <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/Inicializamos los LEDs en los pines digitales 7, 8, 12, 13.\nconst int led0 = 7;\nconst int led1 = 8;\nconst int led2 = 12;\nconst int led3 = 13;\n\/\/Inicializamos las fotoresistencia en los pines anal\u00f3gicos A0, A1, A2, A3.\nconst int foto0 = A0;\nconst int foto1 = A1;\nconst int foto2 = A2;\nconst int foto3 = A3;\n\/\/Creamos una variable l\u00edmite que es la que va decidir cual es el l\u00edmite entre estar recibiendo luz o no. El valor del l\u00edmite depende del la luz que haya en el ambiente, as\u00ed que tendremos que hacer pruebas.\nconst int limite = 100;\n\/\/Inicializamos el zumbador en el pin digital con pwm (~) 9.\ncont int zumb = 9;\n \n\/\/ Recordatorio: setup() solo lo va a leer el arduino cuando se encienda, nunca m\u00e1s.\nvoid setup() {\n  Serial.begin(9600);   \n  \/\/ Definimos los pines de los LEDs como pines de salida (OUTPUT), porque les vamos a mandar la informaci\u00f3n de que se enciendan o se apaguen.\n  pinMode(led0 , OUTPUT);\n  pinMode(led1 , OUTPUT);\n  pinMode(led2 , OUTPUT);\n  pinMode(led3 , OUTPUT);    \n  \/\/ Definimos los pines de las fotoresistencias como pines de entrada (INPUT), porque les van a mandar informaci\u00f3n sobre como se encuentran al arduino.\n  pinMode(foto0 , INPUT);   \n  pinMode(foto1 , INPUT);\n  pinMode(foto2 , INPUT);\n  pinMode(foto3 , INPUT);\n  \/\/Encendemos los LEDs.  \n  digitalWrite(led0,HIGH);\n  digitalWrite(led1,HIGH);\n  digitalWrite(led2,HIGH);\n  digitalWrite(led3,HIGH);\n}\n\n\/\/ Recordatorio: loop() lo lee el arduino en bucle hasta que se apague.\nvoid loop(){\n  \/\/Si el valor que leemos de la fotoresistencia es mayor que el l\u00edmite es porque le est\u00e1 dando la luz del laser y por tanto queremos que se apague.\n  if (analogRead(foto0) &gt; limite)\n  {\n     \/\/ Escribimos en el pin digital de nuestro LED el valor LOW, que hace que se apague.\n     digitalWrite(led0,LOW);\n     \/\/ Hacemos sonar durante 300ms el tono de 523Hz.\n     tone(zumb, 523, 300);\n  }\nif (analogRead(foto1) &gt; limite)\n  {\n     digitalWrite(led1,LOW);\n     tone(zumb, 523, 300);\n  }\nif (analogRead(foto2) &gt; limite)\n  {\n     digitalWrite(led2,LOW);\n     tone(zumb, 523, 300);\n  }\nif (analogRead(foto3) &gt; limite)\n  {\n     digitalWrite(led3,LOW);\n     tone(zumb, 523, 300);\n  }\n                \n}  <\/pre>\n\n\n\n<hr class=\"wp-block-separator is-style-dots\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">V\u00eddeo de soluci\u00f3n del reto 2.1:<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u00a1Disparemos a los sensores de luz para apagar los leds!\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/dztvA1qLgsM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Hoy vamos hacer dos cosas, la segunda ser\u00e1 programar la l\u00f3gica base del juego:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u00bfC\u00f3mo se van a encender y apagar os LEDs?<\/strong> Hasta ahora todos los LEDs se encend\u00edan al principio y se apagaban cuando les dispar\u00e1bamos, pero vamos a pasar a que se enciendan y apaguen de forma aleatoria. <\/li><li><strong>\u00bfCu\u00e1ndo vamos a perder? <\/strong>Cuando se nos escapen 5 enemigos.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Pero la primera va a consistir en dejar m\u00e1s bonito nuestro c\u00f3digo (y tambi\u00e9n m\u00e1s facil de leer y de entender) gracias a la magia de las funciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo vamos a hacer todo esto? Muy sencillo:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La magia de las funciones<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Primero un ejemplo muy sencillo de funciones: Vamos a crear unas funci\u00f3nes llamadas <em>apagarLED(led_que_queremos_apagar)<\/em> y  <em>encenderLED(led_que_queremos_encender) <\/em> para no tener que utilizar <em>digitalWrite(led,HIGH) <\/em>y<em> digitalWrite(led,LOW) <\/em>siempre. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo funcionan las funciones? Cada vez que necesitemos utilizar la funci\u00f3n <em>digitalWrite(led,HIGH)<\/em> escribiremos <em>apagarLED(led_que_queremos_apagar)<\/em> en su lugar.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo sabe el programa lo que tiene que tiene que hacer al leer <em>apagarLED(led_que_queremos_apagar)<\/em>? Porque en la parte final del c\u00f3digo, debajo del <em>loop(),<\/em> tenemos que describir lo que hacen las funciones que vayamos creando.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\/\/ La funci\u00f3n encenderLED enciende el LED que le digamos entre par\u00e9ntesis.\nvoid encenderLED(int led){\n  digitalWrite(led,HIGH);\n}\n\/\/La funci\u00f3n apagarLED apaga el LED que le digamos entre par\u00e9ntesis.\nvoid apagarLED(int led){\n  digitalWrite(led,LOW);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">El cambio de digitalWrite(led,LOW) a apagarLED(led) es muy peque\u00f1o, solo nos ha servido para traducir a una l\u00ednea de c\u00f3digo, pero las funciones est\u00e1n pensadas para poder simplificar grandes c\u00f3digos escribi\u00e9ndolos en sitios que no sean el bucle principal, de esta forma el c\u00f3digo es m\u00e1s facil de enteder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> Ahora vamos a cambiar toda la parte del <em>loop(), <\/em>que en la resoluci\u00f3n del reto se ve bastante grande, por esto:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop(){\n  disparando();              \n} <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ese <em>disparando()<\/em> es una funci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y todo lo que antes estaba en el <em>Ioop()<\/em> ahora va a estar dentro de la funci\u00f3n <em>disparando() <\/em> que vamos a escribir al final del c\u00f3digo (debajo de loop).<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void disparando(){\n  if (analogRead(foto0) &gt; limite){\n       apagarLED(led0);\n       tone(zumb, 523, 300);\n    }\n  if (analogRead(foto1) &gt; limite){\n       apagarLED(led1);\n       tone(zumb, 523, 300);\n    }\n  if (analogRead(foto2) &gt; limite){\n       apagarLED(led2);\n       tone(zumb, 523, 300);\n    }\n  if (analogRead(foto3) &gt; limite){\n      apagarLED(led3);\n      tone(zumb, 523, 300);\n    }\n}<\/pre>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u00bfC\u00f3mo podemos crear funciones en nuestros programas de Arduino?\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/8GmMqKXCf5w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfC\u00f3mo se van a encender y apagar los LEDs?<\/strong>  <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Hasta ahora todos los LEDs se encend\u00edan al principio y se apagaban  cuando les dispar\u00e1bamos, pero vamos a pasar a que se enciendan y apaguen  de forma aleatoria.  <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para eso vamos a utilizar la funci\u00f3n <em>random(min,max)<\/em>, una funci\u00f3n que devuelve un valor entre el valor m\u00ednimo y el m\u00e1ximo que le indiquemos. Por ejemplo: Si yo pongo <em><strong>int <\/strong><\/em><strong><em>numero =<\/em> <em>random(0,100)<\/em><\/strong>, en la variable <em>numero<\/em> se va a guardar un n\u00famero entre el 0 y el 100.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed que, lo primero que tendremos que hacer para poder encender los LEDs de forma aleatoria, es <strong>borrar<\/strong> el trozo de c\u00f3digo que hac\u00eda que se encendieran todos los LEDs al principio.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void setup() {\n.\n.\n.\n  \/\/Encendemos los LEDs.  \n  digitalWrite(led0,HIGH);\n  digitalWrite(led1,HIGH);\n  digitalWrite(led2,HIGH);\n  digitalWrite(led3,HIGH);\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s creamos un contador, podemos llamarle contador, que se va a encargar de que no se encienda o apague un led cada vez que el arduino lea el blucle  <em>loop()<\/em>, porque tenemos que recordar que el arduino lee el c\u00f3digo de <em>loop()<\/em> muchas veces en un segundo. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cada vez que el arduino entre en el c\u00f3digo <em>disparando()<\/em> vamos a aumentar el valor del <strong>contador<\/strong> al final. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void disparando(){\n  if (analogRead(foto0) &gt; limite){\n       apagarLED(led0);\n    }\n  if (analogRead(foto1) &gt; limite){\n       apagarLED(led1);\n    }\n  if (analogRead(foto2) &gt; limite){\n       apagarLED(led2);\n    }\n  if (analogRead(foto3) &gt; limite){\n      apagarLED(led3);\n    }\n\n  \/\/Poner contador++ es equivalente a poner contador=contador+1. Aumentando as\u00ed el valor del contador en una unidad. \n  contador++;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">NOTA: El contador hay que inicializarlo al principio del c\u00f3digo.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int contador = 0;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo quedar\u00eda el bucle <em>loop()<\/em>? Al entrar en \u00e9l, lo primero que har\u00eda el programa es leer lo que pone en la funci\u00f3n <em>disparando()<\/em>. Depu\u00e9s mirar\u00eda el contador, y si el valor que tiene es mayor que 5000 ponemos el contador a 0, para que todo vuelva a empezar, y el programa lee la funci\u00f3n <em>encenderapagarLEDaleatorio(). <\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfQu\u00e9 pasa si el contador es menor que 5000? No pasa nada, el bucle vuelve a empezar y el programa vuelve a leer lo que haya dentro de la funci\u00f3n <em>disparando()<\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop(){\n  disparando();  \n  if (contador &gt; 5000)  {\n    contador = 0;\n    encenderapagarLEDaleatorio();\n    }          \n} <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De esta forma, solo 1 de cada 5000 veces que se lea el bucle <em>loop()<\/em> se va a entrar en la funci\u00f3n que permite encender y apagar los LEDs. Si en vez de 5000 ponemos un n\u00famero m\u00e1s grande, los LEDs se encender\u00e1n y apagar\u00e1n m\u00e1s despacio. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora vamos a programar la funci\u00f3n <em>encenderapagarLEDaleatorio()<\/em> que va a encargarse de encender y apagar los LEDs de forma aleatoria. [El nombre es bastante descriptivo].<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo va a funci\u00f3nar?  Le vamos a decir que elija un n\u00famero aleatorio entre 0 y 4 (para que de de resultado los n\u00fameros que tienen asignados nuestros leds y nuestras fotoresistencias): Si el led elegido est\u00e1 encendido, queremos que lo apague. Si el led elegido est\u00e1 apagado, queremos que lo encienda.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero, \u00bfc\u00f3mo sabemos si el led est\u00e1 encendido o apagado? Con un tipo de dato llamado <em>bool<\/em>, que puede estar a <em>true<\/em> o a <em>false<\/em>, inicializamos una variable para cada LED:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">bool encendido0 = false;\nbool encendido1 = false;\nbool encendido2 = false;\nbool encendido3 = false;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Lo ponemos a <em>false<\/em> al inicializarlo porque al principio los LEDs van a estar apagados.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">NOTA: Cada vez que encendamos un LED hay que escribir <em>encendidoX=true <\/em>y cada vez que apaguemos un LED hay que escribir <em>encendidoX=false, <\/em> para que la l\u00f3gica de todo el juego tenga sentido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo quedar\u00eda la funci\u00f3n <em>disparando()<\/em>?<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void disparando(){\n  if (analogRead(foto0) &gt; limite){\n       apagarLED(led0);\n       encendido0 =false;\n    }\n  if (analogRead(foto1) &gt; limite){\n       apagarLED(led1);\n       encendido1 =false;\n    }\n  if (analogRead(foto2) &gt; limite){\n       apagarLED(led2);\n       encendido2 =false;\n    }\n  if (analogRead(foto3) &gt; limite){\n      apagarLED(led3);\n      encendido3 =false;\n    }\n\n  \/\/Poner contador++ es equivalente a poner contador=contador+1\n  contador++;\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo quedar\u00eda el c\u00f3digo de la funci\u00f3n <em>encenderapagarLEDaleatorio()?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al empezar la funci\u00f3n se tiene que generar un n\u00famero aleatorio, que es el que va a decidir qu\u00e9 led se enciende o apaga. Una vez decidido el led, si est\u00e1 encendido se apaga y si esta apagado se enciende.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void encenderapagarLEDaleatorio(){\n  \/\/Elegimos el LED de forma aleatoria.\n  int n = random(0,4);\n\n  \/\/ Si toca el LED 0:\n  if (n == 0){\n    if (encendido0){\n      apagarLED(led0);\n      encendido0 = false;\n    }else {\n      encenderLED(led0);\n      encendido0 = true;\n    }\n  }\n  \/\/ Si toca el LED 1:\n  if (n == 1){\n    if (encendido1){\n      apagarLED(led1);\n      encendido1 =false;\n    }else {\n      encenderLED(led1);\n      encendido1 = true;\n    }\n  }\n  \/\/ Si toca el LED 2:\n  if (n == 2){\n    if (encendido0){\n      apagarLED(led2);\n      encendido2 =false;\n    }else {\n      encenderLED(led2);\n      encendido2 = true;\n    }\n  }\n  \/\/ Si toca el LED 3:\n  if (n == 3){\n    if (encendido3){\n      apagarLED(led3);\n      encendido3 =false;\n    }else {\n      encenderLED(led3);\n      encendido3 = true;\n    }\n  }\n}<\/pre>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Dando vida a nuestros LEDs con Arduino\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/Y2PrSceMsSY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n<\/div><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>\u00bfCu\u00e1ndo vamos a perder?<\/strong> <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"> Cuando se nos escapen 5 enemigos. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo vamos a saber cu\u00e1ntos enemigos se han escapado? Vamos a tener una variable parecida a contador llamada \u00ab<em>escaparon<\/em>\u00bb y cada vez que el programa apague un LED de forma aleatoria, y no porque nosotras le hayamos disparado, va a aumentar en uno (1) el valor de \u00ab<em>escaparon<\/em>\u00ab. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">int escaparon = 0;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfC\u00f3mo le decimos al programa que el juego termina cuando se escapen cinco (5) enemigos? Al principio del bucle <em>loop()<\/em> ponemos la condici\u00f3n de que solo se pueda jugar si el n\u00famero de <em>enemigos<\/em> es menor a cinco (5).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si el n\u00famero de enemigos que se han escapado es mayor que 5 (cinco) los LEDs se apagan y termina el juego.<\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u00bfC\u00f3mo vamos a perder nuestro juego hecho con Arduino?\" width=\"604\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/Gj0oa1ZEQ5I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo final:<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">const int led0 = 7;\nconst int led1 = 8;\nconst int led2 = 12;\nconst int led3 = 13;\n\nconst int foto0 = A0;\nconst int foto1 = A1;\nconst int foto2 = A2;\nconst int foto3 = A3;\n\nconst int limite = 100;\nconst int zumb = 9;\n\nint contador = 0;\nint escaparon = 0;\n\nbool encendido0 = false;\nbool encendido1 = false;\nbool encendido2 = false;\nbool encendido3 = false;\n \n\/\/ Recordatorio: setup() solo lo va a leer el arduino cuando se encienda, nunca m\u00e1s.\nvoid setup() {\n  Serial.begin(9600);   \n  pinMode(led0 , OUTPUT);\n  pinMode(led1 , OUTPUT);\n  pinMode(led2 , OUTPUT);\n  pinMode(led3 , OUTPUT);    \n  pinMode(foto0 , INPUT);   \n  pinMode(foto1 , INPUT);\n  pinMode(foto2 , INPUT);\n  pinMode(foto3 , INPUT);\n}\n\n\/\/ Recordatorio: loop() lo lee el arduino en bucle hasta que se apague.\nvoid loop(){\n\u00a0 \/\/ \u00bfEstamos disparando a nuestros enemigos? Pues tenemos una funci\u00f3n que se encarga de apagar el LED que corresponda en caso de que acertemos en el enemigo.\n\u00a0if (escaparon &lt; 5){\n\u00a0 \u00a0 disparando(); \u00a0\n\u00a0 \u00a0 if (contador > 5000)\u00a0 {\n\u00a0 \u00a0 \u00a0 contador = 0;\n\u00a0 \u00a0 \u00a0 encenderapagarLEDaleatorio();\n\u00a0 \u00a0 \u00a0 } \u00a0 \u00a0 \u00a0 \u00a0 \u00a0\n\u00a0 } else{\n\u00a0 \u00a0 apagarLED(led0);\n\u00a0 \u00a0 apagarLED(led1);\n\u00a0 \u00a0 apagarLED(led2);\n\u00a0 \u00a0 apagarLED(led3);\n\u00a0 }\n}\n\n\n\nvoid disparando(){\n  if (analogRead(foto0) > limite){\n       apagarLED(led0);\n       tone(zumb, 523, 300);\n       encendido0 = false;\n    }\n  if (analogRead(foto1) > limite){\n       apagarLED(led1);\n       tone(zumb, 523, 300);\n       encendido1 = false;\n    }\n  if (analogRead(foto2) > limite){\n       apagarLED(led2);\n       tone(zumb, 523, 300);\n       encendido2 = false;\n    }\n  if (analogRead(foto3) > limite){\n      apagarLED(led3);\n      tone(zumb, 523, 300);\n      encendido3 = false;\n    }\n  contador++;\n}\n\n\n\nvoid encenderLED(int led){\n  digitalWrite(led,HIGH);\n}\n\/\/La funci\u00f3n apagarLED apaga el LED que le digamos entre par\u00e9ntesis y hace sonar el zumbador.\nvoid apagarLED(int led){\n  digitalWrite(led,LOW);\n}\n\n\n\nvoid encenderapagarLEDaleatorio(){\n  int n = random(0,4);\n  if (n == 0){\n    if (encendido0){\n      apagarLED(led0);\n      escaparon ++;\n      encendido0 =false;\n    }else {\n      encenderLED(led0);\n      encendido0 = true;\n    }\n  }\n  if (n == 1){\n    if (encendido1){\n      apagarLED(led1);\n      encendido1 =false;\n      escaparon ++;\n    }else {\n      encenderLED(led1);\n      encendido1 = true;\n    }\n  }\n  if (n == 2){\n    if (encendido0){\n      apagarLED(led2);\n      encendido2 =false;\n      escaparon ++;\n    }else {\n      encenderLED(led2);\n      encendido2 = true;\n    }\n  }\n  if (n == 3){\n    if (encendido3){\n      apagarLED(led3);\n      encendido3 =false;\n      escaparon ++;\n    }else {\n      encenderLED(led3);\n      encendido3 = true;\n    }\n  }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">RETO DIARIO : <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>RETO 4.1: Simplificar el bucle <em>loop()<\/em>.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dejar el bucle <em>loop() <\/em>as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">void loop(){\n if (escaparon &lt; 5){\n    jugar();       \n  } else{\n    game_over();\n  }\n} <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>RETO 4.2: Programar la victoria.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">De la misma forma que se pone una variable <em>escaparon<\/em> para contar hasta 5 (cinco) y poder decir que hemos perdido, tambi\u00e9n se puede a\u00f1adir una variable <em>victoria<\/em> que cuente hasta 20 (veinte).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ten\u00e9is para entregar las soluciones de los retos hasta hoy antes de las 21:30 en el drive como todos los d\u00edas.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1<strong>Que la suerte est\u00e9 siempre de vuestra parte!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfEst\u00e1is preparadas para dejar lista una versi\u00f3n b\u00e1sica del juego? Ayer nos quedamos con la ampliaci\u00f3n que propon\u00eda el reto diario: Hacer funcionar 4 LEDs y 4 fotoresistencias a la vez. Soluci\u00f3n del RETO 2.1: \/\/Inicializamos los LEDs en los pines digitales 7, 8, 12, 13. const int led0 = 7; const int led1 = &hellip; <a href=\"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/\" class=\"more-link\">Seguir leyendo <span class=\"screen-reader-text\">Juego l\u00e1ser-tag B\u00e1sico<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":22,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-2397","post","type-post","status-publish","format-standard","hentry","category-general"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera\" \/>\n<meta property=\"og:description\" content=\"\u00bfEst\u00e1is preparadas para dejar lista una versi\u00f3n b\u00e1sica del juego? Ayer nos quedamos con la ampliaci\u00f3n que propon\u00eda el reto diario: Hacer funcionar 4 LEDs y 4 fotoresistencias a la vez. Soluci\u00f3n del RETO 2.1: \/\/Inicializamos los LEDs en los pines digitales 7, 8, 12, 13. const int led0 = 7; const int led1 = &hellip; Seguir leyendo Juego l\u00e1ser-tag B\u00e1sico &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/\" \/>\n<meta property=\"og:site_name\" content=\"Ser\u00e9 Ingeniera\" \/>\n<meta property=\"article:published_time\" content=\"2020-07-07T06:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-07-07T08:52:58+00:00\" \/>\n<meta name=\"author\" content=\"Elvira, Celia, Nana\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elvira, Celia, Nana\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/\"},\"author\":{\"name\":\"Elvira, Celia, Nana\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/#\\\/schema\\\/person\\\/58c924c2007440162e9ae707720fef4b\"},\"headline\":\"Juego l\u00e1ser-tag B\u00e1sico\",\"datePublished\":\"2020-07-07T06:00:00+00:00\",\"dateModified\":\"2020-07-07T08:52:58+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/\"},\"wordCount\":1182,\"commentCount\":0,\"articleSection\":[\"General\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/\",\"url\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/\",\"name\":\"Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/#website\"},\"datePublished\":\"2020-07-07T06:00:00+00:00\",\"dateModified\":\"2020-07-07T08:52:58+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/#\\\/schema\\\/person\\\/58c924c2007440162e9ae707720fef4b\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/2020\\\/07\\\/07\\\/juego-laser-tag-basico\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Juego l\u00e1ser-tag B\u00e1sico\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/#website\",\"url\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/\",\"name\":\"Ser\u00e9 Ingeniera\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/#\\\/schema\\\/person\\\/58c924c2007440162e9ae707720fef4b\",\"name\":\"Elvira, Celia, Nana\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g\",\"caption\":\"Elvira, Celia, Nana\"},\"url\":\"https:\\\/\\\/sereingeniera.ugr.es\\\/index.php\\\/author\\\/monitoras2020\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/","og_locale":"es_ES","og_type":"article","og_title":"Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera","og_description":"\u00bfEst\u00e1is preparadas para dejar lista una versi\u00f3n b\u00e1sica del juego? Ayer nos quedamos con la ampliaci\u00f3n que propon\u00eda el reto diario: Hacer funcionar 4 LEDs y 4 fotoresistencias a la vez. Soluci\u00f3n del RETO 2.1: \/\/Inicializamos los LEDs en los pines digitales 7, 8, 12, 13. const int led0 = 7; const int led1 = &hellip; Seguir leyendo Juego l\u00e1ser-tag B\u00e1sico &rarr;","og_url":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/","og_site_name":"Ser\u00e9 Ingeniera","article_published_time":"2020-07-07T06:00:00+00:00","article_modified_time":"2020-07-07T08:52:58+00:00","author":"Elvira, Celia, Nana","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Elvira, Celia, Nana","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/#article","isPartOf":{"@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/"},"author":{"name":"Elvira, Celia, Nana","@id":"https:\/\/sereingeniera.ugr.es\/#\/schema\/person\/58c924c2007440162e9ae707720fef4b"},"headline":"Juego l\u00e1ser-tag B\u00e1sico","datePublished":"2020-07-07T06:00:00+00:00","dateModified":"2020-07-07T08:52:58+00:00","mainEntityOfPage":{"@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/"},"wordCount":1182,"commentCount":0,"articleSection":["General"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/","url":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/","name":"Juego l\u00e1ser-tag B\u00e1sico - Ser\u00e9 Ingeniera","isPartOf":{"@id":"https:\/\/sereingeniera.ugr.es\/#website"},"datePublished":"2020-07-07T06:00:00+00:00","dateModified":"2020-07-07T08:52:58+00:00","author":{"@id":"https:\/\/sereingeniera.ugr.es\/#\/schema\/person\/58c924c2007440162e9ae707720fef4b"},"breadcrumb":{"@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sereingeniera.ugr.es\/index.php\/2020\/07\/07\/juego-laser-tag-basico\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/sereingeniera.ugr.es\/"},{"@type":"ListItem","position":2,"name":"Juego l\u00e1ser-tag B\u00e1sico"}]},{"@type":"WebSite","@id":"https:\/\/sereingeniera.ugr.es\/#website","url":"https:\/\/sereingeniera.ugr.es\/","name":"Ser\u00e9 Ingeniera","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sereingeniera.ugr.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/sereingeniera.ugr.es\/#\/schema\/person\/58c924c2007440162e9ae707720fef4b","name":"Elvira, Celia, Nana","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9604cedcc0b8857de49c6b40f90b6555c087f2d3a932b7660869a124b2eacef6?s=96&d=monsterid&r=g","caption":"Elvira, Celia, Nana"},"url":"https:\/\/sereingeniera.ugr.es\/index.php\/author\/monitoras2020\/"}]}},"_links":{"self":[{"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/posts\/2397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/users\/22"}],"replies":[{"embeddable":true,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/comments?post=2397"}],"version-history":[{"count":24,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/posts\/2397\/revisions"}],"predecessor-version":[{"id":2530,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/posts\/2397\/revisions\/2530"}],"wp:attachment":[{"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/media?parent=2397"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/categories?post=2397"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sereingeniera.ugr.es\/index.php\/wp-json\/wp\/v2\/tags?post=2397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}