Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Në këtë tutorial do t'ju tregoj se si mund të bëni një tastierë lojrash duke përdorur Arduino nano. Pra, nëse doni të shihni video të detajuar në të, atëherë shikojeni atë në kanalin tim në youtube
Furnizimet
Nëse blini nga këto lidhje do të më ndihmojë të ju jap më shumë projekte
1) ARDUINO NANO2) DISPLAY OLED 3) BUTONA PUSH 4) TELE
Hapi 1: Saldimi i të gjithë përbërësve
Pra, pasi të keni marrë të gjithë përbërësit, duhet të lidhni të gjithë përbërësit siç tregohet në këtë diagram qark
Hapi 2: Organizoni të gjitha gjërat në vende
Pas bashkimit, rregulloni të gjithë përbërësit si kjo për t'i dhënë asaj një pamje të bukur
Hapi 3: Programimi
Pra, më në fund pasi keni ndjekur të gjithë hapat siç duhet është koha për të ngarkuar kodin më poshtë në Arduino
#përfshi
#include #include #includ #include // #include #define OLED_RESET 4 Shfaqja Adafruit_SSD1306 (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 char unsigned PROGMEM stuhi = {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, 0x00, 0x00, 0x00 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x00, 0x00, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 0 0, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xD7, 0xFF, 0xFF, 0xE1, 0x00, 0x01 0x0x, 0xBF, 0xBF, 0xBF, 0xBF, 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, 0x0, 0xFC, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x10, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0E, 0x40, 0x01, 0x80, 0x07, 0xF0, 0x01, 0x80, 0x00, 0x80, 0x07, 0x00, 0xC, 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); shfaqje.fillo (SSD1306_SWITCHCAPVCC, 0x3C); display.display (); display.clearDisplay (); display.setTextSize (0); display.drawBitmap (6, 11, stuhi, 48, 48, 1); display.setFont (& FreeSans9pt7b); display.setTextColor (E BARDH); 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 = lexoVcc ()/1000; ekran.println (voltaza);; display.setFont (& FreeSans9pt7b); display.setCursor (65, 39); display.println ("Vdekja"); display.setFont (); display.setCursor (65, 42); display.println ("yll"); display.setTextSize (0); display.setCursor (65, 55); display.println ("nga VRAJ"); display.setCursor (65, 20); display.display (); display.setFont (); biep (a, 500); biep (a, 500); biep (a, 500); biip (f, 350); biep (cH, 150); biep (a, 500); biip (f, 350); biep (cH, 150); biep (a, 650); vonesë (500); vonesë (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; // shpejtësia e plumbit 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 e gjatë e panënshkruar = 0; odabrano e gjatë e panënshkruar = 0; trenutno e gjatë e panënshkruar = 0; nivovrije e gjatë e panënshkruar = 0; int poz = 30; lak void () {if (shko == 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); nëse (poc == 0) {pocetno = millis (); odabrano = rastësore (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; nëse (smjer == 0) {nep = nep+bkugle;} tjetër {nep = nep-bkugle;} nëse (nep> = (64-promjer)) smjer = 1; if (nep = nep-promjer && mety (centar-promjer) && metx = pozicija-8 && ry <= pozicija+8) if (rx4) {rx = 95; ry = -50; toni (9, 100, 100); zivoti = zivoti-1; } if (ry2> = pozicija-8 && ry2 <= pozicija+8) if (rx24) {rx2 = -50; ry2 = -50; toni (9, 100, 100); zivoti = zivoti-1; } if (ry3> = pozicija-8 && ry3 <= pozicija+8) if (rx34) {rx3 = -50; ry3 = -50; toni (9, 100, 100); zivoti = zivoti-1; } if (ry4> = pozicija-8 && ry4 <= pozicija+8) if (rx44) {rx4 = 200; ry4 = -50; ispaljeno = 0; toni (9, 100, 100); zivoti = zivoti-1; } if (rx4 <1) {ispaljeno = 0; rx4 = 200;} nëse (zivoti == 0) shko = 1; } nëse (shko == 1) {nëse (zivoti == 0) {toni (9, 200, 300); vonesë (300); toni (9, 250, 200); vonesë (200); toni (9, 300, 300); vonesë (300); zivoti = 5; } display.clearDisplay (); display.setFont (); display.setTextSize (2); display.setTextColor (E BARDH); display.setCursor (7, 10); display.println ("LODA PVERRFUNDIM!"); display.setTextSize (1); display.setCursor (7, 30); display.println ("rezultati:"); display.setCursor (44, 30); ekran.println (bodovi); display.setCursor (7, 40); display.println ("niveli:"); display.setCursor (44, 40); ekran.println (nivo); display.setCursor (7, 50); display.println ("koha (s):"); display.setCursor (60, 50); ekran.println (trenutno/1000); display.display (); if (digitalRead (3) == 0) {ton (9, 280, 300); vonesë (300); toni (9, 250, 200); vonesë (200); toni (9, 370, 300); vonesë (300); ponovo (); }}} void ponovo () {metx = 0; mety = 0; postoji = 0; nep = 8; smjer = 0; shko = 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 () {// Lexoni referencën 1.1V kundër AVcc // vendosni referencën në Vcc dhe matjen në referencën e brendshme 1.1V #nëse është përcaktuar (_ AVR_ATmega32U4_) || përcaktuar (_ AVR_ATmega1280_) || e përcaktuar (_ AVR_ATmega2560_) ADMUX = _BV (REFS0) | _BV (MUX4) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #elif përcaktohet (_AVR_ATtiny24_) || përcaktuar (_ AVR_ATtiny44_) || e përcaktuar (_ AVR_ATtiny84_) ADMUX = _BV (MUX5) | _BV (MUX0); #elif përcaktohet (_AVR_ATtiny25_) || përcaktuar (_ AVR_ATtiny45_) || e përcaktuar (_ AVR_ATtiny85_) ADMUX = _BV (MUX3) | _BV (MUX2); #tjetër ADMUX = _BV (REFS0) | _BV (MUX3) | _BV (MUX2) | _BV (MUX1); #endif vonesë (2); // Prisni që Vref të zgjidhë ADCSRA | = _BV (ADSC); // Filloni konvertimin ndërsa (bit_is_set (ADCSRA, ADSC)); // matja uint8_t e ulët = ADCL; // duhet të lexojë së pari ADCL - më pas kyç ADCH uint8_t lartë = ADCH; // zhbllokon të dy rezultatet e gjata = (të larta << 8) | i ulët; rezultat = 1125300L / rezultat; // Llogarit Vcc (në mV); 1125300 = 1.1*1023*1000 rezultati i kthimit; // Vcc në milivolt} bip i pavlefshëm (int shënim, kohëzgjatje int) {// Luani tonin në zilen e tonit Pin (9, shënim, kohëzgjatje); vonesa (kohëzgjatja); noTone (9); vonesë (50); }
Hapi 4: Shijoni !!
Urime? më në fund e bëtë kështu nëse ju pëlqeu atëherë regjistrohuni në kanalin tim në youtube