Roll i stil med denne DIY Electronic D20 Die

Ønsker du noget, der er lidt unikt ved din næste spilmøde? Tjek denne DIY elektronisk D20, der indeholder brugerdefineret grafik til kritiske hits og misser.

Ønsker du noget, der er lidt unikt ved din næste spilmøde?  Tjek denne DIY elektronisk D20, der indeholder brugerdefineret grafik til kritiske hits og misser.
Reklame

Ø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

arduino_d20_what_you_need

  • 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:

arduino d20 kredsløb

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:

arduino d20 heatshrink

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:

arduino d20 snoede kabler

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

arduino oled test

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:

arduino oled test

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.

arduino d20 sag

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:

arduino d20 sag

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:

arduino d20 første kode

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:

arduino d20 enkelt tegn

Det eneste problem er med tal større end ni:

arduino d20 dual character

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:

arduino d20 fast dobbelt karakter

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:

arduino d20 kunstværk
Billedkredit: publicdomainvectors.org

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:

arduino billede til hex

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:

arduino d20 billeddata

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:

arduino oled billeder

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:

arduino d20 kritiske billeder

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:

Arduino D20 Spacers

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:

Arduino D20 Nut

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):

Arduino D20 Indvendigt Karton

Sådan ser det ud indenfor:

Arduino D20 Inside

Og her er det færdige produkt:

Arduino D20 Skull

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!

In this article