162.Enduro

Grupo

Aléxsander Arruda Leite Bruno Alves Fábio Henrique de Souza Rodolpho Agizzio Molina Wellington Piter Maria Yuri Cândido Feltrim

Projeto

Desenvolvimento de um clone do jogo Enduro da Activision para o Arduino UNO.

Resumo

A ideia inicial do projeto é o desenvolvimento de um clone do jogo de corrida Enduro da Activison, para o Android UNO. O jogo original se popularizou na década de 80 no console Atari 2600. Para se criar um clima de nostalgia ainda mais completo, também foram criados um case para o Arduino, semelhante ao Atari 2600 e uma mini "TV de tubo".

Software/materiais utilizados

//HARDWARE//

//1 x Arduino Uno // //1 x Display LCD TFT 2.4" Touchscreen Shield para Arduino // //1 x Módulo Joystick de 2 Eixos para Arduino // //1 x Push Botton // //1 x Resistor de 2,2K Ohms // //1 x Resistor de 100 Ohms // //2 x Conectores DB25 "Fêmeas" // //2 x Conectores DB25 "Machos" // //1 x Conector DB9 "Fêmea" // //1 x Conector DB9 "Macho" // //1 x Cabo Extensor Serial DB9 // //Flat Cable para confecção de um Cabo Extensor DB25 e demais ligações eletrônicas //

SOFTWARE Arduino Software IDE Biblioteca Adafruit GFX Library Biblioteca Display LCD TFT LGDP4535

//MATERIAIS Cola branca Cola quente Palitos de sorvete Papelão Tinta spray Preto Fosco

Metodologia

O projeto consiste na utilização de um Arduino UNO como uma plataforma de hardware, ou seja um console de video game, para o desenvolvimento de jogos eletrônicos. O jogo escolhido para o desenvolvimento foi o Enduro da Activision, jogo popular na década de 80, no console Atari 2600. Para o desenvolvimento do jogo, foi adquirido um Display TFT LCD de 2,4" (320x240px) para a exibição das imagens, além do material fornecido pela FATEC Americana. O jogo está sendo desenvoldido na linguagem C++ com o uso da biblioteca gŕafica Adafruit GFX Library que provê algumas funções de desenhos básicos. A interação do jogador é feita através de um joystick analógico de dois eixos, usado no caso do Enduro para controlar o movimento do carro no Eixo X (direita e esquerda) e no Eixo Y para desacelerar (baixo). Assim como no jogo original a aceleração é feita enquanto se preciona um botão e para isso utilizamos um push button separado, em conjunto com o joystick. Além do jogo, afim de trazer um clima maior de nostalgia ao projeto, resolvemos criar um case que lembrasse o Atari 2600 para o Arduino UNO e utilizar o Display TFT LCD em separado, em um case que lembrasse as antigas TV "de tubo". Para confeccionar os cases utilizamos algums materiais simples como papelão e palitos de sorvete.

Desenvolvimento

**Cabos/Conectores**
O primeiro desafio foi confeccionar um cabo e conectores para a conexão do Display TFT LCD SHIELD ao Arduino UNO e os conectores para o joystick. Para isso foram utilizados Conectores DB25 e DB9 e Flat Cables:
 * = ==[[image:IMG_20161104_171309.jpg width="408" height="233" caption="Figura 1 - Cabo e Conectores DB25   "]] == ||= ==[[image:P_20161118_181207.jpg width="408" height="233" caption="Figura 2 - Soldando fios no Conector DB25"]] == ||
 * = [[image:P_20161118_173458.jpg width="234" height="255" caption="Figura 3 - Montagem Conector DB25"]] ||= [[image:P_20161206_205909.jpg width="408" height="233" caption="Figura 4 - Conexões do Display TFT LCD e Buzzer"]] ||
 * = [[image:P_20161206_205755.jpg width="408" height="233" caption="Figura 5 - Conexões Arduino UNO"]] ||= ==[[image:P_20161208_210952.jpg width="408" height="233" caption="Figura 6 - Conexão Joystick"]] == ||
 * [[image:P_20161206_210144.jpg width="408" height="233" align="center" caption="Figura 7 - Conexão Display TFT LCD com Arduino UNO"]] ||  ||

<span style="color: #333333; font-family: arial,helvetica,sans-serif;">**Cases**
Para a confeccionar os cases do Atari 2600 e da TV de "tubo" utilizamos materiais como papelão e palitos de sorvete colados


 * = [[image:P_20161208_090051.jpg width="404" height="229" align="left" caption="Figura 8 - Confecção dos Cases"]] ||= [[image:P_20161208_092052.jpg width="408" height="233" caption="Figura 9 - Confecção dos Cases"]] ||
 * = [[image:P_20161208_204059.jpg width="408" height="233" caption="Figura 10 - Pintura dos Cases"]] ||=  ||

**Programação**
A primeira dificuldade que encontramos foi encontrar o driver correto para que o Display TFT LCD exibisse imagens. Após pesquisar e testar alguns drivers encontramos o driver correto, que em nosso caso era o "LGDP4535". Uma vez que conseguimos exibir imagens no Display TFT LCD partimos para o desenvolvimento do jogo em si.
 * Display TFT LCD**

Para o desenvolvimento do jogo procuramos alguns exemplos de códigos e utilizamos algumas fontes como referências:
 * Jogo Enduro**

Race game - Atari Enduro - Clone do Enduro desenvolvido na linguagem Lua para tablets ATmega328 Flappy Bird Clone Clone do Flappy Bird para Arduino UNO

No site do jogo Flappy Bird Clone são discutidos algumas técnicas de otimização tanto para o desenho das imagens, quanto para o controle do loop do game. O autor utilizou como referência o artigo [|deWiTTERS Game Loop] que discute técnicas para otimizar o FPS e a velocidade nos jogos de maneira adaptável a velocidade do hardware onde o mesmo está sendo executado. Estamos implementando estas técnicas para desenvolver nosso Enduro de forma mais otimizada possível no hardware limitado do Arduino UNO.

Para desenhar as imagens do jogo, utilizamos as funções da Biblioteca gráfica Adafruit GFX Library. Como a velocidade de atualização do Display TFT LCD não é das melhores, redesenhamos apenas o que realmente foi alterado em cada quadro como forma de otimizar e evitar o efeito de //"flicker"// na tela.

Neste vídeo podemos ver as primeiras imagens do jogo, com a passagem das "fases" que correspondem ao ciclo de um dia no Enduro.

media type="file" key="Enduro-Arduino-FasesDia-Final.mp4" align="center" width="655" height="655"

Abaixo temos os arquivos fontes do jogo Enduro (ainda em desenvolvimento). Assim que o jogo estiver em um estágio mais avançado o projeto e o código fonte serão disponibilizados publicamente em um repositório no GitHub.

enduro.ino code format="cpp" // ============================================================================= // // Arduino - Enduro clone // --- // by Fabio Henrique de Souza // // This is a Enduro clone made for the Arduino UNO and a 2.4" TFT screen (LGDP4535). // It features an intro screen, a game over screen containing // the player score and a similar gameplay from the original game. // // Developed and tested with an Arduino UNO and a 2.4" TFT screen (LGDP4535). // // TODO: - ? // // Dependencies: // - https://github.com/fabiohsouza/Arduino/Adafruit-GFX-Library // - https://github.com/fabiohsouza/Arduino/TFT-LGDP4535-Library // // References: // - http://www.tweaking4all.com/hardware/arduino/sainsmart-arduino-color-display/ // - http://www.koonsolo.com/news/dewitters-gameloop/ // - http://www.arduino.cc/en/Reference/PortManipulation // // // http://github.com/fabiohsouza/Arduino/games/arduino-enduro // // =============================================================================


 * 1) include <Adafruit_GFX.h> // Core graphics library
 * 2) include <LGDP4535.h>    // Hardware-specific library
 * 3) include "colors.h"      //Colors definitions
 * 4) include "logos.h"       //Logos bitmaps arrays
 * 5) include "daymodes.h"    //DayModes

//Initialize 2.4" TFT-LGDP4535 screen

// (connect pins accordingly or change these values) //#define TFT_DC           9     // RS/DC //#define TFT_RST          8     // RES //#define TFT_CS          10     // CS // initialize screen with pins //static Adafruit_ST7735 TFT = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); LGDP4535 tft;

//global screen size constants //screen const int TFT_W =  320;     // screen width const int TFT_H =  240;     // screen height const int TFT_W2 = 160;     // half screen width const int TFT_H2 = 120;     // half screen height

//sky const int SKY_H   = 52;     // sky height //sunsets const int SUNSET_H = 4;     // sunset height (all sunsets = sa+sb+sc = 12) const int SUNSETC_T = SKY_H - SUNSET_H;    // sunsetc top = 48 const int SUNSETB_T = SUNSETC_T - SUNSET_H; // sunsetb top = 44 const int SUNSETA_T = SUNSETB_T - SUNSET_H; // sunseta top = 40 //clouds const int CLOUDA_H = 52;    // cloudA height const int GAPAB_W  = 112; const int CLOUDB_H = 60;    // cloudA height const int GAPBA_W  = 76;

//field const int FIELD_H = 112;    //field height //race viewport const int RACEVP_T = 0; const int RACEVP_L = 10; const int RACEVP_W = 300; const int RACEVP_H = SKY_H + FIELD_H;

//hud const int HUD_T =           // HUD top const int HUD_L =  102;     // HUD left const int HUD_W =  116;     // HUD width const int HUD_H =  40;      // HUF height

//int bottomY = HEIGHT * 0.21; //int trackWidth = WIDTH * 0.9; // width of the track at the bottom //int horizonY = trackWidth * 0.55 + bottomY; //int trackHeight = horizonY - bottomY; //int trackLength = 100; // in meters

//main objects

//myCar = nil //cars = {} //day = nil //track = nil

//various global variables //int speed = 0;                // for showing to the user //int location = 0;             // my location //int maxPosition = -1000;      // the location relative to me where the front-most car is //int lastCollisionT = -1000;    // last time i collided, for the penalty int gameTime = 1000;             // for reporting to the user //int startTime = 0;            // the time at which the game started //int accAngle = 0;             // gravity.z threshold for accelerating vs breaking //int days = 1;                 // which day we're on //int carsToPassInit = 200;          // on day 1 we need this many //int carsToPass = carsToPassInit;  // how many cars to advance to the next day //boolean gameOver = false; //boolean gameStarted = false;          // whether the user has started the game //boolean gamePaused = false; //int maxSpeed = 150; //int regularSpeed = 85; int mode = 0;

//DayModes DayMode daymode;

// --- // draw pixel // --- // faster drawPixel method by inlining calls and using setAddrWindow and pushColor // using macro to force inlining //#define drawPixel(a, b, c) TFT.setAddrWindow(a, b, a, b); TFT.pushColor(c)

// --- // initial setup // --- void setup { //Initialize TFT tft.begin; tft.setRotation(1);

//Initialize Serial Monitor for Debug //Serial.begin(9600); //Serial.println(F("Enduro for Arduino")); }

// --- // main loop // --- void loop { game_start; game_loop; game_over; }

// --- // game start // --- void game_start { tft.fillScreen(BLACK);

//Display logo Fatec JD tft.fillScreen(BLACK); tft.drawXBitmap((int)(TFT_W - fatecjd_width)/2,(int)(TFT_W - fatecjd_width)/2, fatecjd, fatecjd_width, fatecjd_height, WHITE); delay(3000);

/*TFT.fillRect(10, TFTH2 - 20, TFTW-20, 1, ST7735_WHITE); TFT.fillRect(10, TFTH2 + 32, TFTW-20, 1, ST7735_WHITE); TFT.setTextColor(ST7735_WHITE); TFT.setTextSize(3); // half width - num char * char width in pixels TFT.setCursor( TFTW2-(6*9), TFTH2 - 16); TFT.println("ENDURO"); TFT.setTextSize(3); TFT.setCursor( TFTW2-(6*9), TFTH2 + 8); TFT.println("for"); TFT.setTextSize(0); TFT.setCursor( 10, TFTH2 - 28); TFT.println("Arduino UNO"); TFT.setCursor( TFTW2 - (12*3) - 1, TFTH2 + 34); TFT.println("press button"); while (1) { // wait for push button if ( !(PIND & (1<<PD2)) ) break; } */

//Draw HUD tft.fillScreen(BLACK); tft.fillRect(HUD_L, HUD_T, HUD_W, HUD_H, ORANGE1); tft.fillRect(116, 174, 88, 12, ORANGE5); tft.fillRect(116, 194, 14, 12, ORANGE5); tft.fillRect(144, 194, 60, 12, ORANGE5);

//fatejdmini logo tft.fillRect(30, 222, 25, 3, ORANGE7); tft.fillRect(30, 225, 25, 4, ORANGE8); tft.fillRect(30, 229, 25, 2, YELLOW1); tft.fillRect(30, 231, 25, 4, GREEN6); tft.fillRect(30, 235, 25, 2, BLUE2); tft.drawXBitmap(50, 222, fatecjdmini, fatecjdmini_width, fatecjdmini_height, WHITE);

// init game settings game_init; }

void loop { gameTime++; if (gameTime> 1000){ gameTime = 0; draw; } delay(10); //Serial.print("gameTime = "); Serial.println(gameTime); }

void draw{ //Serial.println(F("Draw")); drawBackground; }

void drawBackground{ //Serial.println(F("drawBackground")); //Serial.print("mode = "); Serial.println(mode); setDayMode(mode); //field tft.fillRect(RACEVP_L, SKY_H, RACEVP_W, FIELD_H, daymode.field); //sky tft.fillRect(RACEVP_L, RACEVP_T, RACEVP_W, SKY_H, daymode.sky); //sunset if(daymode.sky != daymode.sunseta){ tft.fillRect(RACEVP_L, SUNSETA_T, RACEVP_W, SUNSET_H, daymode.sunseta); tft.fillRect(RACEVP_L, SUNSETB_T, RACEVP_W, SUNSET_H, daymode.sunsetb); tft.fillRect(RACEVP_L, SUNSETC_T, RACEVP_W, SUNSET_H, daymode.sunsetc); }   //clouds if(daymode.cloud != daymode.sunseta){ drawClouds(61); }

//Update HUD

// the left/right controls

//Next mode mode++; if(mode == 8){ mode = 0; }

}

void drawClouds(int X){ //cloudA tft.fillRect(X, 42, 42, 10, daymode.cloud);

//cloudB tft.fillRect(X+132, 40, 48, 12, daymode.cloud);

} void setDayMode(int mode){

switch (mode) {       case 0: //morning daymode.length = 0; daymode.field  = GREEN1; daymode.sky    = BLUE1; daymode.sunseta = BLUE1; daymode.sunsetb = BLUE1; daymode.sunsetc = BLUE1; daymode.cloud  = GREEN5; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; case 1: //day1 daymode.length = 0; daymode.field  = GREEN2; daymode.sky    = ORANGE2; daymode.sunseta = ORANGE3; daymode.sunsetb = ORANGE4; daymode.sunsetc = GREEN5; daymode.cloud  = BLACK; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; case 2: //day2 daymode.length = 0; daymode.field  = GREEN2; daymode.sky    = ORANGE1; daymode.sunseta = ORANGE2; daymode.sunsetb = ORANGE3; daymode.sunsetc = ORANGE4; daymode.cloud  = BLACK; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; case 3: //snow daymode.length = 0; daymode.field  = GRAY5; daymode.sky    = BLUE2; daymode.sunseta = BLUE2; daymode.sunsetb = BLUE2; daymode.sunsetc = BLUE2; daymode.cloud  = GRAY4; daymode.rearlights = false; daymode.snow   = true; daymode.fog   = false; break; case 4: //sunset daymode.length = 0; daymode.field  = BLACK; daymode.sky    = GRAY2; daymode.sunseta = GRAY2; daymode.sunsetb = GRAY2; daymode.sunsetc = GRAY2; daymode.cloud  = ORANGE3; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; case 5: //night daymode.length = 0; daymode.field  = BLACK; daymode.sky    = GRAY1; daymode.sunseta = GRAY1; daymode.sunsetb = GRAY1; daymode.sunsetc = GRAY1; daymode.cloud  = GRAY4; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; case 6: //fog daymode.length = 0; daymode.field  = GRAY1; daymode.sky    = GRAY1; daymode.sunseta = GRAY1; daymode.sunsetb = GRAY1; daymode.sunsetc = GRAY1; daymode.cloud  = GRAY1; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = true; break; case 7: //amanhecer daymode.length = 0; daymode.field  = GREEN2; daymode.sky    = DARKVIOLET; daymode.sunseta = DARKMAGENTA; daymode.sunsetb = ORANGE1; daymode.sunsetc = ORANGE2; daymode.cloud  = BLACK; daymode.rearlights = false; daymode.snow   = false; daymode.fog   = false; break; } }

code

colors.h code format="cpp" // Color definitions
 * 1) define BLACK   0x0000
 * 2) define BLUE    0x001F
 * 3) define RED     0xF800
 * 4) define GREEN   0x07E0
 * 5) define CYAN    0x07FF
 * 6) define MAGENTA 0xF81F
 * 7) define YELLOW  0xFFE0
 * 8) define WHITE   0xFFFF

//Enduro colors
 * 1) define GREEN1  0x0220 //004400
 * 2) define GREEN2  0x31C0 //303800
 * 3) define GREEN3  0x44F0 //429e82
 * 4) define GREEN4  0x6CE8 //6e9c42
 * 5) define GREEN5  0x8423 //86861d
 * 6) define GREEN6  0x6CE8 //6e9c42
 * 7) define BLUE1   0x18D4 //181aa7
 * 8) define BLUE2   0x2997 //2d32b8
 * 9) define BLUE3   0x4398 //4272c2
 * 10) define GRAY1   0x4A49 //4a4a4a
 * 11) define GRAY2   0x6B6D //6f6f6f
 * 12) define GRAY3   0xC618 //c0c0c0
 * 13) define GRAY4   0x8671 //8e8e8e
 * 14) define GRAY5   0xEF7D //ececec
 * 15) define ORANGE1 0xA0C3 //a71a1a
 * 16) define ORANGE2 0xA1C2 //a33915
 * 17) define ORANGE3 0xB285 //b55328
 * 18) define ORANGE4 0xA304 //a26221
 * 19) define ORANGE5 0xC487 //c3903d
 * 20) define ORANGE6 0xCA49 //c84848
 * 21) define ORANGE7 0xB986 //b83232
 * 22) define ORANGE8 0xB3C6 //b47a30
 * 23) define YELLOW1 0xD688 //d2d240
 * 24) define DARKVIOLET 0x68D3 //68199a
 * 25) define DARKMAGENTA 0x90CF //97197a

code daymodes.h code format="cpp"
 * 1) include <Adafruit_GFX.h> // Core graphics library

class DayMode {  public: uint16_t length; uint16_t field; uint16_t sky; uint16_t sunseta; uint16_t sunsetb; uint16_t sunsetc; uint16_t cloud; boolean rearlights; boolean snow; boolean fog;

DayMode; };

code logos.h code format="cpp" //Fatec static const uint8_t PROGMEM fatecjd[] = { 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xcf, 0xc7, 0x0f, 0x0f, 0x3c, 0x80, 0x87, 0x39, 0x0e, 0x1c, 0x6e, 0x06, 0x8f, 0x0f, 0x73, 0xf0, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xef, 0xef, 0xcf, 0x1f, 0x7f, 0xe0, 0xcf, 0xff, 0x1f, 0x7f, 0xfe, 0xcf, 0xdf, 0x9f, 0xff, 0xf8, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xef, 0xef, 0xef, 0x9f, 0x7f, 0xe0, 0xdf, 0xff, 0x9f, 0x7f, 0xfe, 0xef, 0xdf, 0x9f, 0xff, 0xfd, 0x03, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x23, 0x9e, 0xe7, 0xb9, 0x07, 0x20, 0xde, 0xf7, 0x9c, 0xf3, 0x7e, 0xef, 0x41, 0xbc, 0xef, 0x89, 0x07, 0xff, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0xc0, 0xc3, 0x9f, 0xe7, 0xff, 0x03, 0xc0, 0xdf, 0xf3, 0xbc, 0xff, 0x0e, 0xff, 0x80, 0xbf, 0xe7, 0xf1, 0x07, 0xff, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xc0, 0xf3, 0x9f, 0xf7, 0xff, 0x03, 0xe0, 0xdf, 0xf3, 0xfc, 0xff, 0x0e, 0xff, 0xc0, 0xbf, 0xe7, 0xfd, 0x07, 0xff, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xc0, 0xf3, 0x9e, 0xe7, 0xff, 0x03, 0xf0, 0xdc, 0xf3, 0xbc, 0xff, 0x0e, 0xff, 0xe0, 0xbd, 0xe7, 0x9d, 0x07, 0xff, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xc0, 0xf3, 0x9e, 0xe7, 0x91, 0x27, 0xf0, 0xde, 0xf3, 0xbc, 0x47, 0x0e, 0xef, 0xf9, 0xbd, 0xe7, 0x9d, 0x07, 0xff, 0xf0, 0x3f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xc0, 0xf3, 0x9f, 0xef, 0x1f, 0x7f, 0xf0, 0xdf, 0xf3, 0xbc, 0x7f, 0x0e, 0xef, 0xff, 0xbf, 0xe7, 0xfd, 0x07, 0xff, 0xe0, 0x1f, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0xc0, 0xe3, 0x1f, 0xcf, 0x1f, 0x3f, 0xe0, 0xdf, 0xf3, 0x3c, 0x7f, 0x0e, 0xcf, 0xcf, 0xbf, 0xe7, 0xf9, 0x07, 0xff, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0xfc, 0x3f, 0x00, 0xc0, 0x7f, 0xfe, 0x01, 0xf0, 0xff, 0x00, 0x80, 0xff, 0x0f, 0x80, 0x09, 0xff, 0xc0, 0x0f, 0x00, 0x7e, 0xf8, 0x03, 0x7f, 0xf8, 0xff, 0x0f, 0xf0, 0x13, 0x00, 0xfe, 0x00, 0xf0, 0x0f, 0xc0, 0x3f, 0x00, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xfe, 0x01, 0xfc, 0xff, 0x03, 0xe0, 0xff, 0x0f, 0xe0, 0x7f, 0xff, 0xe0, 0x1f, 0x80, 0xff, 0xfd, 0x87, 0xff, 0xf8, 0xff, 0x0f, 0xfe, 0xff, 0x00, 0xfe, 0x01, 0xfe, 0x7f, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0x01, 0xf8, 0xff, 0xff, 0x01, 0xff, 0xff, 0x07, 0xf0, 0xff, 0x0f, 0xf8, 0xff, 0xff, 0xe0, 0x1f, 0xe0, 0xff, 0xff, 0x87, 0xff, 0xf8, 0xff, 0x0f, 0xff, 0xff, 0x01, 0xfe, 0x01, 0xff, 0x7f, 0xc0, 0x3f, 0xe0, 0xff, 0xff, 0x03, 0xfc, 0xff, 0xff, 0x81, 0xff, 0xff, 0x0f, 0xf8, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xf8, 0xff, 0x0f, 0xff, 0xff, 0x03, 0xfe, 0x81, 0xff, 0x7f, 0xc0, 0x3f, 0xf0, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x81, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf0, 0xff, 0xff, 0x87, 0xff, 0xf8, 0xff, 0x0f, 0xff, 0xff, 0x07, 0xfe, 0xc1, 0xff, 0x7f, 0xc0, 0x3f, 0xf0, 0xff, 0xff, 0x07, 0xfe, 0xff, 0xff, 0xc1, 0xff, 0xff, 0x1f, 0xf8, 0x07, 0x0e, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf8, 0xff, 0xff, 0x87, 0xff, 0xf8, 0xff, 0x0f, 0x7f, 0xff, 0x07, 0xfe, 0xc1, 0xff, 0x7d, 0xc0, 0x3f, 0xf8, 0x0f, 0xf8, 0x0f, 0xff, 0x81, 0xff, 0xe1, 0x7f, 0xe0, 0x3f, 0xfc, 0x03, 0x08, 0xff, 0xe7, 0xff, 0xe0, 0x1f, 0xfc, 0x8f, 0xff, 0x87, 0xff, 0xf8, 0xff, 0x07, 0x0f, 0xf8, 0x07, 0xfe, 0xe1, 0x3f, 0x70, 0xc0, 0x3f, 0xf8, 0x0f, 0xf0, 0x0f, 0xff, 0x01, 0xff, 0xe1, 0x3f, 0xc0, 0x3f, 0xfc, 0x03, 0x00, 0xff, 0x81, 0xff, 0xe0, 0x1f, 0xfc, 0x07, 0xfe, 0x87, 0xff, 0x80, 0x7f, 0x00, 0x03, 0xf0, 0x0f, 0xfe, 0xe1, 0x1f, 0x00, 0xc0, 0x3f, 0xf8, 0x07, 0xf0, 0x0f, 0xff, 0x00, 0xfe, 0xe1, 0x1f, 0xc0, 0x7f, 0xfc, 0x07, 0x00, 0xff, 0x00, 0xff, 0xe0, 0x1f, 0xfc, 0x03, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x00, 0x00, 0xf0, 0x0f, 0xfe, 0xe1, 0x3f, 0x00, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x1f, 0xff, 0x00, 0xfe, 0xf1, 0x1f, 0x80, 0x7f, 0xf8, 0x3f, 0x80, 0xff, 0x00, 0xff, 0xe0, 0x1f, 0xfc, 0x01, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x00, 0x80, 0xff, 0x0f, 0xfe, 0xc1, 0xff, 0x00, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x9f, 0x7f, 0x00, 0xfe, 0xf1, 0x1f, 0x80, 0x7f, 0xf8, 0xff, 0x81, 0x7f, 0x00, 0xff, 0xe0, 0x1f, 0xfe, 0x03, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x00, 0xf8, 0xff, 0x0f, 0xfe, 0xc1, 0xff, 0x03, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x9f, 0x7f, 0x00, 0xfe, 0xf1, 0x0f, 0x80, 0x7f, 0xf0, 0xff, 0x87, 0x7f, 0x00, 0xfe, 0xe0, 0x1f, 0xfe, 0x01, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x00, 0xfe, 0xff, 0x0f, 0xfe, 0xc1, 0xff, 0x1f, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x9f, 0x7f, 0x00, 0xfe, 0xf1, 0x0f, 0x80, 0x7f, 0xf0, 0xff, 0x8f, 0x7f, 0x00, 0xfe, 0xe0, 0x1f, 0xfe, 0x01, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x00, 0xff, 0xff, 0x0f, 0xfe, 0x81, 0xff, 0x3f, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x9f, 0x7f, 0x00, 0xfe, 0xf1, 0x0f, 0x80, 0x7f, 0xc0, 0xff, 0x8f, 0x7f, 0x00, 0xff, 0xe0, 0x1f, 0xfe, 0x01, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0x80, 0xff, 0xfb, 0x0f, 0xfe, 0x01, 0xff, 0x7f, 0xc0, 0x3f, 0xfc, 0x03, 0xe0, 0x9f, 0x7f, 0x00, 0xfe, 0xf1, 0x0f, 0x80, 0x7f, 0x00, 0xff, 0x9f, 0x7f, 0x00, 0xff, 0xe0, 0x1f, 0xfe, 0x01, 0xfc, 0x87, 0xff, 0x80, 0x7f, 0xc0, 0xff, 0xf0, 0x0f, 0xfe, 0x01, 0xfc, 0xff, 0xc0, 0x3f, 0xfc, 0x03, 0xf0, 0x8f, 0x7f, 0x00, 0xfe, 0xf1, 0x1f, 0x80, 0x7f, 0x00, 0xfc, 0x9f, 0x7f, 0x00, 0xff, 0xe0, 0x1f, 0xfe, 0x03, 0xf8, 0x87, 0xff, 0x80, 0x7f, 0xc0, 0x3f, 0xf0, 0x0f, 0xfe, 0x01, 0xd0, 0xff, 0xc0, 0x3f, 0xf8, 0x07, 0xf0, 0x0f, 0xff, 0x00, 0xff, 0xe1, 0x1f, 0xc0, 0x3f, 0x00, 0xe0, 0x9f, 0xff, 0x00, 0xff, 0xe0, 0x1f, 0xfe, 0x03, 0xfc, 0x87, 0xff, 0x80, 0x3f, 0xc0, 0x1f, 0xf0, 0x0f, 0xfe, 0x01, 0x80, 0xff, 0xc0, 0x3f, 0xf8, 0x0f, 0xf0, 0x0f, 0xff, 0x81, 0xff, 0xe1, 0x3f, 0xc0, 0x3f, 0x00, 0xe0, 0x9f, 0xff, 0x80, 0xff, 0xe0, 0x1f, 0xfc, 0x03, 0xfe, 0x87, 0xff, 0x80, 0x7f, 0xe0, 0x1f, 0xf8, 0x0f, 0xfe, 0x01, 0x00, 0xff, 0xc0, 0x3f, 0xf0, 0x0f, 0xfc, 0x07, 0xff, 0xc3, 0xff, 0xc1, 0x7f, 0xf0, 0x3f, 0x0c, 0xe0, 0x1f, 0xff, 0xc1, 0xff, 0xe0, 0x1f, 0xfc, 0x0f, 0xff, 0x87, 0xff, 0x80, 0x7f, 0xe0, 0x3f, 0xf8, 0x0f, 0xfe, 0xe1, 0x00, 0xff, 0xc0, 0x3f, 0xf0, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0xc1, 0xff, 0xff, 0x1f, 0xfc, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xfc, 0x9f, 0xff, 0x87, 0xff, 0x80, 0xff, 0xcc, 0x7f, 0xff, 0x0f, 0xfe, 0xe1, 0xff, 0xff, 0xc0, 0x3f, 0xf0, 0xff, 0xff, 0x03, 0xfe, 0xff, 0xff, 0x81, 0xff, 0xff, 0x0f, 0xfc, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf8, 0xff, 0xff, 0x87, 0xff, 0x80, 0xff, 0xcf, 0xff, 0xff, 0x0f, 0xfe, 0xe1, 0xff, 0xff, 0xc0, 0x3f, 0xe0, 0xff, 0xff, 0x01, 0xfc, 0xff, 0xff, 0x01, 0xff, 0xff, 0x0f, 0xfc, 0xff, 0x0f, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf0, 0xff, 0xff, 0x87, 0xff, 0x80, 0xff, 0xcf, 0xff, 0xff, 0x0f, 0xfe, 0xe1, 0xff, 0x7f, 0xc0, 0x3f, 0xc0, 0xff, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x01, 0xfe, 0xff, 0x07, 0xfc, 0xff, 0x07, 0xfc, 0xff, 0xff, 0xe0, 0x1f, 0xf0, 0xff, 0xff, 0x87, 0xff, 0x00, 0xff, 0x8f, 0xff, 0xff, 0x0f, 0xfe, 0xe1, 0xff, 0x1f, 0xc0, 0x3f, 0x80, 0xff, 0x7f, 0x00, 0xf0, 0xff, 0xfe, 0x01, 0xfc, 0xff, 0x03, 0xfc, 0xff, 0x03, 0xf8, 0x7f, 0xff, 0xe0, 0x1f, 0xe0, 0xff, 0xff, 0x83, 0xff, 0x00, 0xfe, 0x0f, 0xff, 0xf7, 0x0f, 0xfe, 0xe1, 0xff, 0x1f, 0xc0, 0x3f, 0x00, 0xfc, 0x0f, 0x00, 0xe0, 0x3f, 0xfe, 0x01, 0xf0, 0x7f, 0x00, 0xf0, 0x7f, 0x00, 0xe0, 0x3f, 0xff, 0xe0, 0x1f, 0x80, 0xff, 0xfc, 0x03, 0x7f, 0x00, 0xfc, 0x0f, 0xfe, 0xf2, 0x0f, 0xfe, 0x81, 0xff, 0x07, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, 0x08, 0x00, 0x00, 0x0e, 0xc0, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x00, 0xe0, 0x38, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x0e, 0xe1, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x80, 0xff, 0xc0, 0xff, 0x3f, 0x00, 0x70, 0x38, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x0e, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xf0, 0xff, 0x7f, 0x00, 0x30, 0x30, 0x00, 0x00, 0x07, 0x00, 0x00, 0x1e, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x7f, 0xf0, 0xff, 0xff, 0x00, 0x30, 0x30, 0x00, 0x00, 0x03, 0x00, 0x00, 0x3f, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x3f, 0x78, 0xff, 0xef, 0x00, 0x38, 0x70, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x37, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0x0f, 0x38, 0xfe, 0xff, 0x01, 0x3c, 0xf0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x37, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x07, 0x78, 0xff, 0xfb, 0x00, 0x38, 0x70, 0x00, 0xe0, 0x80, 0x01, 0x00, 0x77, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x00, 0xf8, 0xff, 0xff, 0x00, 0x30, 0x30, 0x00, 0x30, 0xf0, 0x01, 0x00, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x00, 0x30, 0x30, 0x00, 0x30, 0x7c, 0x00, 0xe0, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfb, 0x7f, 0x00, 0x30, 0x30, 0x00, 0x18, 0x1f, 0x00, 0xf0, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x1c, 0x00, 0x70, 0x38, 0x00, 0x0c, 0x0f, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x38, 0x00, 0xfc, 0x03, 0x00, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x18, 0x00, 0x38, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 * 1) define fatecjd_width 288
 * 2) define fatecjd_height 62
 * 3) define fatecjdmini_width 84
 * 4) define fatecjdmini_height 18

//Fatec mini static const uint8_t PROGMEM fatecjdmini[] = { 0x04, 0x00, 0x00, 0x10, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x16, 0x39, 0x5d, 0xdb, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x07, 0xff, 0x77, 0xff, 0xdc, 0x00, 0x08, 0x00, 0x18, 0x00, 0xb4, 0x9f, 0xd7, 0xd7, 0xff, 0xdc, 0x00, 0x1c, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x88, 0x01, 0x00, 0x00, 0x8c, 0x07, 0x1f, 0x0f, 0x8f, 0xdf, 0xf8, 0xc8, 0xe3, 0x18, 0x07, 0xcc, 0xcf, 0x9f, 0x9f, 0xcf, 0xdf, 0xfc, 0xfd, 0xf7, 0x99, 0x0f, 0xcc, 0xdc, 0x99, 0xb9, 0xe1, 0xdc, 0xcc, 0xdd, 0x81, 0x99, 0x01, 0xec, 0xd8, 0xd8, 0xb1, 0xe7, 0xdc, 0xce, 0x9d, 0xf1, 0x9b, 0x07, 0xec, 0xd8, 0xd8, 0x31, 0xee, 0xdc, 0xce, 0x9d, 0xb9, 0x1b, 0x0f, 0xcc, 0xdc, 0x9d, 0x39, 0xec, 0xdc, 0xcc, 0x9d, 0x99, 0x1b, 0x0c, 0xcc, 0x8f, 0x9f, 0x9f, 0xcf, 0xdf, 0xfc, 0x9d, 0xff, 0x9b, 0x0f, 0x0c, 0x03, 0x1b, 0x06, 0x81, 0xc9, 0xd8, 0x09, 0x33, 0x99, 0x03, 0x0c, 0x00, 0x1c, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x08, 0x04, 0x0f, 0xc0, 0x0f, 0x00, 0x00, 0x00, 0xfc, 0x7e, 0x24, 0x04, 0x0c, 0x03, 0x80, 0x03, 0x00, 0x00, 0x00, 0x38, 0x7e, 0x24, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

code

Resultados Embora não tenhamos conseguido concluir ainda o jogo, o projeto foi bem proveitoso para estudarmos várias questões e técnicas relacionadas ao desenvolvimento de jogos com a linguagem C++ para o Arduino no seu limitado hardware. Continuaremos o desenvolvimento até que tenhamos o jogo funcionando por completo.

Quanto as cases, conseguimos confecciona-las com a utilização do material que nos propomos, mas o acabamento não ficou 100% como gostaríamos. Para uma próxima versão, como melhoria, pretendemos utilizar algum outro material, como madeira mdf para a confecção dos cases.



Conclusão Concluímos que a utilização do Arduino como uma plataforma de hardware para desenvolvimento de jogos eletrônicos é um excelente exercício para desenvolvermos jogos cada vez mais otimizados, estudando técnicas mais avançadas de programação afim de extrair ao máximo de seus limitados recursos. Como o projeto podemos vivenciar a mesma dificuldade dos primeiros desenvolvedores de jogos que contavam com pouquíssimos recursos de hardware e ainda assim criaram jogos lembrados até os dias de hoje.