Ønsker du noget, der er lidt unikt for dit næste rollespilspil? Hvad med en elektronisk D20 med brugerdefineret grafik til kritiske hits og misser? I dag vil jeg vise dig, hvordan du opbygger din egen med en Arduino og et par enkle dele.
Du skal ikke bekymre dig om du aldrig har brugt en Arduino før. Vi har en startvejledning. Kom godt i gang med Arduino: En nybegyndervejledning Kom godt i gang med Arduino: En nybegyndervejledning. Arduino er en open source elektronik prototypeplanlægning baseret på fleksibel, at bruge hardware og software. Det er beregnet til kunstnere, designere, hobbyister og alle interesserede i at skabe interaktive objekter eller miljøer. Læs mere .
Build Plan
Dette er et simpelt projekt. En Arduino vil køre et OLED display, og en knap vil rulle dysen. Brugerdefineret grafik vil vise for kritiske hit eller kritiske missruller. Du kan nemt ændre koden til at være en D8, D10 eller D12.
Hvad du har brug for
- 1 x Arduino
- 1 x 0, 96 "I2C OLED display
- 1 x trykknap
- 1 x 10k? Modstand
- 1 x brødbræt
- Assorted hook up wires
- Fuld kode her, hvis du ikke vil følge hele vejen igennem de skriftlige instruktioner.
Det er de kerneområder, du har brug for til at bygge din egen D20. Du kan ønske at installere det i en sag (diskuteret nedenfor) og lodde kredsløbet i en mere permanent tilstand. Her er de ekstra dele, du skal gøre for at gøre det:
- 4 x M2 x 10 mm (0, 4 tommer) bolte
- 4 x M2 møtrikker
- 4 x 7 mm (0, 28 inch) skiver
- 9V batteri snap (eller passende alternativ)
- Assorteret varmekrympeslange
Disse OLED-skærme er meget seje. De kan normalt købes i hvid, blå, gul eller en blanding af de tre. Jeg har købt en i blåt, for at matche mit tilfælde. Sørg for at få en I2C- model i stedet for SPI .
Næsten enhver Arduino vil være egnet. Jeg har valgt en nano, da de er små nok til at passe ind i sagen. Tjek vores købsguide Arduino Købsvejledning: Hvilket bord skal du få? Arduino Købsvejledning: Hvilket bestyrelse skal du få? Der er så mange forskellige slags Arduino boards derude, du ville blive tilgivet for at være forvirret. Hvad skal du købe til dit projekt? Lad os hjælpe med denne Arduino købeguide! Læs mere for mere information om Arduino modeller.
Kredsløbet
Her er det kredsløb du har brug for:
Tilslut VCC og GND på OLED displayet til Arduino + 5V og jord . Tilslut analog 4 på Arduino til PIN-mærket SDA . Tilslut analog 5 til SCL- stiften. Disse stifter indeholder det kredsløb, der er nødvendigt for at køre displayet ved hjælp af I2C-bussen. De nøjagtige stifter varierer efter model, men A4 og A5 bruges på Nano og Uno. Kontroller Wirebibliotekets dokumentation for din model, hvis du ikke bruger en Uno eller Nano.
Tilslut batteriet til jorden og VIN- stiften. Dette står for spænding i og accepterer en række forskellige DC spændinger - men tjek din specifikke model først, og det kan nogle gange variere lidt.
Tilslut knappen til digital pin 2 . Bemærk hvordan 10k? modstanden er forbundet til jord. Dette er meget vigtigt! Dette er kendt som en pull down modstand, og det forhindrer Arduino på at registrere falske data eller interferens som et tryk på knappen. Det tjener også til at beskytte brættet. Hvis denne modstand ikke blev brugt, ville + 5V gå lige i jorden. Dette er kendt som en død kort og er en nem måde at dræbe en Arduino på.
Hvis du lodde dette kredsløb, skal du beskytte dine forbindelser med varmekrympeslanger:
Sørg for, at du ikke opvarmer det for meget, og kun gør det, når du er sikker på, at kredsløbet virker. Du kan også ønske at vride dine kabler i par. Dette holder dem pæne og hjælper med at beskytte dem mod unødig stress:
Button Test
Nu, da du har opbygget kredsløbet, skal du uploade denne testkode (sørg for at vælge det rigtige kort og port fra Værktøjer> Styring og Værktøjer> Portmenuer):
const int buttonPin = 2; // the number of the button pin void setup() { pinMode(buttonPin, INPUT); // setup button Serial.begin(9600); // setup serial } void loop(){ if(digitalRead(buttonPin) == HIGH) { Serial.print("It Works"); delay(250); } }
Når du har uploadet, skal du holde Arduino tilsluttet via USB og åbne serielt skærmbillede ( Top Højre> Seriel skærm ). Du bør se ordene " Works Works", hver gang du trykker på knappen.
Hvis der ikke sker noget, skal du gå og dobbelttjekke dit kredsløb.
OLED-opsætning
Du skal installere to biblioteker for at køre displayet. Download Adafruit_SSD1306 og Adafruit-GFX biblioteker fra Github, og gem dem i din bibliotek mappe. Hvis du ikke er sikker på, hvor du er biblioteksmapper, skal du læse min retro spilvejledning. Arduino Retro Gaming Med en OLED-skærm Arduino Retro Gaming med en OLED-skærm Har du nogensinde spekuleret på, hvor meget arbejde der kræves for at skrive dine egne retro-spil? Hvor nemt er Pong at kode for Arduino? Læs mere, hvor jeg konfigurerer denne samme skærm mere detaljeret.
Genstart din Arduino IDE og upload en testskitse fra menuen Filer> Eksempler . Vælg Adafruit SSD1306 og derefter ssd1306_128x64_i2c . Upload denne kode (det tager et stykke tid), og du skal se mange former og mønstre på skærmen:
Hvis der ikke sker noget, skal du kontrollere dine forbindelser. Hvis det efter checkning stadig ikke virker, skal du ændre prøvekode.
Skift denne linje (i starten af opsætningsfunktionen ):
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
Til dette:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Dette fortæller bibliotekets specifikke detaljer om det display, du bruger. Du skal nu være indstillet til at fortsætte med bygningen.
Sagen
Hvis du bygger dette på et brødbræt eller ikke ønsker at pakke det op, så kan du springe over dette trin.
Jeg designede og 3D trykte denne boks. Få filerne på Thingiverse. Bare rolig, hvis du ikke har en 3D-printer - online-tjenester 3D Hubs og Shapeways tilbyder online-udskrivningstjenester.
Du kan nemt gøre denne kasse ud af træ eller ved at købe en plastprojektkasse.
Låget er et simpelt trykformet design og indeholder et par udskæringer til hardwareen:
Koden
Nu hvor alt er klar, er det tid til koden. Sådan fungerer det i Pseudocode:
if button is pressed generate random number if random number is 20 show graphic else if random number is 1 show graphic else show number
For at dette skal fungere ordentligt, skal der genereres et tilfældigt tal - dette er rollen af matricen. Arduino har en tilfældig talgenerator kaldet tilfældig, men bør ikke bruge den. Selvom det er godt nok til grundlæggende tilfældige opgaver, er det bare ikke tilfældigt nok til en elektronisk dør. Årsagerne hertil er noget kompliceret, men du kan læse mere, hvis du er interesseret i boallen.com.
Download TrueRandom-biblioteket af sirleech på Github. Tilføj dette til din bibliotek mappe og genstart IDE.
Opret nu en ny fil og opsæt din oprindelige kode (eller tag bare den færdige kode fra GitHub):
#include #include #include #include #include Adafruit_SSD1306 display(4); void setup() { display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // setup the OLED pinMode(buttonPin, INPUT); // setup button } void loop() { }
Denne kode konfigurerer OLED, og indeholder alle de biblioteker, du skal kommunikere med det, sammen med dit nye tilfældige nummerbibliotek. Tilføj nu dette til hovedsløjfen:
if(digitalRead(buttonPin) == HIGH) { delay(15); if(digitalRead(buttonPin) == HIGH) { display.fillScreen(BLACK); // erase the whole display display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0, 0); display.println(TrueRandom.random(1, 21)); // print random number display.display(); // write to display delay(100); } }
Dette er ret grundlæggende i øjeblikket, men det er en fungerende D20. Når der trykkes på knappen, vises et tilfældigt tal mellem en og 20 på skærmen:
Det fungerer godt, men det er lidt kedeligt. Lad os gøre det bedre. Opret to nye metoder, tegneDie og sletteDie :
void drawDie() { display.drawRect(32, 0, 64, 64, WHITE); }
Disse vil tegne en dør midt på skærmen. Du kan ønske at gøre dette mere kompliceret, måske ved at tegne en D20 eller en D12 osv., Men det er enklere at tegne en grundlæggende sekssidet die. Her er den grundlæggende brug:
drawDie();
Dernæst skal du ændre din hovedløkke for at tegne tilfældigt tal, kun større og i midten. Skift tekststørrelse og markør til dette:
display.setTextColor(WHITE); display.setCursor(57, 21);
Det ser meget bedre ud nu:
Det eneste problem er med tal større end ni:
Retten til dette er enkel. Ethvert tal mindre end 10 vil have markøren indstillet til en anden position end de tal 10 eller større. Udskift denne linje:
display.setCursor(57, 21);
Med dette:
int roll = TrueRandom.random(1, 21); // store the random number if (roll< 10) { // single character number display.setCursor(57, 21); } else { // dual character number display.setCursor(47, 21); }
Sådan ser det ud nu:
Alt, der er tilbage nu, er for billederne, når du kaster et kritisk hit eller miss. Der er nogle få skridt involveret, men det er en simpel nok proces.
Find et passende billede, du vil bruge (jo enklere jo bedre, da skærmen kun er enkeltfarve). Her er billederne jeg brugte:
Ethvert billede, du ønsker at bruge, skal konverteres til et HEX-array. Dette er en gengivelse af billedet i kodeform. Der er mange værktøjer til rådighed til at gøre dette, og nogle er skrevet specifikt til OLED-skærme. Den nemmeste måde er at bruge PicturetoC_Hex online værktøj. Her er de nødvendige indstillinger:
Upload dit billede, og indstil kodeformatet til HEX: 0x . Sæt Brugt til til sort / hvid til alle tegne billedfunktioner . Forlad alle de andre indstillinger som standardindstillinger. Du kan ændre størrelsen på billedet her, hvis du har brug for det. Tryk på Get C String, og du skal se billeddataene vises:
Du skal bruge disse genererede data om et øjeblik. Opret to funktioner kaldet drawExplosion og drawSkull (eller et passende navn til din version). Her er koden:
void drawExplosion() { // store image in EEPROM static const unsigned char PROGMEM imExp[] = { 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, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x7f, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xfb, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x07, 0xff, 0xff, 0xf9, 0xff, 0xd8, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x01, 0xbf, 0xff, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x13, 0xf7, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; display.drawBitmap(0, 0, imExp, 64, 62, 1); // draw mushroom cloud } void drawSkull() { // store image in EEPROM static const unsigned char PROGMEM imSku[] = { 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, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x07, 0xfe, 0x00, 0x3f, 0xc0, 0x03, 0xfe, 0x00, 0x01, 0xff, 0x81, 0xff, 0xfc, 0x07, 0xec, 0x00, 0x00, 0x3f, 0xc7, 0xff, 0xff, 0x1f, 0xc0, 0x00, 0x00, 0x0f, 0xcf, 0xff, 0xff, 0xdf, 0x00, 0x00, 0x00, 0x07, 0xbf, 0xff, 0xff, 0xee, 0x00, 0x00, 0x00, 0x01, 0x7f, 0xff, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xf8, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x1e, 0x3f, 0xff, 0x3f, 0xc7, 0x80, 0x00, 0x00, 0x1e, 0x0c, 0x0f, 0x00, 0x07, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x0f, 0x80, 0x00, 0x00, 0x1e, 0x00, 0x19, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x19, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x30, 0xc0, 0x1f, 0x00, 0x00, 0x00, 0x05, 0x80, 0x70, 0xc0, 0x1e, 0x00, 0x00, 0x00, 0x05, 0xf0, 0xe0, 0xe0, 0x36, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc4, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xcc, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xcc, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0x9e, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x7f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0xf8, 0x1c, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x3f, 0x01, 0xbf, 0x00, 0x00, 0x00, 0x07, 0xa6, 0x40, 0x09, 0x9f, 0x80, 0x00, 0x00, 0x1f, 0x27, 0x5a, 0x39, 0x9f, 0xf8, 0x00, 0x01, 0xff, 0x27, 0xdb, 0x39, 0x0f, 0xfc, 0x00, 0x03, 0xfe, 0x31, 0x7f, 0x39, 0x07, 0xfc, 0x00, 0x03, 0xfc, 0x10, 0x1a, 0x02, 0x03, 0xf8, 0x00, 0x03, 0xf8, 0x10, 0x00, 0x02, 0x01, 0xf0, 0x00, 0x01, 0xf8, 0x10, 0x00, 0x02, 0x01, 0xe0, 0x00, 0x00, 0x78, 0x10, 0x00, 0x02, 0x00, 0xe0, 0x00, 0x00, 0x70, 0x30, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x20, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0x55, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x55, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x14, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xe0, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; display.drawBitmap(0, 0, imSku, 60, 64, 1); // draw skull cloud }
Hvis du vil bruge billederne, jeg har brugt, skal du gå videre og kopiere koden. Hvis du vil bruge dine egne billeder, du genererede tidligere, skal du kopiere byte-koden til imSku- og imExp-arrayerne efter behov.
Her er, hvordan disse billeder ser ud på skærmen:
Den vigtigste del af denne kode er denne linje:
static const unsigned char PROGMEM imSku[]
Dette fortæller Arduino at gemme dine billeder i EEPROM (hvad er EEPROM? Sådan bruges Arduino EEPROM til at gemme data mellem strømcykler Sådan bruges Arduino EEPROM til at gemme data mellem strømcykler Vidste du, at Arduino kan gemme data, når den er slukket ? Jeg taler om EEPROM, så kom med mig, da jeg viser dig hvordan man læser og skriver til den. Læs mere) i stedet for sin RAM (hurtig vejledning til RAM En hurtig og beskidt guide til RAM: Hvad du behøver at vide A Hurtig og beskidt Guide til RAM: Hvad du behøver at vide RAM er en afgørende del af enhver computer, men det kan være forvirrende at forstå, om du ikke er en tech guru. I dette indlæg bryder vi det ned i let-til- forstå begreber. Læs mere). Årsagen til dette er enkel; Arduino har begrænset RAM, og ved at bruge det hele op til at gemme billeder, må der ikke overlades nogen resterende til din kode til at udføre
Ændre din vigtigste hvis erklæring for at vise denne nye grafik, når en eller 20 rulles. Bemærk kodelinjerne for at vise nummeret rullet sammen med billederne også:
if(roll == 20) { drawExplosion(); display.setCursor(80, 21); display.println("20"); } else if(roll == 1) { display.setCursor(24, 21); display.println("1"); drawSkull(); } else if (roll< 10) { // single character number display.setCursor(57, 21); display.println(roll); // write the roll drawDie(); // draw the outline } else { // dual character number display.setCursor(47, 21); display.println(roll); // write the roll drawDie(); // draw the outline }
Og her er hvad de nye ruller ser ud:
Det er alt for kodesiden (tag tag koden fra GitHub, hvis du hoppede over alt det). Du kan nemt ændre dette for at være en D12, D8 osv.
Endelig forsamling
Nu hvor alt andet er færdigt, er det tid til at kaste alt op. Bolt skærmen på, sørg for ikke at skrue over boltene. Dette er muligvis den sværeste del. Jeg har sprængt et display, så du kan bruge nogle plastskiver. Jeg skar nogle kvadrater ud af Plasticard:
De små møtrikker og bolte kan være vanskelige at forbinde. Tip: Brug et lille stykke Blu-Tack på enden af en skruetrækker til først at sætte møtrikkerne:
Skru knappen på, tilslut batteriet og luk låget. Pas på ikke at fælde nogen ledninger eller bundt dem for tæt, muligvis forårsager en kortslutning. Afhængig af længden af dine efterfølgende ledninger må du muligvis beskytte udsatte forbindelser med en vis isolering (en serielåse fungerer godt):
Sådan ser det ud indenfor:
Og her er det færdige produkt:
Du skal nu være den stolte ejer af en elektronisk D20!
Hvilke modifikationer har du lavet? Har du ændret billederne? Lad os vide i kommentarerne, vi ville elske at se, hvad du gjorde!