Оглавление:

Игровая консоль своими руками с использованием Arduino: 4 шага
Игровая консоль своими руками с использованием Arduino: 4 шага

Видео: Игровая консоль своими руками с использованием Arduino: 4 шага

Видео: Игровая консоль своими руками с использованием Arduino: 4 шага
Видео: Игровая консоль на Arduino своими руками [часть 1] 2024, Июль
Anonim
Image
Image

В этом уроке я покажу вам, как создать игровую консоль с использованием Arduino nano. Так что, если вы хотите увидеть подробное видео о нем, посмотрите его на моем канале на YouTube.

Запасы

Если вы купите по этим ссылкам, это поможет мне дать вам больше проектов.

1) ARDUINO NANO 2) OLED-ДИСПЛЕЙ 3) КНОПКИ 4) ПРОВОДА

Шаг 1: Пайка всех компонентов

Наслаждаться!!!
Наслаждаться!!!

Итак, после получения всех компонентов вы должны спаять все компоненты, как показано на этой принципиальной схеме.

Шаг 2: расставьте все по местам

После пайки расставьте все компоненты вот так, чтобы все было красиво.

Шаг 3: программирование

Итак, наконец, после правильного выполнения всех шагов, пришло время загрузить приведенный ниже код в Arduino.

#включают

#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, 0xFFC, 0xFF, 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, 0x00x7F, 0xFE, 0x00, 0x00, 0x00, 0x07, 0x80, 0x01, 0xE0, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x20, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01, 0xBF, 0xFC, 0x1F, 0xFA, 0xBF, 0xF1, 0xCF, 0xFA, 0x80, 0x01, 0x3F, 0xC2, 0x37, 0xF7, 0x80, 0x01, 0xEF, 0x9C, 0x01, 0xE7, 0xC0, 0x01, 0xE0, 0x70, 0x06, 0x06, 0x80, 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, 0x0F, 0x03 0xF0, 0x0F, 0xC0, 0xFC, 0x0F, 0x07, 0x90, 0x0D, 0x43, 0xC0, 0x03, 0x07, 0x90, 0x05, 0x64, 0x00, 0x00, 0xCF, 0x10, 0x07, 0x00x10, 0x26FC 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0xC8, 0x00, 0x00 0x80, 0x0B, 0xE8, 0x00, 0x80, 0x00, 0x87, 0x97, 0xE9, 0xE0, 0x80, 0x00, 0x87, 0xDF, 0xEF, 0xA0, 0x80, 0x00, 0x4B, 0xFF, 0xFF, 0x6x, 0xA0, 0xA0 0xDF, 0xFB, 0xA3, 0x00, 0x00, 0x24, 0x97, 0xE8, 0x24, 0x00, 0x00, 0x1E, 0x1F, 0xC0, 0x2C, 0x00, 0x00, 0x07, 0xF8, 0x1F, 0x00, 0x00x, 0x00F0, 0x00F0 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, шторм, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (БЕЛЫЙ); display.setCursor (65, 14); display.println ("xWing"); display.setFont (); display.setCursor (65, 17); display.setTextSize (0); display.println ("против"); display.setCursor (0, 0); float voltaza = readVcc () / 1000; display.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println («Смерть»); display.setFont (); display.setCursor (65, 42); display.println («звезда»); display.setTextSize (0); display.setCursor (65, 55); display.println ("от ВРАЙ"); display.setCursor (65, 20); display.display (); display.setFont (); beep (a, 500); beep (a, 500); beep (a, 500); beep (f, 350); звуковой сигнал (cH, 150); beep (a, 500); beep (f, 350); звуковой сигнал (cH, 150); beep (a, 650); задержка (500); задержка (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; // скорость пули 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; unsigned long pocetno = 0; беззнаковый длинный odabrano = 0; беззнаковое длинное тренутно = 0; unsigned long nivovrije = 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); если (poc == 0) {pocetno = millis (); odabrano = случайный (400, 1200); poc = 1; } тренутно = millis (); // nivoi if ((trenutno-nivovrije)> 50000) {nivovrije = trenutno; ниво = ниво + 1; брзина = брзина + 1; // brizna neprijateljevog metka if (nivo% 2 == 0) {bkugle = bkugle + 1; promjer = promjer-1; } najmanja = najmanja-50; najveca = najveca-50; } если ((odabrano + pocetno) 0) {display.drawCircle (rx, ry, 2, 1); rx = rx-brzina;} если (ispaljeno> 1) {display.drawCircle (rx2, ry2, 1, 1); rx2 = rx2-brzina;} если (ispaljeno> 2) {display.drawCircle (rx3, ry3, 4, 1); rx3 = rx3-brzina;} если (ispaljeno> 3) {display.drawCircle (rx4, ry4, 2, 1); rx4 = rx4-brzina;} если (digitalRead (12) == 0 && poz> = 2) {poz = poz-2;} if (digitalRead (11) == 0 && poz128) postoji = 0; если (smjer == 0) {nep = nep + bkugle;} else {nep = nep-bkugle;} если (nep> = (64-promjer)) smjer = 1; if (nep = nep-promjer && mety (centar-promjer) && metx = pozicija-8 && ry <= pozicija + 8) if (rx4) {rx = 95; ry = -50; тон (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija + 8) if (rx24) {rx2 = -50; ry2 = -50; тон (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija + 8) if (rx34) {rx3 = -50; ry3 = -50; тон (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija + 8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; тон (9, 100, 100); zivoti = zivoti-1; } если (rx4 <1) {ispaljeno = 0; rx4 = 200;} если (zivoti == 0) go = 1; } если (перейти == 1) {если (zivoti == 0) {тон (9, 200, 300); задержка (300); тон (9, 250, 200); задержка (200); тон (9, 300, 300); задержка (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (БЕЛЫЙ); display.setCursor (7, 10); display.println («ИГРА ЗАКОНЧЕНА!»); display.setTextSize (1); display.setCursor (7, 30); display.println ("оценка:"); display.setCursor (44, 30); display.println (бодови); display.setCursor (7, 40); display.println ("уровень:"); display.setCursor (44, 40); display.println (ниво); display.setCursor (7, 50); display.println ("время (с):"); display.setCursor (60, 50); display.println (тренутно / 1000); display.display (); если (digitalRead (3) == 0) {тон (9, 280, 300); задержка (300); тон (9, 250, 200); задержка (200); тон (9, 370, 300); задержка (300); поново (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; неп = 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; тренутно = 0; nivovrije = 0; } long readVcc () {// Считываем опорное напряжение 1,1 В относительно AVcc // устанавливаем опорное значение Vcc, а измерение - внутреннее опорное напряжение 1,1 В, определенное #if (_ AVR_ATmega32U4_) || определено (_ AVR_ATmega1280_) || определено (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif defined (_AVR_ATtiny24_) || определено (_ AVR_ATtiny44_) || определено (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif defined (_AVR_ATtiny25_) || определено (_ AVR_ATtiny45_) || определено (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #else ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif delay (2); // Ждем, пока Vref установится ADCSRA | = _BV (ADSC); // Запускаем преобразование while (bit_is_set (ADCSRA, ADSC)); // измерение uint8_t low = ADCL; // сначала необходимо прочитать ADCL - затем он блокирует ADCH uint8_t high = ADCH; // разблокирует оба long result = (high << 8) | низкий; результат = 1125300л / результат; // Вычислить Vcc (в мВ); 1125300 = 1,1 * 1023 * 1000 возвращаемый результат; // Vcc в милливольтах} void beep (int note, int duration) {// Воспроизвести звук на buzzerPin tone (9, note, duration); задержка (продолжительность); noTone (9); задержка (50); }

Шаг 4: Наслаждайтесь !

Поздравления? наконец-то ты сделал это так, если тебе понравилось, то подписывайся на мой канал на YouTube

Рекомендуемые: