{"id":68,"date":"2024-08-27T15:34:58","date_gmt":"2024-08-27T15:34:58","guid":{"rendered":"https:\/\/proveedoracano.com\/blog\/?p=68"},"modified":"2024-08-27T21:14:51","modified_gmt":"2024-08-27T21:14:51","slug":"juego-arduino01","status":"publish","type":"post","link":"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/","title":{"rendered":"Incre\u00edble Juego de Corredor con Arduino"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_75 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Contenido<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Crea_tu_Propio_Juego_de_Corredor_con_Arduino_%C2%A1Esquiva_Obstaculos_y_Gana_Puntos\" >Crea tu Propio Juego de Corredor con Arduino: \u00a1Esquiva Obst\u00e1culos y Gana Puntos!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Materiales_Necesarios\" >Materiales Necesarios<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Conexion_del_Hardware\" >Conexi\u00f3n del Hardware<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Codigo_Fuente_del_Juego\" >C\u00f3digo Fuente del Juego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Personalizacion_del_Juego\" >Personalizaci\u00f3n del Juego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Prueba_y_Mejora\" >Prueba y Mejora<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Conclusion\" >Conclusi\u00f3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Video_juego_con_arduino_corredor\" >Video juego con arduino corredor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/proveedoracano.com\/blog\/juego-arduino01\/#Simulacion_con_Tinkercad\" >Simulaci\u00f3n con Tinkercad<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Crea_tu_Propio_Juego_de_Corredor_con_Arduino_%C2%A1Esquiva_Obstaculos_y_Gana_Puntos\"><\/span>Crea tu Propio Juego de Corredor con Arduino: \u00a1Esquiva Obst\u00e1culos y Gana Puntos!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Si eres un entusiasta de la electr\u00f3nica y la programaci\u00f3n, este proyecto es perfecto para ti. Hoy aprender\u00e1s a crear un emocionante juego de corredor con Arduino, donde tu objetivo ser\u00e1 esquivar obst\u00e1culos y acumular la mayor cantidad de puntos posible. Utilizando una pantalla LCD, un m\u00f3dulo I2C, una protoboard y un interruptor, construir\u00e1s un juego simple pero entretenido que te permitir\u00e1 mejorar tus habilidades con Arduino.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Materiales_Necesarios\"><\/span>Materiales Necesarios<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/UNO-CH340\">Arduino UNO o compatible<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/LCD1602\">Pantalla LCD 16&#215;2<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/adaptador-I2C\">M\u00f3dulo I2C<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/protoboard170\">Protoboard<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/index.php?category_id=0&amp;search=dupont&amp;submit_search=&amp;route=product%2Fsearch\">Cables de conexi\u00f3n<\/a><\/strong><\/li>\n\n\n\n<li><strong><a href=\"https:\/\/proveedoracano.com\/eshop\/microswitch-6x6x5mm\">Interruptor o bot\u00f3n<\/a><\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conexion_del_Hardware\"><\/span> Conexi\u00f3n del Hardware<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"462\" src=\"https:\/\/proveedoracano.com\/blog\/wp-content\/uploads\/2024\/08\/image-1.png\" alt=\"Conexi\u00f3n para juego con Arduino\" class=\"wp-image-70\" srcset=\"https:\/\/proveedoracano.com\/blog\/wp-content\/uploads\/2024\/08\/image-1.png 968w, https:\/\/proveedoracano.com\/blog\/wp-content\/uploads\/2024\/08\/image-1-300x143.png 300w, https:\/\/proveedoracano.com\/blog\/wp-content\/uploads\/2024\/08\/image-1-768x367.png 768w\" sizes=\"(max-width: 968px) 100vw, 968px\" \/><\/figure>\n\n\n\n<p>Para empezar, realiza las siguientes conexiones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pantalla LCD<\/strong>: Conecta la pantalla al Arduino utilizando el m\u00f3dulo I2C. Esto simplifica las conexiones y el c\u00f3digo, permiti\u00e9ndote controlar la pantalla con solo dos pines.<\/li>\n\n\n\n<li><strong>Interruptor<\/strong>: Conecta el interruptor a un pin digital del Arduino (por ejemplo, el pin 2) y a tierra. Este ser\u00e1 el control para hacer que el corredor salte.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Codigo_Fuente_del_Juego\"><\/span>C\u00f3digo Fuente del Juego<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Este juego de corredor presenta un personaje que corre y debe saltar para esquivar los obst\u00e1culos que aparecen desde la derecha de la pantalla. A medida que el personaje avanza sin chocar, acumula puntos.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;LiquidCrystal.h&gt;\n\n#define PIN_BUTTON 2\n#define PIN_AUTOPLAY 1\n#define PIN_READWRITE 10\n#define PIN_CONTRAST 12\n\n#define SPRITE_RUN1 1\n#define SPRITE_RUN2 2\n#define SPRITE_JUMP 3\n#define SPRITE_JUMP_UPPER '.'         \/\/ Usa el car\u00e1cter '.' para la cabeza\n#define SPRITE_JUMP_LOWER 4\n#define SPRITE_TERRAIN_EMPTY ' '      \/\/ Usa el car\u00e1cter ' ' para vac\u00edo\n#define SPRITE_TERRAIN_SOLID 5\n#define SPRITE_TERRAIN_SOLID_RIGHT 6\n#define SPRITE_TERRAIN_SOLID_LEFT 7\n\n#define HERO_HORIZONTAL_POSITION 1    \/\/ Posici\u00f3n horizontal del h\u00e9roe en la pantalla\n\n#define TERRAIN_WIDTH 16\n#define TERRAIN_EMPTY 0\n#define TERRAIN_LOWER_BLOCK 1\n#define TERRAIN_UPPER_BLOCK 2\n\n#define HERO_POSITION_OFF 0          \/\/ El h\u00e9roe es invisible\n#define HERO_POSITION_RUN_LOWER_1 1  \/\/ El h\u00e9roe est\u00e1 corriendo en la fila inferior (pose 1)\n#define HERO_POSITION_RUN_LOWER_2 2  \/\/                               (pose 2)\n\n#define HERO_POSITION_JUMP_1 3       \/\/ Comenzando un salto\n#define HERO_POSITION_JUMP_2 4       \/\/ A mitad de camino hacia arriba\n#define HERO_POSITION_JUMP_3 5       \/\/ El salto est\u00e1 en la fila superior\n#define HERO_POSITION_JUMP_4 6       \/\/ El salto est\u00e1 en la fila superior\n#define HERO_POSITION_JUMP_5 7       \/\/ El salto est\u00e1 en la fila superior\n#define HERO_POSITION_JUMP_6 8       \/\/ El salto est\u00e1 en la fila superior\n#define HERO_POSITION_JUMP_7 9       \/\/ A mitad de camino hacia abajo\n#define HERO_POSITION_JUMP_8 10      \/\/ A punto de aterrizar\n\n#define HERO_POSITION_RUN_UPPER_1 11 \/\/ El h\u00e9roe est\u00e1 corriendo en la fila superior (pose 1)\n#define HERO_POSITION_RUN_UPPER_2 12 \/\/                               (pose 2)\n\nLiquidCrystal lcd(11, 9, 6, 5, 4, 3);\nstatic char terrainUpper&#91;TERRAIN_WIDTH + 1];\nstatic char terrainLower&#91;TERRAIN_WIDTH + 1];\nstatic bool buttonPushed = false;\n\nvoid initializeGraphics(){\n  static byte graphics&#91;] = {\n    \/\/ Posici\u00f3n de carrera 1\n    B01100,\n    B01100,\n    B00000,\n    B01110,\n    B11100,\n    B01100,\n    B11010,\n    B10011,\n    \/\/ Posici\u00f3n de carrera 2\n    B01100,\n    B01100,\n    B00000,\n    B01100,\n    B01100,\n    B01100,\n    B01100,\n    B01110,\n    \/\/ Salto\n    B01100,\n    B01100,\n    B00000,\n    B11110,\n    B01101,\n    B11111,\n    B10000,\n    B00000,\n    \/\/ Salto inferior\n    B11110,\n    B01101,\n    B11111,\n    B10000,\n    B00000,\n    B00000,\n    B00000,\n    B00000,\n    \/\/ Suelo\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    B11111,\n    \/\/ Suelo derecha\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    B00011,\n    \/\/ Suelo izquierda\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n    B11000,\n  };\n  int i;\n  \/\/ Omitir el uso del car\u00e1cter 0, esto permite que lcd.print() se use para\n  \/\/ dibujar r\u00e1pidamente varios caracteres\n  for (i = 0; i &lt; 7; ++i) {\n\t  lcd.createChar(i + 1, &amp;graphics&#91;i * 8]);\n  }\n  for (i = 0; i &lt; TERRAIN_WIDTH; ++i) {\n    terrainUpper&#91;i] = SPRITE_TERRAIN_EMPTY;\n    terrainLower&#91;i] = SPRITE_TERRAIN_EMPTY;\n  }\n}\n\n\/\/ Desplazar el terreno a la izquierda en incrementos de medio car\u00e1cter\n\/\/\nvoid advanceTerrain(char* terrain, byte newTerrain){\n  for (int i = 0; i &lt; TERRAIN_WIDTH; ++i) {\n    char current = terrain&#91;i];\n    char next = (i == TERRAIN_WIDTH-1) ? newTerrain : terrain&#91;i+1];\n    switch (current){\n      case SPRITE_TERRAIN_EMPTY:\n        terrain&#91;i] = (next == SPRITE_TERRAIN_SOLID) ? SPRITE_TERRAIN_SOLID_RIGHT : SPRITE_TERRAIN_EMPTY;\n        break;\n      case SPRITE_TERRAIN_SOLID:\n        terrain&#91;i] = (next == SPRITE_TERRAIN_EMPTY) ? SPRITE_TERRAIN_SOLID_LEFT : SPRITE_TERRAIN_SOLID;\n        break;\n      case SPRITE_TERRAIN_SOLID_RIGHT:\n        terrain&#91;i] = SPRITE_TERRAIN_SOLID;\n        break;\n      case SPRITE_TERRAIN_SOLID_LEFT:\n        terrain&#91;i] = SPRITE_TERRAIN_EMPTY;\n        break;\n    }\n  }\n}\n\nbool drawHero(byte position, char* terrainUpper, char* terrainLower, unsigned int score) {\n  bool collide = false;\n  char upperSave = terrainUpper&#91;HERO_HORIZONTAL_POSITION];\n  char lowerSave = terrainLower&#91;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&#91;HERO_HORIZONTAL_POSITION] = upper;\n    collide = (upperSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n  }\n  if (lower != ' ') {\n    terrainLower&#91;HERO_HORIZONTAL_POSITION] = lower;\n    collide |= (lowerSave == SPRITE_TERRAIN_EMPTY) ? false : true;\n  }\n  \n  byte digits = (score &gt; 9999) ? 5 : (score &gt; 999) ? 4 : (score &gt; 99) ? 3 : (score &gt; 9) ? 2 : 1;\n  \n  \/\/ Dibujar la escena\n  terrainUpper&#91;TERRAIN_WIDTH] = '\\0';\n  terrainLower&#91;TERRAIN_WIDTH] = '\\0';\n  char temp = terrainUpper&#91;16-digits];\n  terrainUpper&#91;16-digits] = '\\0';\n  lcd.setCursor(0,0);\n  lcd.print(terrainUpper);\n  terrainUpper&#91;16-digits] = temp;  \n  lcd.setCursor(0,1);\n  lcd.print(terrainLower);\n  \n  lcd.setCursor(16 - digits,0);\n  lcd.print(score);\n\n  terrainUpper&#91;HERO_HORIZONTAL_POSITION] = upperSave;\n  terrainLower&#91;HERO_HORIZONTAL_POSITION] = lowerSave;\n  return collide;\n}\n\n\/\/ Manejar la pulsaci\u00f3n del bot\u00f3n como una interrupci\u00f3n\nvoid buttonPush() {\n  buttonPushed = true;\n}\n\nvoid setup(){\n  pinMode(PIN_READWRITE, OUTPUT);\n  digitalWrite(PIN_READWRITE, LOW);\n  pinMode(PIN_CONTRAST, OUTPUT);\n  digitalWrite(PIN_CONTRAST, LOW);\n  pinMode(PIN_BUTTON, INPUT);\n  digitalWrite(PIN_BUTTON, HIGH);\n  pinMode(PIN_AUTOPLAY, OUTPUT);\n  digitalWrite(PIN_AUTOPLAY, HIGH);\n  \n  \/\/ El pin digital 2 se mapea a la interrupci\u00f3n 0\n  attachInterrupt(0\/*PIN_BUTTON*\/, buttonPush, FALLING);\n  \n  initializeGraphics();\n  \n  lcd.begin(16, 2);\n}\n\nvoid loop(){\n  static byte heroPos = HERO_POSITION_RUN_LOWER_1;\n  static byte newTerrainType = TERRAIN_EMPTY;\n  static byte newTerrainDuration = 1;\n  static bool playing = false;\n  static bool blink = false;\n  static unsigned int distance = 0;\n  \n  if (!playing) {\n    drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower, distance &gt;&gt; 3);\n    if (blink) {\n      lcd.setCursor(0,0);\n      lcd.print(\"Presiona Start\");\n    }\n    delay(250);\n    blink = !blink;\n    if (buttonPushed) {\n      initializeGraphics();\n      heroPos = HERO_POSITION_RUN_LOWER_1;\n      playing = true;\n      buttonPushed = false;\n      distance = 0;\n    }\n    return;\n  }\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  \n  \/\/ Crear nuevo terreno para ingresar por la derecha\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    \n  if (buttonPushed) {\n    if (heroPos &lt;= HERO_POSITION_RUN_LOWER_2) heroPos = HERO_POSITION_JUMP_1;\n    buttonPushed = false;\n  }  \n\n  if (drawHero(heroPos, terrainUpper, terrainLower, distance &gt;&gt; 3)) {\n    playing = false; \/\/ El h\u00e9roe choc\u00f3 con algo. Qu\u00e9 mal.\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&#91;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&#91;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    ++distance;\n    \n    digitalWrite(PIN_AUTOPLAY, terrainLower&#91;HERO_HORIZONTAL_POSITION + 2] == SPRITE_TERRAIN_EMPTY ? HIGH : LOW);\n  }\n  delay(50);\n}\n<\/code><\/pre>\n\n\n\n<p>Este c\u00f3digo establece un juego en el que un corredor debe esquivar obst\u00e1culos para ganar puntos. El juego se vuelve m\u00e1s desafiante a medida que avanza, ya que los obst\u00e1culos aparecen con mayor frecuencia.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Personalizacion_del_Juego\"><\/span>Personalizaci\u00f3n del Juego<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Puedes ajustar varios aspectos del juego para personalizarlo a tu gusto. Por ejemplo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Velocidad del Juego<\/strong>: Modifica el valor en <code>delay(50)<\/code> para que el juego sea m\u00e1s r\u00e1pido o m\u00e1s lento.<\/li>\n\n\n\n<li><strong>Dificultad<\/strong>: Cambia la frecuencia con la que aparecen los obst\u00e1culos o su tama\u00f1o para hacer el juego m\u00e1s dif\u00edcil.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Prueba_y_Mejora\"><\/span>Prueba y Mejora<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Una vez que hayas cargado el c\u00f3digo en tu Arduino, juega y observa c\u00f3mo responde el juego. Si encuentras que es demasiado f\u00e1cil o dif\u00edcil, ajusta las configuraciones hasta que obtengas el desaf\u00edo perfecto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span>Conclusi\u00f3n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Este juego de corredor es una excelente manera de practicar tus habilidades con Arduino y de aprender sobre el uso de pantallas LCD y m\u00f3dulos I2C. Adem\u00e1s, es un proyecto divertido que puedes seguir expandiendo con nuevas caracter\u00edsticas como niveles de dificultad o diferentes tipos de obst\u00e1culos. \u00a1Desaf\u00eda a tus amigos y ve qui\u00e9n puede obtener la mayor puntuaci\u00f3n!<\/p>\n\n\n\n<p>Si est\u00e1s en M\u00e9xico y necesitas componentes electr\u00f3nicos, te invitamos a visitar nuestra tienda de electr\u00f3nica en la CDMX. \u00a1Te esperamos con todo lo que necesitas para tus proyectos!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Video_juego_con_arduino_corredor\"><\/span>Video juego con arduino corredor<span class=\"ez-toc-section-end\"><\/span><\/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<iframe loading=\"lazy\" title=\"\ud83d\udee0\ufe0f  Juego con Arduino Corredor sin fin - Proveedora Cano\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/xKwtzPtmB1Q?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\"><span class=\"ez-toc-section\" id=\"Simulacion_con_Tinkercad\"><\/span>Simulaci\u00f3n con Tinkercad<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<iframe loading=\"lazy\" width=\"560\" height=\"350\" src=\"https:\/\/www.tinkercad.com\/embed\/cX7esFJbho1?editbtn=1\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Crea tu Propio Juego de Corredor con Arduino: \u00a1Esquiva Obst\u00e1culos y Gana Puntos! Si eres un entusiasta de la electr\u00f3nica y la programaci\u00f3n, este proyecto es perfecto para ti. Hoy&hellip;<\/p>\n","protected":false},"author":2,"featured_media":69,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,3,4],"tags":[29,27,28,26,30],"class_list":["post-68","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-practicas","category-tinkercad","tag-i2c","tag-interruptor","tag-juego","tag-lcd","tag-tinkercad"],"_links":{"self":[{"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/posts\/68"}],"collection":[{"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/comments?post=68"}],"version-history":[{"count":5,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":106,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/posts\/68\/revisions\/106"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/media\/69"}],"wp:attachment":[{"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/media?parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/categories?post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/proveedoracano.com\/blog\/wp-json\/wp\/v2\/tags?post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}