{"id":6162,"date":"2022-12-21T21:20:12","date_gmt":"2022-12-21T20:20:12","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=6162"},"modified":"2022-12-21T21:20:14","modified_gmt":"2022-12-21T20:20:14","slug":"maquina-expendedora-arcade","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/","title":{"rendered":"M\u00e1quina Expendedora Arcade"},"content":{"rendered":"\n<p class=\"has-medium-font-size\"><em>Autores: Stefan Rodolfo Gonzales Nagybabi, Rub\u00e9n Vicente Benito, Francisco G\u00f3mez Garc\u00eda<\/em><\/p>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Introducci\u00f3n<\/strong><\/h2>\n\n\n\n<p>Nuestro proyecto arduino para la asignatura de Dise\u00f1o de Sistemas Empotrados consiste en una m\u00e1quina expendedora arcade en donde el usuario:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Puede jugar distintos juegos a su placer. <\/li>\n\n\n\n<li>Puede obtener cr\u00e9ditos canjeables mediante puntuaciones objetivo dentro de los juegos.<\/li>\n\n\n\n<li>Obtener recompensas que pueden ser chicles, chocolatinas, etc (que sean esf\u00e9ricas), al canjear cr\u00e9ditos.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Material utilizado<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-columns are-vertically-aligned-center is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<figure class=\"wp-block-table is-style-regular\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\"><strong>Material<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Coste<\/strong><\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Placa Arduino UNO R3<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Protoboard<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Servomotor SG90<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">M\u00f3dulo Pantalla LCD 1602<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">M\u00f3dulo Receptor IR<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Mando a distancia<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Potenci\u00f3metro<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">LED (x2)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Resistencia 220\u03a9 (x3)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Cables Macho-Macho<\/td><td class=\"has-text-align-center\" data-align=\"center\">Proporcionado por la universidad<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Cables Macho-Hembra<\/td><td class=\"has-text-align-center\" data-align=\"center\">5\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Madera de contrachapado<\/td><td class=\"has-text-align-center\" data-align=\"center\">12.30\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">List\u00f3n de madera de pino<\/td><td class=\"has-text-align-center\" data-align=\"center\">2.40\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Tornillos, tuercas y clavos<\/td><td class=\"has-text-align-center\" data-align=\"center\">5.45\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Herramientas para trabajar con madera<\/td><td class=\"has-text-align-center\" data-align=\"center\">17\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Pintura<\/td><td class=\"has-text-align-center\" data-align=\"center\">5.75\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Botellas vac\u00edas<\/td><td class=\"has-text-align-center\" data-align=\"center\">0\u20ac (En propiedad)<\/td><\/tr><\/tbody><tfoot><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Coste total<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>47.9\u20ac<\/strong><\/td><\/tr><\/tfoot><\/table><\/figure>\n<\/div>\n<\/div>\n<\/div><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Esquema de conexiones<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/Screenshot-2022-12-19-142115-1024x590.png\" alt=\"\" class=\"wp-image-6166\" width=\"937\" height=\"539\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/Screenshot-2022-12-19-142115-1024x590.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/Screenshot-2022-12-19-142115-300x173.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/Screenshot-2022-12-19-142115-768x443.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/Screenshot-2022-12-19-142115.png 1332w\" sizes=\"auto, (max-width: 937px) 100vw, 937px\" \/><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Proceso de construcci\u00f3n<\/strong><\/h2>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>Rueda de recompensa<\/strong><\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.49-edited-1.jpeg\" alt=\"\" class=\"wp-image-6180\" width=\"278\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.49-edited-1.jpeg 480w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.49-edited-1-225x300.jpeg 225w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>La primera pieza a construir fue la rueda encargada de suministrar la recompensa. Para construirla, cortamos varias piezas redondas con la madera de contrachapado y las unimos con dos tornillos de madera para darle grosor. Le hicimos un agujero para transportar la recompensa hasta la salida, y pusimos dos planchas extra para dar sujeci\u00f3n al servo y al tornillo (que da sujeci\u00f3n a la estructura, quit\u00e1ndole peso al servomotor), uni\u00e9ndolos con dos piezas del list\u00f3n de madera para mantener firme la estructura.<\/p>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>Estructura<\/strong><\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.19-edited.jpeg\" alt=\"\" class=\"wp-image-6179\" width=\"334\" height=\"445\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.19-edited.jpeg 899w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.19-edited-225x300.jpeg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.37.19-edited-768x1024.jpeg 768w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Tras esto, montamos las siguientes piezas que componen la estructura de la m\u00e1quina con la madera de contrachapado y cerramos la estructura con piezas del list\u00f3n de madera en las esquinas de la misma para unirlos entre s\u00ed con tornillos de madera. Tambi\u00e9n construimos la bandeja donde aparecer\u00e1 la recompensa cuando el usuario lo canjee,&nbsp;con la madera de contrachapado en la parte baja y con trozos del list\u00f3n de madera en los laterales.<\/p>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>Montaje de componentes<\/strong><\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-medium is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-scaled.jpg\" alt=\"\" class=\"wp-image-6188\" width=\"444\" height=\"333\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-scaled.jpg 2560w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-300x225.jpg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-1024x768.jpg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-768x576.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-1536x1152.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/IMG_20221216_193156-edited-2048x1536.jpg 2048w\" sizes=\"auto, (max-width: 444px) 100vw, 444px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Tras la realizaci\u00f3n de la estructura, procedimos al montaje de los componentes en f\u00edsico y encajarlos dentro de la m\u00e1quina de la forma m\u00e1s \u00f3ptima posible para que los cables no sufran de doblarse o no lleguen adonde le corresponden. Hemos usado bridas para juntar algunos cables para que no est\u00e9n enredadas entre ellos y no est\u00e9n dispersas.<\/p>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>Pintura y dispensadora<\/strong><\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-768x1024.jpg\" alt=\"\" class=\"wp-image-6183\" width=\"314\" height=\"419\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-768x1024.jpg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-225x300.jpg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-1152x1536.jpg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-1536x2048.jpg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-19-at-03.31.3-scaled.jpg 1920w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Decidimos darle algo de color y poner una estructura dispensadora para almacenar las recompensas en la parte superior. Para el color, decidimos usar una paleta de colores t\u00edpicas de las cl\u00e1sicas m\u00e1quinas de chicles estadounidenses, rojo y gris plateado. Hemos usado pintura acr\u00edlica ya que es buena para pintar sobre madera. Para la dispensadora, hemos utilizado dos botellas vac\u00edas, una de t\u00e9 con lim\u00f3n y otra de coca-cola.<\/p>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-vivid-cyan-blue-color has-text-color\"><strong>Resultado final<\/strong><\/p>\n\n\n<div class=\"wp-block-image is-style-default\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19-768x1024.jpeg\" alt=\"\" class=\"wp-image-6184\" width=\"313\" height=\"417\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19-768x1024.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19-225x300.jpeg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19-1152x1536.jpeg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg 1200w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Problemas encontrados<\/strong><\/h2>\n\n\n\n<p><strong>Relacionado con la planificaci\u00f3n:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En la elecci\u00f3n de juegos, la primera idea en mente era hacer un \u00abSim\u00f3n dice\u00bb, pero con sonidos. Pero al ser muy usada en proyectos anteriores, se descart\u00f3.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Despu\u00e9s se tuvo la idea de una versi\u00f3n del Snake, pero al ser tan peque\u00f1a la pantalla LCD, no nos parec\u00eda muy c\u00f3modo de jugar. Una idea que pens\u00f3 era utilizar una matriz de LEDs para reemplazar la LCD, pero como queriamos aprovechar al m\u00e1ximo el kit proporcionado, reduciendo gastos externos, se descart\u00f3 tambi\u00e9n.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&nbsp;Se acab\u00f3 con la idea de implementar otro tipo de juegos donde sea c\u00f3modo jugar en la pantalla LCD, como ha sido el runner y el ahorcado.<\/li>\n<\/ul>\n\n\n\n<p><strong>Relacionado con el c\u00f3digo:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los c\u00f3digos de internet no se adaptan casi nada a nuestro c\u00f3digo, por lo que tuvimos que realizar grandes modificaciones, sobre todo el ahorcado que lo cambiamos casi entero.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Hacer el men\u00fa y los juegos, que gracias al struct y a que implementamos el programa lo m\u00e1s modular posible, se soluciono r\u00e1pido.<\/li>\n<\/ul>\n\n\n\n<p><strong>Relacionado con la m\u00e1quina:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El mecanismo giratorio para expulsar la recompensa: La pieza de giro del servomotor no era lo suficientemente grande y se coloc\u00f3 la pieza un poco ladeada.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El sensor IR: Se iba a dejar por dentro, pero la se\u00f1al no se transmit\u00eda muy bien a trav\u00e9s de la madera, as\u00ed que se dej\u00f3 por fuera.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El sistema para almacenar las recompensas: Se iba a utilizar un recipiente esf\u00e9rico, pero al tener la pieza giratoria un poco ladeada no ca\u00edan bien. Por lo que usamos las botellas como dispensadora.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>Demostraci\u00f3n<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Proyecto DSE - M\u00e1quina Expendedora Arcade\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/pD4MV9vpNQg?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"has-luminous-vivid-orange-color has-text-color wp-block-heading\"><strong>C\u00f3digo<\/strong><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Librer\u00eda para el control inal\u00e1mbrico\n#include &lt;IRremote.h&gt;\n\/\/ Librer\u00eda para la pantalla LCD 16x2\n#include &lt;LiquidCrystal.h&gt;\n\/\/ Librer\u00eda para el servomotor\n#include &lt;Servo.h&gt;\n\n\/\/ Control de botones del mando\n#define POWER       0xBA45FF00\n#define VOLUP       0XB946FF00\n#define FASTBACK    0XBB44FF00\n#define PLAY        0XBF40FF00\n#define FASTFORWARD 0XBC43FF00\n#define VOLDOWN     0XEA15FF00\n\/\/Inicializo los elementos que utilizaremos\n#define MENU     0\n#define AHORCADO  1\n#define RUNNER    2\n\/\/ N\u00ba de puntos para recompensa\n#define REWARD 150\n\/\/ Elementos del juego runner\n#define SPRITE_RUN1 1\n#define SPRITE_RUN2 2\n#define SPRITE_JUMP 3\n#define SPRITE_JUMP_UPPER '.'         \/\/ Use the '.' character for the head\n#define SPRITE_JUMP_LOWER 4\n#define SPRITE_TERRAIN_EMPTY ' '      \/\/ User the ' ' character\n#define SPRITE_TERRAIN_SOLID 5\n#define SPRITE_TERRAIN_SOLID_RIGHT 6\n#define SPRITE_TERRAIN_SOLID_LEFT 7\n#define HERO_HORIZONTAL_POSITION 1    \/\/ Horizontal position of hero on screen\n#define TERRAIN_WIDTH 16\n#define TERRAIN_EMPTY 0\n#define TERRAIN_LOWER_BLOCK 1\n#define TERRAIN_UPPER_BLOCK 2\n#define HERO_POSITION_OFF 0          \/\/ Hero is invisible\n#define HERO_POSITION_RUN_LOWER_1 1  \/\/ Hero is running on lower row (pose 1)\n#define HERO_POSITION_RUN_LOWER_2 2  \/\/                              (pose 2)\n#define HERO_POSITION_JUMP_1 3       \/\/ Starting a jump\n#define HERO_POSITION_JUMP_2 4       \/\/ Half-way up\n#define HERO_POSITION_JUMP_3 5       \/\/ Jump is on upper row\n#define HERO_POSITION_JUMP_4 6       \/\/ Jump is on upper row\n#define HERO_POSITION_JUMP_5 7       \/\/ Jump is on upper row\n#define HERO_POSITION_JUMP_6 8       \/\/ Jump is on upper row\n#define HERO_POSITION_JUMP_7 9       \/\/ Half-way down\n#define HERO_POSITION_JUMP_8 10      \/\/ About to land\n#define HERO_POSITION_RUN_UPPER_1 11 \/\/ Hero is running on upper row (pose 1)\n#define HERO_POSITION_RUN_UPPER_2 12 \/\/                              (pose 2)\n\/\/ Para el tama\u00f1o del array utilizado en el juego del ahorcado\n#define ARRAY_LENGTH(x) (sizeof(x) \/ sizeof((x)&#091;0]))\n\nLiquidCrystal lcd(7, 8, 9, 10, 11, 12);  \/\/ LCD y los pines utilizados\nconst int RECV_PIN = 3;                 \/\/Variable para el pin del sensor IR\nconst int servoPin = 5;                \/\/ Pin del servo motor \nconst int redLED = 4;                 \/\/ LED rojo que indicar\u00e1 que no va salir recompensa\nconst int greenLED = 2;              \/\/ LED verde para indicar que va a salir recompensa\n\n\nconst int N_GAMES = 2;                              \/\/ Constante para el n\u00famero m\u00e1ximo de juegos.\nstatic bool fin = false;                           \/\/ Variable para saber si hemos finalizado la partida del juego en el que estabamos.\nstatic unsigned int score = 0;                    \/\/ Variable para guardar el score de los juegos\nstatic unsigned int credits = 0;                 \/\/ Variable para guardar la cantidad de recompensas a canjear\nstatic bool on = false;                         \/\/ Variable para saber que hemos salido de la pantalla de inicio\nstatic unsigned int creditsTemp = 0;           \/\/ Variable para guardar los creditos que se han conseguido en la sesi\u00f3n actual de juego. \nstatic char terrainUpper&#091;TERRAIN_WIDTH + 1];  \/\/ Variable para el terreno superior del runner\nstatic char terrainLower&#091;TERRAIN_WIDTH + 1]; \/\/ Variable para el terreno inferior del runner\nbool buttonPushed = false;                  \/\/ Variable para saber si hemos pulsado el bot\u00f3n de saltar en el runner\nServo gumballServo;                       \/\/ El servo que dispensar\u00e1 la recompensa\n\n\/* ESTRUCTURA PARA GESTIONAR EL MENU EN EL QUE NOS SITUAMOS Y COMO SE DEBE COMPORTAR EL CONTROL\n  int state: Marca el estado en el que nos encontramos:\n      - 0 -&gt; si nos encontramos en el men\u00fa de selecci\u00f3n de juego.\n            - 1 -&gt; si nos encontramos en el ahorcado.\n            - 2 -&gt; si nos encontramos en el runner.\n  int mod_controll: Marca el modo de comportamiento que tiene que tener el mando, puede ser:\n        - 0 -&gt; si nos encontramos en el men\u00fa de selecci\u00f3n de juego.\n            - 1 -&gt; si nos encontramos en el ahorcado.\n            - 2 -&gt; si nos encontramos en el runner.\n    int movMenu: Es una variable utilizada para moverse por el men\u00fa de selecci\u00f3n.\n*\/\nstruct Mod_state {\n  int state;\n    int mod_controll;\n  int movMenu;\n};\n\nMod_state mS; \/\/ Declaro la variable que utilizar\u00e1 la estructura. \n\nvoid setup() {\n  lcd.begin(16, 2); \/\/ Se define el LCD de 16x2\n  Serial.begin(9600); \/\/ Se inicia el monitor serie\n  Serial.println(\"IR Receiver Button Decode\");  \n  IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); \/\/ Se inicia el IR\n  mS.state = MENU; \/\/ Inicializo en 0, para empezar en el men\u00fa.\n  mS.mod_controll = MENU; \/\/ Inicializo en 0, para empezar en el men\u00fa.\n  mS.movMenu = 0; \/\/ Inicializo en 0, para empezar en el Ahorcado\n  randomSeed(analogRead(6));\n  pinMode(redLED, OUTPUT);\n  pinMode(greenLED, OUTPUT);\n}\n\n\/\/ M\u00e9todo encargado de definir en que estado se encuentra la m\u00e1quina (Men\u00fa o Juegos)\nvoid stateControl () {\n  if (!on) initScreen ();\n  score = 0;\n  creditState();\n  switch (mS.state) {\n    case 0: modMenu(); break;\n    case 1: modAhorcado(); break;\n    case 2: modRunner(); break;\n  }\n}\n\n\/******************************************MENU-GENERAL*********************************************\/\n\n\/\/M\u00e9todo que muestra una pantalla de inicio que no desaparecer\u00e1 hasta pulsar un bot\u00f3n\nvoid initScreen () {\n  while(!on){\n    digitalWrite(redLED, LOW);\n    digitalWrite(greenLED, LOW);\n    lcd.setCursor(2, 0);\n    lcd.print(\"ArdaneExpend\");\n    lcd.setCursor(0, 1);\n    lcd.print(\"Press any button\");\n    delay(1250);\n    lcd.clear();  \n    delay(750);\n    if(IrReceiver.decode()) {\n        on = true;\n        IrReceiver.resume();\n    }     \n  }   \n}\n\n\/\/ M\u00e9todo encargado de mostrar en pantalla los creditos ganados en la sesi\u00f3n de juego, y los totales\nvoid endGameScreen () {\n  lcd.clear();\n  lcd.setCursor(1, 0);\n  lcd.print(\"Credits earned\");\n  lcd.setCursor(8, 1);\n  lcd.print(creditsTemp);\n  delay(1250);\n  lcd.setCursor(1, 0);\n  lcd.print(\"Total Credits:\");\n  lcd.setCursor(8, 1);\n  lcd.print(credits);\n  delay(1250);\n  lcd.clear();\n}\n\n\/\/ M\u00e9todo que se encarga del men\u00fa.\nvoid modMenu () {\n    creditsTemp = 0; \/\/ Como estamos en el menu, los cr\u00e9ditos temporales desaparecen          \n    mS.mod_controll = MENU; \/\/ Pone el mando en modo men\u00fa.\n    menuOptions();\n    if (IrReceiver.decode()) { \/\/ Si recibimos datos del mando\n        controllerControl();\n        lcd.clear(); \/\/ Limpiamos la LCD\n      IrReceiver.resume(); \/\/ Recibimos el siguiente valor\n    }\n}\n\n\/\/ M\u00e9todo encargado desumar un cr\u00e9dito\nvoid creditsUp() {\n  credits++;\n  creditState();\n}\n\n\/\/ M\u00e9todo que evalua si hay creditos, si los hay ilumina el LED verde, si no, el LED rojo\nvoid creditState() {\n  if(credits &gt; 0) {\n    digitalWrite(redLED, LOW);\n    digitalWrite(greenLED, HIGH);\n  }\n  else {\n    digitalWrite(redLED, HIGH);\n    digitalWrite(greenLED, LOW); \n  }\n}\n\n\/\/ M\u00e9todo encargado de dar la recompensa al llegar a 50 puntos\nvoid rewardTime(){\n  if (credits &gt;= 1){\n    \/\/Serial.println(\"SOLTANDO RECOMPENSA\");\n    int i=0;\n    digitalWrite(redLED, LOW);\n    digitalWrite(greenLED, HIGH);\n    gumballServo.attach(servoPin); \/\/ Conectamos el servo\n    gumballServo.write(130);    \n    delay(50);\n    int d=15;\n    for (int i=130;i&gt;=15;i--){        \n      gumballServo.write(i); \/\/ Rotamos el servo\n      delay(d);\n    }\n    delay(100);\n    for (int i=15;i&lt;=130;i++){ \/\/ Devolvemos el servo a la posici\u00f3n inicial\n      gumballServo.write(i);   \n      delay(d);\n    }   \n    delay(50);\n    gumballServo.detach(); \/\/ Desconectamos el servo\n    delay(100);\n    credits--;\n  }\n  else {\n    lcd.setCursor(3, 0);\n    lcd.print(\"NO CREDITS\");\n    lcd.setCursor(2, 1);\n    lcd.print(\"PLAY FOR WIN\");\n    delay (1500);\n  }\n}\n\n\/*********************************************RUNNER************************************************\/\n\n\/\/ M\u00e9todo que se encarga del runner\nvoid modRunner () {\n  Serial.println(\"RUNNER\");\n  fin = false;\n  lcd.clear();\n  initializeGraphics(); \/\/ Inicializan los gr\u00e1ficos del juego del runner\n  while (!fin){\n    playRunner();\n  }\n  endGameScreen();\n}\n\n\/\/ M\u00e9todo que inicializa los gr\u00e1ficos del juego runner\nvoid initializeGraphics() {\n  static byte graphics&#091;] = {\n    \/\/ Run position 1\n    B01100,\n    B01100,\n    B00000,\n    B01110,\n    B11100,\n    B01100,\n    B11010,\n    B10011,\n    \/\/ Run position 2\n    B01100,\n    B01100,\n    B00000,\n    B01100,\n    B01100,\n    B01100,\n    B01100,\n    B01110,\n    \/\/ Jump\n    B01100,\n    B01100,\n    B00000,\n    B11110,\n    B01101,\n    B11111,\n    B10000,\n    B00000,\n    \/\/ Jump lower\n    B11110,\n    B01101,\n    B11111,\n    B10000,\n    B00000,\n    B00000,\n    B00000,\n    B00000,\n    \/\/ Ground\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    \/\/ Ground right\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    \/\/ Ground left\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n  };\n  int i;\n  for (i = 0; i &lt; 7; ++i) {\n    lcd.createChar(i + 1, &amp;graphics&#091;i * 8]);\n  }\n  for (i = 0; i &lt; TERRAIN_WIDTH; ++i) {\n    terrainUpper&#091;i] = SPRITE_TERRAIN_EMPTY;\n    terrainLower&#091;i] = SPRITE_TERRAIN_EMPTY;\n  }\n}\n\n\/\/ M\u00e9todo que se encarga de que el terreno avance\nvoid advanceTerrain(char* terrain, byte newTerrain) {\n  for (int i = 0; i &lt; TERRAIN_WIDTH; ++i) {\n    char current = terrain&#091;i];\n    char next = (i == TERRAIN_WIDTH - 1) ? newTerrain : terrain&#091;i + 1];\n    switch (current) {\n      case SPRITE_TERRAIN_EMPTY:\n        terrain&#091;i] = (next == SPRITE_TERRAIN_SOLID) ? SPRITE_TERRAIN_SOLID_RIGHT : SPRITE_TERRAIN_EMPTY;\n        break;\n      case SPRITE_TERRAIN_SOLID:\n        terrain&#091;i] = (next == SPRITE_TERRAIN_EMPTY) ? SPRITE_TERRAIN_SOLID_LEFT : SPRITE_TERRAIN_SOLID;\n        break;\n      case SPRITE_TERRAIN_SOLID_RIGHT:\n        terrain&#091;i] = SPRITE_TERRAIN_SOLID;\n        break;\n      case SPRITE_TERRAIN_SOLID_LEFT:\n        terrain&#091;i] = SPRITE_TERRAIN_EMPTY;\n        break;\n    }\n  }\n}\n\n\/\/ M\u00e9todo que se encarga de sibujar al personaje, la escena y los puntos, adem\u00e1s, devuelve si se a producido una colisi\u00f3n.\nbool drawHero(byte position, char* terrainUpper, char* terrainLower, unsigned int score) {\n  bool collide = false;\n  char upperSave = terrainUpper&#091;HERO_HORIZONTAL_POSITION];\n  char lowerSave = terrainLower&#091;HERO_HORIZONTAL_POSITION];\n  byte upper, lower;\n  switch (position) {\n    case HERO_POSITION_OFF:\n      upper = lower = SPRITE_TERRAIN_EMPTY;\n      break;\n    case HERO_POSITION_RUN_LOWER_1:\n      upper = SPRITE_TERRAIN_EMPTY;\n      lower = SPRITE_RUN1;\n      break;\n    case HERO_POSITION_RUN_LOWER_2:\n      upper = SPRITE_TERRAIN_EMPTY;\n      lower = SPRITE_RUN2;\n      break;\n    case HERO_POSITION_JUMP_1:\n    case HERO_POSITION_JUMP_8:\n      upper = SPRITE_TERRAIN_EMPTY;\n      lower = SPRITE_JUMP;\n      break;\n    case HERO_POSITION_JUMP_2:\n    case HERO_POSITION_JUMP_7:\n      upper = SPRITE_JUMP_UPPER;\n      lower = SPRITE_JUMP_LOWER;\n      break;\n    case HERO_POSITION_JUMP_3:\n    case HERO_POSITION_JUMP_4:\n    case HERO_POSITION_JUMP_5:\n    case HERO_POSITION_JUMP_6:\n      upper = SPRITE_JUMP;\n      lower = SPRITE_TERRAIN_EMPTY;\n      break;\n    case HERO_POSITION_RUN_UPPER_1:\n      upper = SPRITE_RUN1;\n      lower = SPRITE_TERRAIN_EMPTY;\n      break;\n    case HERO_POSITION_RUN_UPPER_2:\n      upper = SPRITE_RUN2;\n      lower = SPRITE_TERRAIN_EMPTY;\n      break;\n  }\n  if (upper != ' ') {\n    terrainUpper&#091;HERO_HORIZONTAL_POSITION] = upper;\n    collide = (upperSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n  }\n  if (lower != ' ') {\n    terrainLower&#091;HERO_HORIZONTAL_POSITION] = lower;\n    collide |= (lowerSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n  }\n  byte digits = (score &gt; 9999) ? 5 : (score &gt; 999) ? 4 : (score &gt; 99) ? 3 : (score &gt; 9) ? 2 : 1;\n  \/\/ Dibuja el escenario\n  terrainUpper&#091;TERRAIN_WIDTH] = '\\0';\n  terrainLower&#091;TERRAIN_WIDTH] = '\\0';\n  char temp = terrainUpper&#091;16 - digits];\n  terrainUpper&#091;16 - digits] = '\\0';\n  lcd.setCursor(0, 0);\n  lcd.print(terrainUpper);\n  terrainUpper&#091;16 - digits] = temp;\n  lcd.setCursor(0, 1);\n  lcd.print(terrainLower);\n  lcd.setCursor(16 - digits, 0);\n  lcd.print(score);\n  terrainUpper&#091;HERO_HORIZONTAL_POSITION] = upperSave;\n  terrainLower&#091;HERO_HORIZONTAL_POSITION] = lowerSave;\n  return collide;\n}\n\n\/\/ M\u00e9todo que permite jugar al runner (Se debe ejecutar en un bucle hasta que se pulse el bot\u00f3n POWER)\nvoid playRunner() {\n  static byte heroPos = HERO_POSITION_RUN_LOWER_1;\n  static byte newTerrainType = TERRAIN_EMPTY;\n  static byte newTerrainDuration = 1;\n  static bool blink = false;\n  static unsigned int nRewards = 0;\n  static bool playing = false;\n  if (!playing) {\n    drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower, score);\n    if (blink) {\n      lcd.setCursor(0, 0);\n      lcd.print(\"Press Start\");\n    }\n    delay(250);\n    blink = !blink;\n    if (IrReceiver.decode()) {\n      if (IrReceiver.decodedIRData.decodedRawData == POWER) exitGame();\n      else {\n        initializeGraphics();\n        heroPos = HERO_POSITION_RUN_LOWER_1;\n        playing = true;\n        Serial.println(\"JUGAR = TRUE\");\n        score = 0;\n        nRewards = 0;\n      }\n      IrReceiver.resume();\n    }\n    return;\n  }\n  \/\/ Desplazar el terreno a la izquierda\n  advanceTerrain(terrainLower, newTerrainType == TERRAIN_LOWER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);\n  advanceTerrain(terrainUpper, newTerrainType == TERRAIN_UPPER_BLOCK ? SPRITE_TERRAIN_SOLID : SPRITE_TERRAIN_EMPTY);\n  \/\/ Se hace un terreno nuevo\n  if (--newTerrainDuration == 0) {\n    if (newTerrainType == TERRAIN_EMPTY) {\n      newTerrainType = (random(3) == 0) ? TERRAIN_UPPER_BLOCK : TERRAIN_LOWER_BLOCK;\n      newTerrainDuration = 2 + random(10);\n    } else {\n      newTerrainType = TERRAIN_EMPTY;\n      newTerrainDuration = 10 + random(10);\n    }\n  }\n  if (IrReceiver.decode()) {\n    controllerControl();\n    if (buttonPushed){  \n      if (heroPos &lt;= HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1;\n      buttonPushed = false;\n    }\n    IrReceiver.resume();\n  }\n  if (drawHero(heroPos, terrainUpper, terrainLower, score)) {\n    playing = false;\n  } else {\n    if (heroPos == HERO_POSITION_RUN_LOWER_2 || heroPos == HERO_POSITION_JUMP_8) {\n      heroPos = HERO_POSITION_RUN_LOWER_1;\n    } else if ((heroPos &gt;= HERO_POSITION_JUMP_3 &amp;&amp; heroPos &lt;= HERO_POSITION_JUMP_5) &amp;&amp; terrainLower&#091;HERO_HORIZONTAL_POSITION] != SPRITE_TERRAIN_EMPTY) {\n      heroPos = HERO_POSITION_RUN_UPPER_1;\n    } else if (heroPos &gt;= HERO_POSITION_RUN_UPPER_1 &amp;&amp; terrainLower&#091;HERO_HORIZONTAL_POSITION] == SPRITE_TERRAIN_EMPTY) {\n      heroPos = HERO_POSITION_JUMP_5;\n    } else if (heroPos == HERO_POSITION_RUN_UPPER_2) {\n      heroPos = HERO_POSITION_RUN_UPPER_1;\n    } else {\n      ++heroPos;\n    }\n    score++;\n    if ((score\/(nRewards + 1)) == REWARD){\n      creditsTemp++;     \n      creditsUp();\n      nRewards ++;\n    }\n  }\n  delay(100);\n}\n\n\/**********************************************AHORCADO*********************************************\/\n\n\/*\n  Ahorcado: lista de palabras\n*\/\nconst char* wordList&#091;] = {\n  \"arduino\",\n  \"proyecto\",\n  \"juego\",\n  \"mesa\",\n  \"resistencia\",\n  \"cable\",\n  \"pizarra\"\n};\n\n\/*\n  Ahorcado: dibujo de monigote\n*\/\nvoid hangman_stick(int state)\n{\n  #define vHead     1\n  #define vBody     2\n  #define vRightArm 3\n  #define vLeftArm  4\n  #define vRightLeg 5\n  #define vLeftLeg  6\n  #define vGameOver 7\n\n  byte head&#091;]        = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x00, 0x00, 0x00 };\n  byte topBody&#091;]     = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x04, 0x04, 0x04 };\n  byte bottomBody&#091;]  = { 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };\n  byte rightArm&#091;]    = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x05, 0x06, 0x04 };\n  byte leftArm&#091;]     = { 0x1C, 0x04, 0x04, 0x0E, 0x0E, 0x15, 0x0E, 0x04 };\n  byte rightLeg&#091;]    = { 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00 };\n  byte leftLeg&#091;]     = { 0x04, 0x04, 0x0A, 0x0A, 0x11, 0x00, 0x00, 0x00 };\n\n  switch (state)\n  {\n    case vHead:  \n      lcd.createChar(1, head);\n      break;\n    case vBody:\n      lcd.createChar(1, topBody);\n      lcd.createChar(3, bottomBody);\n      break;\n    case vRightArm:\n      lcd.createChar(1, rightArm);\n      break;\n    case vLeftArm:\n      lcd.createChar(1, leftArm);\n      break;\n    case vRightLeg:\n      lcd.createChar(3, rightLeg);\n      break;\n    case vLeftLeg:\n      lcd.createChar(3, leftLeg);\n      break;\n    default:\n      break;\n  };\n}\n\n\/*\n  Ahorcado: impresi\u00f3n de letra\n*\/\nvoid hangman_p(int pos, char n, int f)\n{\n  lcd.setCursor(pos+3, f);\n  lcd.print(n);\n  lcd.setCursor(pos+3, 1);\n}\n\n\/\/ Comprueba si las letras estan en la palabra.\nbool comprobarLetra(char word, const char* pick, int tam, char selected&#091;]) {\n  bool flag = false;\n  if (word == '_' || word == 'X') flag = true;\n  else {\n    for(int i = 0; i &lt; tam; i++) {\n      if(pick&#091;i] == word){\n        selected&#091;i] = word;      \n        hangman_p(i, word, 0);\n        if(!flag) flag = true;      \n      }\n    }  \n  }\n  return flag;\n}\n\nbool compararPalabras (char* selected,const char* pick,int tam) {\n  bool flag = true;\n  int i = 0;\n  while (flag &amp;&amp; i &lt; tam){\n    if (selected&#091;i] != pick&#091;i]) flag = false;\n    i++;\n  }\n  return flag;\n}\n\n\/*\n  Ahorcado: dibujo de men\u00fa de tablero\n*\/\nvoid hangman_board(int pick)\n{\n  byte topLeft&#091;]     = { 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10 };\n  byte topRight&#091;]    = { 0x1C, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00 };\n  byte bottomLeft&#091;]  = { 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x1F, 0x1F };\n  byte bottomRight&#091;] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };\n  \n  \/\/ Establecer los caracteres personalizados\n  lcd.createChar(0, topLeft);\n  lcd.createChar(1, topRight);\n  lcd.createChar(2, bottomLeft);\n  lcd.createChar(3, bottomRight);\n  \n  \/\/ Dibujar\n  lcd.clear();\n  lcd.home();\n  lcd.write((int) 0);\n  lcd.write((int) 1);\n  lcd.setCursor(0,1);\n  lcd.write((int) 2);\n  lcd.write((int) 3);\n\n  const char* word = strdup(wordList&#091;pick]);\n  \/\/ Cargar las letras a adivinar\n  for (int i = 0; i &lt; String(word).length(); i++) {\n    lcd.setCursor(i+3, 0);\n    lcd.print('_');\n  }\n  \/\/ Proceder a cargar men\u00fa\n  hangman_loop(word);\n}\n\n\/*\n  Ahorcado: derrota\n*\/\nvoid hangman_gameOver()\n{\n  lcd.clear();\n  lcd.setCursor(6,0);\n  lcd.print(\"GAME\");\n  lcd.setCursor(6,1);\n  lcd.print(\"OVER\");\n  delay(1000);\n}\n\n\/*\n  Ahorcado: victoria\n*\/\nvoid hangman_victory()\n{\n  lcd.clear();\n  lcd.setCursor(4,0);\n  lcd.print(\"GANASTE\");\n  lcd.setCursor(4,1);\n  lcd.print(\"MAESTRO\");\n  delay(1000);\n}\n\n\/*\n  Ahorcado: funci\u00f3n de bucle\n*\/\nvoid hangman_loop(const char *pick)\n{\n  int pos = 0;\n  int fails = 0;\n  int wordSize = String(pick).length();\n  char guess&#091;] = \"abcdefghijklmnopqrstuvwxyz\";\n  char aciertos&#091;wordSize];\n  \/\/ Cargar letras visibles\n  for (int i = 0; i &lt; 13; i++) {\n    hangman_p(i,guess&#091;i],1);\n  }\n  lcd.setCursor(3,1);\n\n  \/\/ Mostrar cursor \n  lcd.blink();\n \n  \/\/ Bucle de men\u00fa de selecci\u00f3n\n  while (!fin) {\n    if (IrReceiver.decode()) {\n      switch(IrReceiver.decodedIRData.decodedRawData) {\n        \/\/ Men\u00fa: Cierre manual del juego\n        case POWER: fin = true; break;\n        \/\/ Men\u00fa: Selecci\u00f3n de letra\n        case FASTBACK: {\n          \/\/ Seleccionar letra del alfabeto previa                \n          if (pos == 0) pos = 25;\n          else pos --;\n          for (int i = 0; i &lt; 13; i++)\n            hangman_p(i, pos + i &lt; 26 ? guess&#091;pos + i] : '_',1);\n          lcd.setCursor(3,1);          \n          break;\n        }\n        case FASTFORWARD: {\n          \/\/ Seleccionar letra del alfabeto siguiente\n          if (pos == 25) pos = 0;\n          else pos ++;\n          for (int i = 0; i &lt; 13; i++)\n            hangman_p(i, pos + i &lt; 26 ? guess&#091;pos + i] : '_',1);\n          lcd.setCursor(3,1); \n          break;\n        }\n        \/\/ Men\u00fa: Confirmaci\u00f3n de letra\n        case PLAY: {\n          \/\/ Determinar si se ha escogido la letra correcta\n          bool guessed = comprobarLetra(guess&#091;pos], pick, wordSize, aciertos);\n          if (guessed) {\n            \/\/ Desactivar selecci\u00f3n si se ha acertado\n            guess&#091;pos] = '_';\n            \/\/ Si est\u00e1n todas acertadas, cantar victoria\n            if (compararPalabras(aciertos, pick, wordSize)) {\n              creditsTemp ++;\n              creditsUp();\n              hangman_victory();\n              int newpick = random(ARRAY_LENGTH(wordList));\n              hangman_board(newpick);                         \n            }\n          } else {\n            guess&#091;pos] = 'X';\n            \/\/ Contabilizar fallo\n            fails += 1;\n            \/\/ Si se han gastado todas las oportunidades, perder\n            if (fails &gt;= vGameOver) {\n              fin = true;\n              hangman_gameOver();\n            }\n            \/\/ Si no, dibujar ahorcado\n            else {\n              hangman_stick(fails);\n              lcd.setCursor(pos+3, 1);\n            }\n          }\n        }; break;\n      };\n      IrReceiver.resume();\n      delay (100);\n    }\n  }\n  lcd.noBlink(); \/\/ Quitar el cursor\n}\n\n\/*\n  Ahorcado: funci\u00f3n de inicializaci\u00f3n\n*\/\nvoid modAhorcado()\n{\n  Serial.println(\"AHORCADO\");\n  fin = false;\n  int pick = random(ARRAY_LENGTH(wordList));\n  \/\/ Inicializar men\u00fa de tablero\n  hangman_board(pick);\n  exitGame();\n  endGameScreen();\n}\n\n\/******************************************MENU-GENERAL*********************************************\/\n\n\/\/ M\u00e9todo para salir de los juegos\nvoid exitGame () {\n  fin = true;\n  mS.state = MENU;\n  mS.mod_controll = MENU;\n  lcd.clear();\n}\n\n\/\/ M\u00e9todo que define el comportamiento del mando seg\u00fan el modo en el que est\u00e9.\nvoid controllerControl () {\n  switch (mS.mod_controll) {\n    case 0: controlMenu(); break;\n    case 2: controlRunner();break;\n  }\n}\n\n\/\/ M\u00e9todo que define el funcionamiento del mando en el men\u00fa de selecci\u00f3n.\nvoid controlMenu () {\n  switch(IrReceiver.decodedIRData.decodedRawData) {\n   case FASTBACK: desplMenuDec(); break; \/\/ FAST BACK = Desplazarse a la izquierda\n   case PLAY: selectGame(); break; \/\/ PLAY\/PAUSE = Deleccionar la opci\u00f3n que aparezca en pantalla.\n   case FASTFORWARD: desplMenuInc(); break; \/\/ FAST FORWARD = Desplazarse a la derecha\n   case POWER: on = false; break; \/\/POWER = Devuelve la m\u00e1quina a la pantalla de inicio\n  }\n}\n\n\/\/ M\u00e9todo que define a que juego o opci\u00f3n se entra al seleccionar una opci\u00f3n en el men\u00fa\nvoid selectGame () {\n  if (mS.state == 0) {\n    switch (mS.movMenu) {\n      case 0: mS.state = 1; break;\n        case 1: mS.state = 2; mS.mod_controll = RUNNER; break;\n        case 2: rewardTime(); break;\n    }\n  }\n}\n\n\/\/ M\u00e9todo que incrementa el movimiento en el menu (simula desplazarse a la derecha)\nvoid desplMenuInc () {\n  if (mS.movMenu &lt; N_GAMES) mS.movMenu++;\n    else mS.movMenu = 0;\n}\n\n\/\/ M\u00e9todo que decrementa el movimiento en el menu (simula desplazarse a la izquierda)\nvoid desplMenuDec () {\n  if (mS.movMenu &gt; 0) mS.movMenu--;\n    else mS.movMenu = N_GAMES;\n}\n\n\/\/ M\u00e9todo que muestra las opciones del men\u00fa en la LCD\nvoid menuOptions () {\n  switch (mS.movMenu){\n    case 0:\n      lcd.setCursor(4, 0);\n      lcd.print(\"Ahorcado!\");\n    break;\n    case 1:\n      lcd.setCursor(5, 0);\n      lcd.print(\"Runner!\");\n    break;\n    case 2:\n      lcd.setCursor(5, 0);\n      lcd.print(\"Reward!\");\n      lcd.setCursor(3, 1);\n      lcd.print(\"Credits:\");\n      lcd.setCursor(12, 1);\n      lcd.print(credits);\n    \n    break;\n  }\n}\n\n\/************************************************RUNNER*********************************************\/\n\n\/\/ M\u00e9todo que define el funcionamiento del mando en el men\u00fa de selecci\u00f3n.\nvoid controlRunner () {\n  switch(IrReceiver.decodedIRData.decodedRawData) {\n   case POWER: exitGame(); break;          \/\/ POWER = Permite salir al me\u00fa principal \n   case PLAY: buttonPushed = true; break; \/\/ PLAY\/PAUSE = Indica que el personaje debe saltar.\n  }\n}\n\n\/*********************************************PRUEBAS***********************************************\/\n\n\/\/ M\u00e9todo que muestra por el monitor serial el bot\u00f3n pulsado. USADO PARA PRUEBAS\nvoid bottonPress (){\n  if(IrReceiver.decode()) Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX);\n  IrReceiver.resume();\n  delay(100);\n}\nvoid loop() {      \n  stateControl();\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Autores: Stefan Rodolfo Gonzales Nagybabi, Rub\u00e9n Vicente Benito, Francisco G\u00f3mez Garc\u00eda Introducci\u00f3n Nuestro proyecto arduino para la asignatura de Dise\u00f1o de Sistemas Empotrados consiste en una m\u00e1quina expendedora arcade en donde el usuario: Material&#46;&#46;&#46;<\/p>\n","protected":false},"author":56,"featured_media":6184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,16],"class_list":["post-6162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino","tag-urjc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>M\u00e1quina Expendedora Arcade - Proyectos con Arduino.<\/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:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"M\u00e1quina Expendedora Arcade - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Autores: Stefan Rodolfo Gonzales Nagybabi, Rub\u00e9n Vicente Benito, Francisco G\u00f3mez Garc\u00eda Introducci\u00f3n Nuestro proyecto arduino para la asignatura de Dise\u00f1o de Sistemas Empotrados consiste en una m\u00e1quina expendedora arcade en donde el usuario: Material&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-21T20:20:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-21T20:20:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"1600\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"M\u00e1quina Expendedora Arcade\",\"datePublished\":\"2022-12-21T20:20:12+00:00\",\"dateModified\":\"2022-12-21T20:20:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/\"},\"wordCount\":794,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg\",\"keywords\":[\"Arduino\",\"urjc\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/\",\"name\":\"M\u00e1quina Expendedora Arcade - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg\",\"datePublished\":\"2022-12-21T20:20:12+00:00\",\"dateModified\":\"2022-12-21T20:20:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/12\\\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg\",\"width\":1200,\"height\":1600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-expendedora-arcade\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"M\u00e1quina Expendedora Arcade\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"M\u00e1quina Expendedora Arcade - Proyectos con Arduino.","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:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/","og_locale":"es_ES","og_type":"article","og_title":"M\u00e1quina Expendedora Arcade - Proyectos con Arduino.","og_description":"Autores: Stefan Rodolfo Gonzales Nagybabi, Rub\u00e9n Vicente Benito, Francisco G\u00f3mez Garc\u00eda Introducci\u00f3n Nuestro proyecto arduino para la asignatura de Dise\u00f1o de Sistemas Empotrados consiste en una m\u00e1quina expendedora arcade en donde el usuario: Material&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2022-12-21T20:20:12+00:00","article_modified_time":"2022-12-21T20:20:14+00:00","og_image":[{"width":1200,"height":1600,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/"},"author":{"name":"","@id":""},"headline":"M\u00e1quina Expendedora Arcade","datePublished":"2022-12-21T20:20:12+00:00","dateModified":"2022-12-21T20:20:14+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/"},"wordCount":794,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg","keywords":["Arduino","urjc"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/","name":"M\u00e1quina Expendedora Arcade - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg","datePublished":"2022-12-21T20:20:12+00:00","dateModified":"2022-12-21T20:20:14+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/12\/WhatsApp-Image-2022-12-20-at-19.36.19.jpeg","width":1200,"height":1600},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-expendedora-arcade\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"M\u00e1quina Expendedora Arcade"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/56"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=6162"}],"version-history":[{"count":15,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6162\/revisions"}],"predecessor-version":[{"id":6206,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/6162\/revisions\/6206"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/6184"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=6162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=6162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=6162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}