Índice:
- Suprimentos
- Etapa 1: soldando todos os componentes
- Etapa 2: Organize todas as coisas nos lugares
- Etapa 3: Programação
- Etapa 4: Aproveite !
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:35
Neste tutorial, vou mostrar como você pode fazer um console de jogos usando o Arduino nano. Então, se você quiser ver um vídeo detalhado sobre isso, dê uma olhada no meu canal do youtube
Suprimentos
Se você comprar a partir destes links, isso vai me ajudar a dar-lhe mais projetos
1) ARDUINO NANO2) DISPLAY OLED3) BOTÕES DE PRESSIONE 4) FIOS
Etapa 1: soldando todos os componentes
Então, depois de obter todos os componentes, você deve soldar todos os componentes como mostrado neste diagrama de circuito
Etapa 2: Organize todas as coisas nos lugares
Depois de soldar tudo, organize todos os componentes assim para dar uma boa aparência
Etapa 3: Programação
Então, finalmente, após seguir todas as etapas corretamente, é hora de fazer o upload do código abaixo para o Arduino
#incluir
#include #include #include #include // # include #define OLED_RESET 4 Adafruit_SSD1306 display (OLED_RESET); const int c = 261; const int d = 294; const int e = 329; const int f = 349; const int g = 391; const int gS = 415; const int a = 440; const int aS = 455; const int b = 466; const int cH = 523; const int cSH = 554; const int dH = 587; const int dSH = 622; const int eH = 659; const int fH = 698; const int fSH = 740; const int gH = 784; const int gSH = 830; const int aH = 880; const unsigned char PROGMEM dioda16 = {0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x3F, 0xF0, 0x3C, 0x00, 0x3C, 0x00, 0xFF, 0x00, 0x7F, 0xFF, 0x7F, 0xFF, 0xFF, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x1F, 0xF0, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00}; const unsigned char PROGMEM storm = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0xFA, 0x80, 0x01, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x06, 0x80, 0x01, 0xE0, 0xC0, 0x03, 0x06, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xFF, 0x80, 0x01, 0xF8, 0x00, 0x00, 0x1D, 0xC0, 0x03, 0x70, 0x00, 0x80, 0x0C, 0x60, 0x05, 0xB0, 0x07, 0xF0, 0x08, 0x90, 0x09, 0x10, 0x1F, 0xF8, 0x09, 0xD0, 0x0B, 0x90, 0x1F, 0x7C, 0x03, 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0xFC, 0x00, 0x00, 0x26, 0x10, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x80, 0x07, 0xC8, 0x00, 0x80, 0x00, 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0xA0, 0x80, 0x00, 0x6B, 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00}; void setup () {pinMode (3, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); pinMode (11, INPUT_PULLUP); display.begin (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); display.clearDisplay (); display.setTextSize (0); display.drawBitmap (6, 11, tempestade, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (WHITE); display.setCursor (65, 14); display.println ("xWing"); display.setFont (); display.setCursor (65, 17); display.setTextSize (0); display.println ("vs"); display.setCursor (0, 0); float voltaza = readVcc () / 1000; display.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Morte"); display.setFont (); display.setCursor (65, 42); display.println ("estrela"); display.setTextSize (0); display.setCursor (65, 55); display.println ("por VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); bip (a, 500); bip (a, 500); bip (a, 500); bip (f, 350); bip (cH, 150); bip (a, 500); bip (f, 350); bip (cH, 150); bip (a, 650); atraso (500); atraso (500); } int metx = 0; int mety = 0; int postoji = 0; int nep = 8; int smjer = 0; int go = 0; int rx = 95; int ry = 0; int rx2 = 95; int ry2 = 0; int rx3 = 95; int ry3 = 0; int bodovi = 0; int brzina = 3; // velocidade do marcador int bkugle = 1; int najmanja = 600; int najveca = 1200; int promjer = 10; int rx4 = 95; int ry4 = 0; int zivoti = 5; int poc = 0; int ispaljeno = 0; int nivo = 1; int centar = 95; pocetno longo sem sinal = 0; odabrano longo sem sinal = 0; trenutno longo sem sinal = 0; nivovrije longo sem sinal = 0; int poz = 30; void loop () {if (go == 0) {display.clearDisplay (); display.drawPixel (50, 30, 1); display.drawPixel (30, 17, 1); display.drawPixel (60, 18, 1); display.drawPixel (55, 16, 1); display.drawPixel (25, 43, 1); display.drawPixel (100, 43, 1); display.drawPixel (117, 52, 1); display.drawPixel (14, 49, 1); display.drawPixel (24, 24, 1); display.drawPixel (78, 36, 1); display.drawPixel (80, 57, 1); display.drawPixel (107, 11, 1); display.drawPixel (150, 11, 1); display.drawPixel (5, 5, 1); display.drawPixel (8, 7, 1); display.drawPixel (70, 12, 1); display.drawPixel (10, 56, 1); display.drawPixel (70, 25, 1); if (poc == 0) {pocetno = millis (); odabrano = aleatório (400, 1200); poc = 1; } trenutno = millis (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; nivo = nivo + 1; brzina = brzina + 1; // brizna neprijateljevog metka if (nivo% 2 == 0) {bkugle = bkugle + 1; promjer = promjer-1; } najmanja = najmanja-50; najveca = najveca-50; } if ((odabrano + pocetno) 0) {display.drawCircle (rx, ry, 2, 1); rx = rx-brzina;} if (ispaljeno> 1) {display.drawCircle (rx2, ry2, 1, 1); rx2 = rx2-brzina;} if (ispaljeno> 2) {display.drawCircle (rx3, ry3, 4, 1); rx3 = rx3-brzina;} if (ispaljeno> 3) {display.drawCircle (rx4, ry4, 2, 1); rx4 = rx4-brzina;} if (digitalRead (12) == 0 && poz> = 2) {poz = poz-2;} if (digitalRead (11) == 0 && poz128) postoji = 0; if (smjer == 0) {nep = nep + bkugle;} else {nep = nep-bkugle;} if (nep> = (64-promjer)) smjer = 1; if (nep = nep-promjer && mety (centar-promjer) && metx = pozicija-8 && ry <= pozicija + 8) if (rx4) {rx = 95; ry = -50; tom (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija + 8) if (rx24) {rx2 = -50; ry2 = -50; tom (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija + 8) if (rx34) {rx3 = -50; ry3 = -50; tom (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija + 8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; tom (9, 100, 100); zivoti = zivoti-1; } se (rx4 <1) {ispaljeno = 0; rx4 = 200;} if (zivoti == 0) go = 1; } if (go == 1) {if (zivoti == 0) {tom (9, 200, 300); atraso (300); tom (9, 250, 200); atraso (200); tom (9, 300, 300); atraso (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (WHITE); display.setCursor (7, 10); display.println ("GAME OVER!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("pontuação:"); display.setCursor (44, 30); display.println (bodovi); display.setCursor (7, 40); display.println ("nível:"); display.setCursor (44, 40); display.println (nivo); display.setCursor (7, 50); display.println ("hora (es):"); display.setCursor (60, 50); display.println (trenutno / 1000); display.display (); if (digitalRead (3) == 0) {tom (9, 280, 300); atraso (300); tom (9, 250, 200); atraso (200); tom (9, 370, 300); atraso (300); ponovo (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; go = 0; rx = 95; ry = 0; rx2 = 95; ry2 = 0; rx3 = 95; ry3 = 0; bodovi = 0; brzina = 3; // brizna neprijateljevog metka bkugle = 1; najmanja = 600; najveca = 1200; promjer = 12; rx4 = 95; ry4 = 0; zivoti = 5; poc = 0; ispaljeno = 0; nivo = 1; pocetno = 0; odabrano = 0; trenutno = 0; nivovrije = 0; } long readVcc () {// Lê a referência 1.1V contra AVcc // define a referência para Vcc e a medição para a referência 1.1V interna # se definida (_ AVR_ATmega32U4_) || definido (_ AVR_ATmega1280_) || definido (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif definido (_AVR_ATtiny24_) || definido (_ AVR_ATtiny44_) || definido (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif definido (_AVR_ATtiny25_) || definido (_ AVR_ATtiny45_) || definido (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif delay (2); // Aguarde o Vref se estabelecer ADCSRA | = _BV (ADSC); // Iniciar a conversão enquanto (bit_is_set (ADCSRA, ADSC)); // medindo uint8_t low = ADCL; // deve ler ADCL primeiro - então bloqueia ADCH uint8_t high = ADCH; // desbloqueia ambos resultado longo = (alto << 8) | baixo; resultado = 1125300L / resultado; // Calcula Vcc (em mV); 1125300 = 1,1 * 1023 * 1000 resultado de retorno; // Vcc em milivolts} void beep (int note, int duration) {// Toca o tom no buzzerPin tone (9, nota, duração); atraso (duração); noTone (9); atraso (50); }
Etapa 4: Aproveite !
Parabéns? você finalmente fez isso se gostou, então se inscreva no meu canal do youtube
Recomendado:
Console de jogos portátil Lego com invasores espaciais: 4 etapas
Lego Portable Gaming Console com Space Invaders: Você já pensou em ser um desenvolvedor de jogos e construir seu próprio console de jogos para jogar em qualquer lugar? Tudo que você precisa é de um pouco de tempo, hardwareLego bricksa Mini-Calliope (pode ser encomendado neste site https://calliope.cc/en) e alguma habilidade
Apenas outro console ATtiny85 Retro para jogos: 4 etapas
Apenas outro console ATtiny85 retro para jogos: uma pequena configuração retro semelhante a um console baseada em ATtiny85 x 0,96 OLED para jogar Tetris, invasores do espaço, etc
Raspberry Pi Smart TV e console de jogos: 4 etapas
Raspberry Pi Smart TV e console de jogos: Tem uma TV não inteligente em sua casa ou está pensando em comprar um Chromecast, Firestick ou talvez um console de jogos? Vamos fazer um nós mesmos. Faremos uma inicialização dupla do nosso raspberry pi com Lakka e OSMC. Lakka para emular jogos e OSMC para vídeo
Como fazer upload de jogos para Arduboy e 500 jogos para Flash-carrinho: 8 etapas
Como fazer upload de jogos para Arduboy e 500 jogos para Flash-cart: Eu fiz alguns Arduboy caseiros com memória Flash serial que pode armazenar no máximo 500 jogos para jogar na estrada. Espero compartilhar como carregar jogos nele, incluindo como armazenar jogos na memória flash serial e criar seu próprio pacote de jogo consolidado
Console Arduino VGA com cinco jogos: 4 etapas
Console Arduino VGA com cinco jogos: Em meus Instructables anteriores, reproduzi versões simplificadas de alguns dos jogos clássicos de arcade mais populares, por meio de um Arduino vazio e alguns outros componentes. Mais tarde, juntei cinco deles em um único esboço. Aqui vou mostrar