{"id":37,"date":"2019-04-22T22:50:00","date_gmt":"2019-04-22T22:50:00","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=37"},"modified":"2019-05-04T17:31:32","modified_gmt":"2019-05-04T17:31:32","slug":"tetris-vga-arduino","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/","title":{"rendered":"Tetris con VGA en Arduino"},"content":{"rendered":"<h2>\u00bfQu\u00e9 es ArduBoy?<\/h2>\n<p>Arduboy es una \u00abconsola\u00bb nos permite jugar al tetris. Es perfecto para todas las edades puesto que ArduBoy se adapta a cualquier pantalla que tenga VGA. Esto est\u00e1 pensado para todas aquellas personas que tengan problemas con su vista, puesto que no tendr\u00e1 que jugar en una reducida pantalla donde dejarse los ojos. Adem\u00e1s es perfecto para jugar en cualquier lugar donde exista una pantalla, por lo que puedes llev\u00e1rtelo a donde quieras.<\/p>\n<p><iframe loading=\"lazy\" title=\"VID 20190424 204728\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/7UPpeOjyJU8?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><\/p>\n<h3><\/h3>\n<h3><strong>\u00bfC\u00f3mo funciona<\/strong>?<\/h3>\n<p>ArduBoy funciona gracias a un VGA que tenemos en nuestra cajita que se usa como mando a trav\u00e9s del cual, con el cable VGA, lo podemos conectar a cualquier pantalla. Para usarlo simplemente tenemos que conectarlo a la pantalla y cuando pulsemos uno de los 4 botones empezar\u00e1 el juego. Si vas a realizar este proyecto, te recomiendo que utilices la librer\u00eda desarrollada por Sandro Maffiodo para VGA puesto que podr\u00e1s encontrar ejemplos y viene informaci\u00f3n acerca de los pixeles de la pantalla y como utilizarlos.<\/p>\n<p>A continuaci\u00f3n de tejo el enlace donde poder encontrar esta librer\u00eda en Github: <a href=\"https:\/\/github.com\/smaffer\/vgax\">https:\/\/github.com\/smaffer\/vgax<\/a><\/p>\n<h3><strong>\u00bfQu\u00e9\u00a0necesitamos para que ArduBoy funcione<\/strong>?<\/h3>\n<div>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Materiales.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Materiales.png\" width=\"326\" height=\"400\" border=\"0\" data-original-height=\"628\" data-original-width=\"514\" \/><\/a><\/div>\n<p>Para realizar el proyecto utilizamos:<\/p>\n<\/div>\n<ul>\n<li><strong>Arduino Uno<\/strong><\/li>\n<\/ul>\n<p>Esta placa es de la marca Elegoo pero funciona igual que Arduino Uno, puedes conectar leds, resistencias, pulsadores, lcds y todo lo que te imagines. Solo tienes que conectarlo al ordenador mediante el cable y subir el Sketch.<\/p>\n<ul>\n<li><strong>Caja de madera y pulsadores<\/strong><\/li>\n<\/ul>\n<p>La caja la utilizamos para que haga a modo de mando y adem\u00e1s podamos guardar ah\u00ed todas las conexiones sin que los cables sueltos nos molesten, se enganchen o queden desprotegidos. Los pulsadores nos servir\u00e1n para poder rotar las figuras, desplazarlas tanto a la derecha como a la izquierda y hacer que bajen m\u00e1s r\u00e1pido.<\/p>\n<ul>\n<li><strong>Cables y esta\u00f1o<\/strong><\/li>\n<\/ul>\n<p>Necesitamos cables para poder realizar las distintas uniones entre los botones, el VGA, las resistencias&#8230; con la placa del Arduino Uno, as\u00ed como necesitaremos el esta\u00f1o para que estas uniones sean fijas y duraderas.<\/p>\n<ul>\n<li><strong>Resistencias<\/strong><\/li>\n<\/ul>\n<p>Necesitaremos m\u00faltiples resistencias para disminuir la electricidad, de este modo utilizaremos dos resistencias de 470 ohmnios para los pines 1 y 2 del VGA y dos resistencias de 68 ohmnios en los pines 13 y 14 del VGA; tambi\u00e9n necesitaremos 4 resistencias de 2K ohmnios, una para cada uno de los pulsadores.<\/p>\n<ul>\n<li><strong>Cabeza VGA hembra para chasis<\/strong><\/li>\n<\/ul>\n<p>Imprescindible para poder conectar nuestro Sketch en Arduino con cualquier pantalla mediante un cable VGA.<\/p>\n<p>El presupuesto del proyecto es el siguiente:<\/p>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/CosteMaterial.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/CosteMaterial.png\" width=\"400\" height=\"138\" border=\"0\" data-original-height=\"178\" data-original-width=\"512\" \/><\/a><\/div>\n<h2><strong>\u00bfC\u00f3mo llegamos al producto final<\/strong>?<\/h2>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Imagen1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Imagen1.png\" width=\"320\" height=\"240\" border=\"0\" data-original-height=\"254\" data-original-width=\"338\" \/><\/a><\/div>\n<div><\/div>\n<h2>Circuito y c\u00f3digo<\/h2>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Circuitohecho.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Circuitohecho.png\" width=\"400\" height=\"182\" border=\"0\" data-original-height=\"349\" data-original-width=\"761\" \/><\/a><\/div>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><a style=\"margin-left: 1em; margin-right: 1em;\" href=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Imagen2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blogs.etsii.urjc.es\/wp-content\/uploads\/sites\/8\/2019\/04\/Imagen2.png\" width=\"256\" height=\"320\" border=\"0\" data-original-height=\"357\" data-original-width=\"286\" \/><\/a><\/div>\n<div class=\"separator\" style=\"clear: both; text-align: center;\"><\/div>\n<div><\/div>\n<div><\/div>\n<p>El sketch utilizado es el siguiente:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"c\">#include &lt;VGAXUtils.h&gt;\n#include &lt;math.h&gt;\n \n#define  FNT_NANOFONT_HEIGHT        6\n#define  FNT_NANOFONT_SYMBOLS_COUNT 95\n \nVGAX vga;\nVGAXUtils vgaU;\n \n\/\/data size=570 bytes\nconst unsigned char fnt_nanofont_data[FNT_NANOFONT_SYMBOLS_COUNT][1+FNT_NANOFONT_HEIGHT] PROGMEM={\n{ 1, 128, 128, 128, 0, 128, 0, }, \/\/glyph '!' code=0\n{ 3, 160, 160, 0, 0, 0, 0, }, \/\/glyph '\"' code=1\n\/\/{ 5, 80, 248, 80, 248, 80, 0, },  \/\/glyph '#' code=2\n{ 5, 248, 248, 248, 248, 248, 0, },  \/\/glyph '#' code=2 \n{ 5, 120, 160, 112, 40, 240, 0, },  \/\/glyph '$' code=3\n{ 5, 136, 16, 32, 64, 136, 0, },  \/\/glyph '%' code=4\n{ 5, 96, 144, 104, 144, 104, 0, },  \/\/glyph '&amp;' code=5\n{ 2, 128, 64, 0, 0, 0, 0, },  \/\/glyph ''' code=6\n{ 2, 64, 128, 128, 128, 64, 0, }, \/\/glyph '(' code=7\n{ 2, 128, 64, 64, 64, 128, 0, },  \/\/glyph ')' code=8\n{ 3, 0, 160, 64, 160, 0, 0, },  \/\/glyph '*' code=9\n{ 3, 0, 64, 224, 64, 0, 0, }, \/\/glyph '+' code=10\n{ 2, 0, 0, 0, 0, 128, 64, },  \/\/glyph ',' code=11\n{ 3, 0, 0, 224, 0, 0, 0, }, \/\/glyph '-' code=12\n{ 1, 0, 0, 0, 0, 128, 0, }, \/\/glyph '.' code=13\n{ 5, 8, 16, 32, 64, 128, 0, },  \/\/glyph '\/' code=14\n{ 4, 96, 144, 144, 144, 96, 0, }, \/\/glyph '0' code=15\n{ 3, 64, 192, 64, 64, 224, 0, },  \/\/glyph '1' code=16\n{ 4, 224, 16, 96, 128, 240, 0, }, \/\/glyph '2' code=17\n{ 4, 224, 16, 96, 16, 224, 0, },  \/\/glyph '3' code=18\n{ 4, 144, 144, 240, 16, 16, 0, }, \/\/glyph '4' code=19\n{ 4, 240, 128, 224, 16, 224, 0, },  \/\/glyph '5' code=20\n{ 4, 96, 128, 224, 144, 96, 0, }, \/\/glyph '6' code=21\n{ 4, 240, 16, 32, 64, 64, 0, }, \/\/glyph '7' code=22\n{ 4, 96, 144, 96, 144, 96, 0, },  \/\/glyph '8' code=23\n{ 4, 96, 144, 112, 16, 96, 0, },  \/\/glyph '9' code=24\n{ 1, 0, 128, 0, 128, 0, 0, }, \/\/glyph ':' code=25\n{ 2, 0, 128, 0, 0, 128, 64, },  \/\/glyph ';' code=26\n{ 3, 32, 64, 128, 64, 32, 0, }, \/\/glyph '&lt;' code=27\n{ 3, 0, 224, 0, 224, 0, 0, }, \/\/glyph '=' code=28\n{ 3, 128, 64, 32, 64, 128, 0, },  \/\/glyph '&gt;' code=29\n{ 4, 224, 16, 96, 0, 64, 0, },  \/\/glyph '?' code=30\n{ 4, 96, 144, 176, 128, 112, 0, },  \/\/glyph '@' code=31\n{ 4, 96, 144, 240, 144, 144, 0, },  \/\/glyph 'A' code=32\n{ 4, 224, 144, 224, 144, 224, 0, }, \/\/glyph 'B' code=33\n{ 4, 112, 128, 128, 128, 112, 0, }, \/\/glyph 'C' code=34\n{ 4, 224, 144, 144, 144, 224, 0, }, \/\/glyph 'D' code=35\n{ 4, 240, 128, 224, 128, 240, 0, }, \/\/glyph 'E' code=36\n{ 4, 240, 128, 224, 128, 128, 0, }, \/\/glyph 'F' code=37\n{ 4, 112, 128, 176, 144, 112, 0, }, \/\/glyph 'G' code=38\n{ 4, 144, 144, 240, 144, 144, 0, }, \/\/glyph 'H' code=39\n{ 3, 224, 64, 64, 64, 224, 0, },  \/\/glyph 'I' code=40\n{ 4, 240, 16, 16, 144, 96, 0, },  \/\/glyph 'J' code=41\n{ 4, 144, 160, 192, 160, 144, 0, }, \/\/glyph 'K' code=42\n{ 4, 128, 128, 128, 128, 240, 0, }, \/\/glyph 'L' code=43\n{ 5, 136, 216, 168, 136, 136, 0, }, \/\/glyph 'M' code=44\n{ 4, 144, 208, 176, 144, 144, 0, }, \/\/glyph 'N' code=45\n{ 4, 96, 144, 144, 144, 96, 0, }, \/\/glyph 'O' code=46\n{ 4, 224, 144, 224, 128, 128, 0, }, \/\/glyph 'P' code=47\n{ 4, 96, 144, 144, 144, 96, 16, },  \/\/glyph 'Q' code=48\n{ 4, 224, 144, 224, 160, 144, 0, }, \/\/glyph 'R' code=49\n{ 4, 112, 128, 96, 16, 224, 0, }, \/\/glyph 'S' code=50\n{ 3, 224, 64, 64, 64, 64, 0, }, \/\/glyph 'T' code=51\n{ 4, 144, 144, 144, 144, 96, 0, },  \/\/glyph 'U' code=52\n{ 3, 160, 160, 160, 160, 64, 0, },  \/\/glyph 'V' code=53\n{ 5, 136, 168, 168, 168, 80, 0, },  \/\/glyph 'W' code=54\n{ 4, 144, 144, 96, 144, 144, 0, },  \/\/glyph 'X' code=55\n{ 3, 160, 160, 64, 64, 64, 0, },  \/\/glyph 'Y' code=56\n{ 4, 240, 16, 96, 128, 240, 0, }, \/\/glyph 'Z' code=57\n{ 2, 192, 128, 128, 128, 192, 0, }, \/\/glyph '[' code=58\n{ 5, 128, 64, 32, 16, 8, 0, },  \/\/glyph '\\' code=59\n{ 2, 192, 64, 64, 64, 192, 0, },  \/\/glyph ']' code=60\n{ 5, 32, 80, 136, 0, 0, 0, }, \/\/glyph '^' code=61\n{ 4, 0, 0, 0, 0, 240, 0, }, \/\/glyph '_' code=62\n{ 2, 128, 64, 0, 0, 0, 0, },  \/\/glyph '`' code=63\n{ 3, 0, 224, 32, 224, 224, 0, },  \/\/glyph 'a' code=64\n{ 3, 128, 224, 160, 160, 224, 0, }, \/\/glyph 'b' code=65\n{ 3, 0, 224, 128, 128, 224, 0, }, \/\/glyph 'c' code=66\n{ 3, 32, 224, 160, 160, 224, 0, },  \/\/glyph 'd' code=67\n{ 3, 0, 224, 224, 128, 224, 0, }, \/\/glyph 'e' code=68\n{ 2, 64, 128, 192, 128, 128, 0, },  \/\/glyph 'f' code=69\n{ 3, 0, 224, 160, 224, 32, 224, },  \/\/glyph 'g' code=70\n{ 3, 128, 224, 160, 160, 160, 0, }, \/\/glyph 'h' code=71\n{ 1, 128, 0, 128, 128, 128, 0, }, \/\/glyph 'i' code=72\n{ 2, 0, 192, 64, 64, 64, 128, },  \/\/glyph 'j' code=73\n{ 3, 128, 160, 192, 160, 160, 0, }, \/\/glyph 'k' code=74\n{ 1, 128, 128, 128, 128, 128, 0, }, \/\/glyph 'l' code=75\n{ 5, 0, 248, 168, 168, 168, 0, }, \/\/glyph 'm' code=76\n{ 3, 0, 224, 160, 160, 160, 0, }, \/\/glyph 'n' code=77\n{ 3, 0, 224, 160, 160, 224, 0, }, \/\/glyph 'o' code=78\n{ 3, 0, 224, 160, 160, 224, 128, }, \/\/glyph 'p' code=79\n{ 3, 0, 224, 160, 160, 224, 32, },  \/\/glyph 'q' code=80\n{ 3, 0, 224, 128, 128, 128, 0, }, \/\/glyph 'r' code=81\n{ 2, 0, 192, 128, 64, 192, 0, },  \/\/glyph 's' code=82\n{ 3, 64, 224, 64, 64, 64, 0, }, \/\/glyph 't' code=83\n{ 3, 0, 160, 160, 160, 224, 0, }, \/\/glyph 'u' code=84\n{ 3, 0, 160, 160, 160, 64, 0, },  \/\/glyph 'v' code=85\n{ 5, 0, 168, 168, 168, 80, 0, },  \/\/glyph 'w' code=86\n{ 3, 0, 160, 64, 160, 160, 0, },  \/\/glyph 'x' code=87\n{ 3, 0, 160, 160, 224, 32, 224, },  \/\/glyph 'y' code=88\n{ 2, 0, 192, 64, 128, 192, 0, },  \/\/glyph 'z' code=89\n{ 3, 96, 64, 192, 64, 96, 0, }, \/\/glyph '{' code=90\n{ 1, 128, 128, 128, 128, 128, 0, }, \/\/glyph '|' code=91\n{ 3, 192, 64, 96, 64, 192, 0, },  \/\/glyph '}' code=92\n{ 3, 96, 192, 0, 0, 0, 0, },  \/\/glyph '~' code=93\n{ 4, 48, 64, 224, 64, 240, 0, },  \/\/glyph '\u00a3' code=94\n};\n\nstatic const char str10[] PROGMEM=\"#\";\nstatic const char str11[] PROGMEM=\"ArduBoy\";\nstatic const char str12[] PROGMEM=\"Pulsa para empezar\";\nstatic const char str13[] PROGMEM=\"Game\";\nstatic const char str14[] PROGMEM=\"Over!\";\n \nboolean button = 0;\nboolean button_1 = 0;\nboolean button_2 = 0;\nboolean button_3 = 0;\nboolean button_4 = 0;\n\nint block[4][2]={{0,0},{0,0},{0,0},{0,0}}; \/\/va a ser para las fichas\nint blockExt[4][2]={{0,0},{0,0},{0,0},{0,0}}; \/\/para los monitores 4:3\nint blockOld[4][2]={{0,0},{0,0},{0,0},{0,0}}; \/\/las fichas antiguas que ya est\u00e1n en la pantalla\nint blockTmp[4][2]={{0,0},{0,0},{0,0},{0,0}};\nint blockTr[4][2]={{0,0},{0,0},{0,0},{0,0}};\nint yLine[4] = {0,0,0,0};\nint yLineTmp[4] = {0,0,0,0};\nint yCounter = 0;\nint x = 60;\nint y = 6;\nint z = 10;\nint score; \/\/la puntuacion\nint noLoop = (-1);\nint clock = 1;\nint delta = 0;\nint color = 1;\nint colorOld;\nint blockN;\nint blockNext;\nint busy;\nint noDelete = 0;\nint k = 0;\nint a = 40;\nint b = 10;\nint counterMenu = 0;\nunsigned long time = 0;\nint fast = 14; \/\/14;\n \nvoid processInputs() { \/\/para que sirve esto\n \n    if(button_1 == 1) {\n        button_2 = digitalRead(A2);\n        button_3 = digitalRead(A3);\n        button_4 = digitalRead(A4);\n        button_1 = 0;\n        vga.delay(25);\n    }\n  else{\n     if(button_2 == 1) {\n        button_1 = digitalRead(A1);\n        button_3 = digitalRead(A3);\n        button_4 = digitalRead(A4);\n        button_2 = 0;\n        vga.delay(25);\n     }\n     else{\n        if(button_3 == 1) {\n           button_1 = digitalRead(A1);\n           button_2 = digitalRead(A2);\n           button_4 = digitalRead(A4);\n           button_3 = 0;\n           vga.delay(25);\n        }\n        else{\n           if(button_4 == 1) {\n              button_1 = digitalRead(A1);\n              button_2 = digitalRead(A2);\n              button_3 = digitalRead(A3);\n              button_4 = 0;\n              \/\/vga.delay(25);\n           }\n           else{\n              button_1 = digitalRead(A1);\n              button_2 = digitalRead(A2);\n              button_3 = digitalRead(A3);\n              button_4 = digitalRead(A4);\n           }\n        }\n     }\n  }\n  button = button_2 || button_4;\n}\n \nvoid clearInputs() { \/\/cuando se usa\n    button_1 = 0;\n    button_2 = 0;\n    button_3 = 0;\n    button_4 = 0;\n    button = 0;\n}\n \nvoid drawMenu() {\n  while (button_1 == 0 &amp;&amp; button_2 == 0 &amp;&amp; button_3 == 0 &amp;&amp; button_4 == 0) { \/\/Mientras que no pulsemos ningun bot\u00f3n\n     processInputs();\n     vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str11, 26, 16, (counterMenu%3) + 1);\n     vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str12, 28, 28, (counterMenu%3) + 1);\n     vga.delay(1000);\n     counterMenu++;\n  }\n  vga.clear(0);\n  drawGameScreen();\n  drawScore(score);\n}\n \nvoid drawScore(int i) {\n    if (i &gt; 39){\n       score = 0;\n       i = 0;\n       fast = fast - 4;\n       \n       if (fast &lt; 3){\n        fast = 2;\n       }\n    }\n    \n    vgaU.draw_line(20, 10, 20, 50, 3);\n    vgaU.draw_line(20, 50, 20, 50 - i, 1);\n    vgaU.draw_line(19, 10, 22, 10, 3);\n    vgaU.draw_line(19, 50, 22, 50, 3);\n}\n \nvoid drawGameScreen() { \/\/Dibujamos el borde de la pantalla del tetris \n   vgaU.draw_line(44,0,78,0,3);\n   vgaU.draw_line(44,59,78,59,3);\n   vgaU.draw_line(44,0,44,59,3);\n   vgaU.draw_line(78,0,78,60,3);\n}\n \nvoid blockDef(int i) { \/\/Definici\u00f3n de las fichas\n  if (i == 1){ \/\/El cuadrado\n  block[0][0] = 0;\n  block[0][1] = 0;\n  block[1][0] = 1;\n  block[1][1] = 0;\n  block[2][0] = 0;\n  block[2][1] = 1;\n  block[3][0] = 1;\n  block[3][1] = 1;\n  color = 1;\n  }\n  if (i == 2){ \/\/La L\n  block[0][0] = -1;\n  block[0][1] = 0;\n  block[1][0] = 0;\n  block[1][1] = 0;\n  block[2][0] = 1;\n  block[2][1] = 0;\n  block[3][0] = -1;\n  block[3][1] = 1;\n  color = 2;\n  }\n  if (i == 3){ \/\/La J\n  block[0][0] = -1;\n  block[0][1] = 0;\n  block[1][0] = 0;\n  block[1][1] = 0;\n  block[2][0] = 1;\n  block[2][1] = 0;\n  block[3][0] = 1;\n  block[3][1] = 1;\n  color = 3;\n  }\n  if (i == 4){  \/\/El palo\n  block[0][0] = -1;\n  block[0][1] = 0;\n  block[1][0] = 0;\n  block[1][1] = 0;\n  block[2][0] = 1;\n  block[2][1] = 0;\n  block[3][0] = 2;\n  block[3][1] = 0;\n    color = 1;\n  }\n  if (i == 5){ \/\/La S\n  block[0][0] = -1;\n  block[0][1] = 0;\n  block[1][0] = 0;\n  block[1][1] = 0;\n  block[2][0] = 0;\n  block[2][1] = 1;\n  block[3][0] = 1;\n  block[3][1] = 1;\n  color = 2;\n  }\n  if (i == 6){ \/\/La Z\n  block[0][0] = -1;\n  block[0][1] = 1;\n  block[1][0] = 0;\n  block[1][1] = 1;\n  block[2][0] = 0;\n  block[2][1] = 0;\n  block[3][0] = 1;\n  block[3][1] = 0;\n  color = 3;\n  }\n  if (i == 7){ \/\/La T\n  block[0][0] = -1;\n  block[0][1] = 0;\n  block[1][0] = 0;\n  block[1][1] = 0;\n  block[2][0] = 0;\n  block[2][1] = 1;\n  block[3][0] = 1;\n  block[3][1] = 0;\n  color = 1;\n  }\n}\n \nvoid blockExtension() { \/\/Extension para los monitores 4:3 porque sino no se ve correctamente\n   for (int i = 0; i &lt; 4; i++){\n      blockExt[0][0] = block[0][0]*3;\n      blockExt[0][1] = block[0][1]*2;\n      blockExt[1][0] = block[1][0]*3;\n      blockExt[1][1] = block[1][1]*2;\n      blockExt[2][0] = block[2][0]*3;\n      blockExt[2][1] = block[2][1]*2;\n      blockExt[3][0] = block[3][0]*3;\n      blockExt[3][1] = block[3][1]*2;\n   }\n}\n \nvoid blockRotation(int clock){ \/\/Para los giros guardamos la informaci\u00f3n actual en la variable\n  for (int i = 0; i &lt; 4; i++){\n     blockOld[0][0] = block[0][0];\n     blockOld[0][1] = block[0][1];\n     blockOld[1][0] = block[1][0];\n     blockOld[1][1] = block[1][1];\n     blockOld[2][0] = block[2][0];\n     blockOld[2][1] = block[2][1];\n     blockOld[3][0] = block[3][0];\n     blockOld[3][1] = block[3][1];\n  }\n  for (int i = 0; i &lt; 4; i++){ \/\/Modificamos la informaci\u00f3n actual de acuerdo a la informaci\u00f3n de la variable almacenada\n     block[0][0] = blockOld[0][1]*clock;\n     block[0][1] = -blockOld[0][0]*clock;\n     block[1][0] = blockOld[1][1]*clock;\n     block[1][1] = -blockOld[1][0]*clock;\n     block[2][0] = blockOld[2][1]*clock;\n     block[2][1] = -blockOld[2][0]*clock;\n     block[3][0] = blockOld[3][1]*clock;\n     block[3][1] = -blockOld[3][0]*clock;\n  }\n}\nvoid blockTranslation(int x, int y) { \/\/Para las traslaciones\n \n   for (int i = 0; i &lt; 4; i++){\n      blockTr[0][0] = blockExt[0][0] + x;\n      blockTr[0][1] = blockExt[0][1] + y;\n      blockTr[1][0] = blockExt[1][0] + x;\n      blockTr[1][1] = blockExt[1][1] + y;\n      blockTr[2][0] = blockExt[2][0] + x;\n      blockTr[2][1] = blockExt[2][1] + y;\n      blockTr[3][0] = blockExt[3][0] + x;\n      blockTr[3][1] = blockExt[3][1] + y;\n   }\n}\n \nvoid delBlock(){ \n  if (noDelete == 1) {noDelete = 0;}\n  else {\n      for (int i = 0; i &lt; 4; i++){\n         vgaU.draw_line(blockTr[i][0],blockTr[i][1],blockTr[i][0] + 3,blockTr[i][1],0);\n         vgaU.draw_line(blockTr[i][0],blockTr[i][1] + 1,blockTr[i][0] + 3,blockTr[i][1] + 1,0);\n      }\n   }\n}\n \nvoid drawBlock(){ \/\/Para darle color a la ficha\n  for (int i = 0; i &lt; 4; i++){\n     vgaU.draw_line(blockTr[i][0],blockTr[i][1],blockTr[i][0] + 3,blockTr[i][1], color);\n     vgaU.draw_line(blockTr[i][0],blockTr[i][1] + 1,blockTr[i][0] + 3,blockTr[i][1] + 1, color);\n  }\n  for (int i = 0; i &lt; 4; i++){\n     blockTmp[0][0] = blockTr[0][0];\n     blockTmp[0][1] = blockTr[0][1];\n     blockTmp[1][0] = blockTr[1][0];\n     blockTmp[1][1] = blockTr[1][1];\n     blockTmp[2][0] = blockTr[2][0];\n     blockTmp[2][1] = blockTr[2][1];\n     blockTmp[3][0] = blockTr[3][0];\n     blockTmp[3][1] = blockTr[3][1];\n  }\n}\n \nvoid drawBlockTmp(){ \/\/Para que la copia tambien tenga color\n  for (int i = 0; i &lt; 4; i++){\n     vgaU.draw_line(blockTmp[i][0],blockTmp[i][1],blockTmp[i][0] + 3,blockTmp[i][1], color);\n     vgaU.draw_line(blockTmp[i][0],blockTmp[i][1] + 1,blockTmp[i][0] + 3,blockTmp[i][1] + 1, color);\n  }\n}\n \nvoid checkBlock(){ \/\/Para ver si esta bien el bloque\n  busy = 0;\n  for (int i = 0; i &lt; 4; i++){\n     busy = busy + vga.getpixel(blockTr[i][0], blockTr[i][1]) + vga.getpixel(blockTr[i][0] + 2, blockTr[i][1]);\n  }\n}\n \nvoid replaceBlock(){\n     blockExtension();\n     blockTranslation(x, y);\n     checkBlock();\n     if (busy == 0){\n        drawBlock();\n     }\n     else \n     {\n        drawBlockTmp();\n        checkForFullLine(); \n        noLoop = 0;\n        noDelete = 1;\n        if (y &lt; 6) {\n           gameOver();\n        }\n     }\n     vga.delay(50);\n}\n \nvoid gameOver(){ \/\/Reestablece los parametros cuando hemos perdido\n   noLoop = -1;\n   score = 0;\n   fast = 14;\n   clearInputs();\n   time = 0;\n   while (button_1 == 0 &amp;&amp; button_2 == 0 &amp;&amp; button_3 == 0 &amp;&amp; button_4 == 0) {\n      processInputs();\n      vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str13, 92, 30, 1);\n      vga.printPROGMEM((byte*)fnt_nanofont_data, FNT_NANOFONT_SYMBOLS_COUNT, FNT_NANOFONT_HEIGHT, 3, 1, str14, 92, 38, 1);\n      vga.delay(200);\n   }\n   vga.clear(0);\n \n}\n \nvoid drawBlockNext(){ \/\/Dibuja la siguiente dicha en la derecha\n     blockExtension();\n     blockTranslation(100, 10);\n     vgaU.draw_line(95, 8, 112, 8, 0);\n     vgaU.draw_line(95, 9, 112, 9, 0);\n     vgaU.draw_line(95, 10, 112, 10, 0);\n     vgaU.draw_line(95, 11, 112, 11, 0);\n     vgaU.draw_line(95, 12, 112, 12, 0);\n     vgaU.draw_line(95, 13, 112, 13, 0);\n     vgaU.draw_line(95, 14, 112, 14, 0);\n     vgaU.draw_line(95, 15, 112, 15, 0);\n     drawBlock();\n}\n \nvoid checkBlockTranslation(){\n     x = x + delta;\n     blockExtension();\n     blockTranslation(x, y);\n     checkBlock();\n     if (busy == 0){\n        drawBlock();\n     }\n     else\n     {\n        x = x - delta;\n        blockExtension();\n        blockTranslation(x, y);\n        drawBlock();\n     }\n     vga.delay(50);\n}\n \nvoid checkBlockRotation(){\n     blockExtension();\n     blockTranslation(x, y);\n     checkBlock();\n     if (busy == 0){\n        drawBlock();\n     }\n     else\n     {\n        clock = +1;\n        blockRotation(clock);\n        blockExtension();\n        blockTranslation(x, y);\n        drawBlock();\n     }\n     vga.delay(50);\n}\n \nvoid checkForFullLine() { \/\/Mira si la linea est\u00e1 completa \n   for (int i = 0; i &lt; 4; i++){\n      for (int j = 45; j &lt; 76; j += 3) {\n         if (vga.getpixel(j, blockTmp[i][1]) &gt;0){k++; }\n      }\n      if (k == 11) { \/\/si est\u00e1 completa la borra\n         vgaU.draw_line(45, blockTmp[i][1], 78, blockTmp[i][1], 0);\n         vgaU.draw_line(45, blockTmp[i][1] + 1, 78, blockTmp[i][1] + 1, 0);\n         yLineTmp[yCounter] = blockTmp[i][1];\n         yLine[yCounter] = blockTmp[i][1];\n         yCounter++;\n      }\n      k = 0;\n    }\n    if (yLineTmp[yCounter - 1] &lt; yLine[0]) { \n       for (int i = 0; i &lt; yCounter; i++) { \n          yLine[i] = yLineTmp[yCounter - i - 1];\n       }\n    }\n    for (int i = 0; i &lt; yCounter; i++){  \/\/Mueve las fichas una linea abajo\n      for (int y = yLine[i] - 2; y &gt; 0; y = y - 2) {\n         for (int x = 45; x &lt; 76; x += 3) {\n            colorOld = vga.getpixel(x, y);\n            if (colorOld &gt; 0) {\n               vgaU.draw_line(x, y , x + 3, y , 0);\n               vgaU.draw_line(x, y + 1, x + 3, y + 1, 0);\n               vgaU.draw_line(x, y + 2, x + 3, y + 2, colorOld);\n               vgaU.draw_line(x, y + 3, x + 3, y + 3, colorOld);\n            }\n         }\n      }\n   }\n   if (yCounter != 0) {score = score + 2*int(pow(2, yCounter));}\n   drawScore(score);\n   yCounter = 0;\n}\n \nvoid setup() {\n    pinMode(A1, INPUT); \/\/Para que vaya a la derecha\/izquierda\n    pinMode(A2, INPUT); \/\/Para girar la figura\n    pinMode(A3, INPUT); \/\/Para que vaya a la derecha\/izquierda\n    pinMode(A4, INPUT); \/\/Para que bajen m\u00e1s rapido\n     \n    vga.begin();\n \n    randomSeed(analogRead(A5));\n}\n \nvoid loop() { \/\/Programa principal\n  processInputs();\n  if (noLoop &lt; 1){ \/\/ Generamos nuevas fichas\n     blockN = blockNext;\n     if (noLoop == -1 ) { \/\/Solo ocurre al principio del juego\n        drawMenu();\n        while (button_1 == 0 &amp;&amp; button_2 == 0 &amp;&amp; button_3 == 0 &amp;&amp; button_4 == 0) {\n           blockN = int(random(7)) + 1;\n           processInputs();\n        }\n     }\n     drawGameScreen();\n     drawScore(score);\n     blockNext = int(random(8));\n     blockDef(blockNext);\n     drawBlockNext();\n     blockDef(blockN);\n     x = 57;\n     y = 3;\n     button_1 = 1;\n     noLoop = 1;\n  }\n  if (button_2 == 1){ \/\/Rotar\n     if (button_2 == 1){clock = -1;}\n     delBlock();\n     blockRotation(clock);\n     checkBlockRotation();\n  }\n  if (button_1 == 1 || button_3 == 1){ \/\/Trasladar\n     if (button_1 == 1){delta = 3;}\n     if (button_3 == 1){delta = -3;}\n     delBlock();\n     checkBlockTranslation();\n  }\n  time++;\n  if (time % fast &gt; fast - 2 || button_4 == 1){ \/\/Caida de las fichas\n     if (fast &lt; 3) {fast = 2;}\n     y = y + 2;\n     delBlock();\n     replaceBlock();\n  }\n  vga.delay(10 + 2*fast);\n}\n<\/pre>\n<p>Para realizar la petici\u00f3n y poder utilizar la API son necesarias las siguientes librer\u00edas:<\/p>\n<p>#include &lt;VGAXUtils.h&gt;<br \/>\n#include &lt;math.h&gt;<\/p>\n<p>Algunas dificultades que he encontrado mientras hac\u00eda el ArduBoy han sido:<\/p>\n<p>A la hora de colocar las cosas en la pantalla fue bastante complicado al principio el como colocar los pixeles pero, por suerte, en la librer\u00eda mencionada anteriormente viene muy bien explicado.<\/p>\n<h2>Futuras mejoras:<\/h2>\n<ul>\n<li>Incluir m\u00e1s juegos al ArduBoy para que exista una mayor variedad.<\/li>\n<li>Ponerle un color distinto a cada ficha del tetris.<\/li>\n<\/ul>\n<div><b><br \/>\n<\/b><\/p>\n<div style=\"direction: ltr; margin-bottom: 0pt; margin-left: 0in; margin-top: 0pt; unicode-bidi: embed; word-break: normal;\"><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 es ArduBoy? Arduboy es una \u00abconsola\u00bb nos permite jugar al tetris. Es perfecto para todas las edades puesto que ArduBoy se adapta a cualquier pantalla que tenga VGA. Esto est\u00e1 pensado para todas&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":420,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-37","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tetris con VGA en Arduino - 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\/tetris-vga-arduino\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tetris con VGA en Arduino - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"\u00bfQu\u00e9 es ArduBoy? Arduboy es una \u00abconsola\u00bb nos permite jugar al tetris. Es perfecto para todas las edades puesto que ArduBoy se adapta a cualquier pantalla que tenga VGA. Esto est\u00e1 pensado para todas&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2019-04-22T22:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-04T17:31:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png\" \/>\n\t<meta property=\"og:image:width\" content=\"891\" \/>\n\t<meta property=\"og:image:height\" content=\"618\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Administrador de la red\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Administrador de la red\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 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\\\/tetris-vga-arduino\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/\"},\"author\":{\"name\":\"Administrador de la red\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\"},\"headline\":\"Tetris con VGA en Arduino\",\"datePublished\":\"2019-04-22T22:50:00+00:00\",\"dateModified\":\"2019-05-04T17:31:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/\"},\"wordCount\":538,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/04\\\/materiales.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/\",\"name\":\"Tetris con VGA en Arduino - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/04\\\/materiales.png\",\"datePublished\":\"2019-04-22T22:50:00+00:00\",\"dateModified\":\"2019-05-04T17:31:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/04\\\/materiales.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2015\\\/04\\\/materiales.png\",\"width\":891,\"height\":618},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tetris-vga-arduino\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tetris con VGA en Arduino\"}]},{\"@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\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/bdc38fea664f13638d2a51f4d2fc7211\",\"name\":\"Administrador de la red\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g\",\"caption\":\"Administrador de la red\"},\"sameAs\":[\"https:\\\/\\\/blogs.etsii.urjc.es\"],\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/etsiiadmin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tetris con VGA en Arduino - 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\/tetris-vga-arduino\/","og_locale":"es_ES","og_type":"article","og_title":"Tetris con VGA en Arduino - Proyectos con Arduino.","og_description":"\u00bfQu\u00e9 es ArduBoy? Arduboy es una \u00abconsola\u00bb nos permite jugar al tetris. Es perfecto para todas las edades puesto que ArduBoy se adapta a cualquier pantalla que tenga VGA. Esto est\u00e1 pensado para todas&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2019-04-22T22:50:00+00:00","article_modified_time":"2019-05-04T17:31:32+00:00","og_image":[{"width":891,"height":618,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png","type":"image\/png"}],"author":"Administrador de la red","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Administrador de la red","Tiempo de lectura":"11 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/"},"author":{"name":"Administrador de la red","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211"},"headline":"Tetris con VGA en Arduino","datePublished":"2019-04-22T22:50:00+00:00","dateModified":"2019-05-04T17:31:32+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/"},"wordCount":538,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/","name":"Tetris con VGA en Arduino - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png","datePublished":"2019-04-22T22:50:00+00:00","dateModified":"2019-05-04T17:31:32+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2015\/04\/materiales.png","width":891,"height":618},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tetris-vga-arduino\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Tetris con VGA en Arduino"}]},{"@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":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/bdc38fea664f13638d2a51f4d2fc7211","name":"Administrador de la red","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e8e366128f81a82735b0b00fe6d280414b4bad087e380fa9fee9694454b8a6fa?s=96&d=mm&r=g","caption":"Administrador de la red"},"sameAs":["https:\/\/blogs.etsii.urjc.es"],"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/etsiiadmin\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/37","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=37"}],"version-history":[{"count":3,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/37\/revisions"}],"predecessor-version":[{"id":2075,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/37\/revisions\/2075"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/420"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=37"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=37"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=37"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}