Roll in Style con questo DIY Electronic D20 Die

Vuoi qualcosa di unico al tuo prossimo incontro di gioco? Dai un'occhiata a questo D20 elettronico fai da te, con grafica personalizzata per i colpi e le mancate critiche.

Vuoi qualcosa di unico al tuo prossimo incontro di gioco?  Dai un'occhiata a questo D20 elettronico fai da te, con grafica personalizzata per i colpi e le mancate critiche.
Annuncio pubblicitario

Vuoi qualcosa di unico per il tuo prossimo gioco di ruolo da tavolo? Che ne dici di un D20 elettronico con grafica personalizzata per i colpi e le missioni critiche? Oggi ti mostrerò come costruire il tuo con un Arduino e alcune parti semplici.

Non preoccuparti se non hai mai usato Arduino in precedenza, abbiamo una guida introduttiva Guida introduttiva ad Arduino: Guida per principianti Guida introduttiva ad Arduino: Guida per principianti Arduino è una piattaforma di prototipazione elettronica open source basata su flessibile, facile- usare hardware e software. È pensato per artisti, designer, hobbisti e chiunque sia interessato a creare oggetti o ambienti interattivi. Leggi di più .

Piano di costruzione

Questo è un progetto semplice. Un Arduino guiderà un display OLED e un pulsante farà rotolare il dado. Grafica personalizzata mostrerà per colpo critico o rotoli miss critical. È possibile modificare facilmente il codice in modo che sia D8, D10 o D12.

Quello che ti serve

arduino_d20_what_you_need

  • 1 x Arduino
  • Display OLED I2C da 1 x 0, 96 "
  • 1 pulsante x
  • 1 x 10k? Resistore
  • 1 x tagliere
  • Fili di aggancio assortiti
  • Codice completo qui, se non vuoi seguire tutte le istruzioni scritte.

Queste sono le parti principali di cui hai bisogno per costruire il tuo D20. Potresti installarlo in un caso (discusso di seguito) e saldare il circuito in uno stato più permanente. Ecco le parti aggiuntive necessarie per farlo:

  • 4 viti M2 x 10 mm (0, 4 pollici)
  • 4 dadi M2
  • 4 rondelle da 7 mm (0, 28 pollici)
  • Scatto a batteria 9 V (o alternativa adatta)
  • Guaina termorestringente assortita

Questi display OLED sono molto interessanti. Di solito possono essere acquistati in bianco, blu, giallo o una miscela dei tre. Ne ho acquistato uno in blu, per abbinare il mio caso. Assicurati di ottenere un modello I2C anziché SPI .

Quasi tutti gli Arduino saranno adatti. Ho scelto un Nano, in quanto sono abbastanza piccoli da adattarsi al caso. Consulta la nostra guida all'acquisto Guida all'acquisto di Arduino: quale scheda dovresti acquistare? Guida all'acquisto di Arduino: quale scheda si dovrebbe ottenere? Ci sono così tanti diversi tipi di tavole Arduino là fuori, ti verrebbe perdonato per essere stato confuso. Quale dovresti comprare per il tuo progetto? Aiutaci, con questa guida all'acquisto di Arduino! Maggiori informazioni per ulteriori informazioni sui modelli Arduino.

Il circuito

Ecco il circuito di cui hai bisogno:

circuito arduino d20

Collegare VCC e GND sul display OLED ad Arduino + 5V e massa . Collegare l' analogico 4 sull'arduino al pin etichettato SDA . Collegare l' analogico 5 al pin SCL . Questi pin contengono il circuito necessario per pilotare il display tramite il bus I2C. I pin esatti varieranno in base al modello, ma A4 e A5 vengono utilizzati su Nano e Uno. Controlla la documentazione della libreria Wire per il tuo modello se non stai utilizzando uno o un nano.

Collegare la batteria a terra e il pin VIN . Ciò significa tensione in ingresso e accetta una varietà di tensioni CC diverse, ma prima controlla il modello specifico e talvolta può variare leggermente.

Collegare il pulsante al pin digitale 2 . Notate come il 10k? la resistenza è collegata a terra. Questo è molto importante! Questo è noto come resistenza di pull-down e impedisce ad Arduino di rilevare dati spuri o interferenze come premere un pulsante. Serve anche a proteggere il tabellone. Se questo resistore non fosse usato, + 5V andrebbe dritto nel terreno. Questo è noto come dead short ed è un modo semplice per uccidere un Arduino.

Se si sta saldando questo circuito, proteggere le connessioni con tubi termorestringenti:

arduino d20 heatshrink

Assicurati di non scaldarlo troppo, e fallo solo dopo aver verificato che il circuito funziona. Potresti anche voler girare i cavi in ​​coppie. Questo li mantiene puliti e li aiuta a proteggerli da stress eccessivo:

arduino d20 cavi intrecciati

Test dei pulsanti

Ora che hai costruito il circuito, carica questo codice di test (assicurati di selezionare la scheda e la porta corrette da Strumenti> Schede e Strumenti> Menu porta ):

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); } } 

Una volta caricato, tieni collegato Arduino tramite USB e apri il monitor seriale (in alto a destra> Monitor seriale ). Dovresti vedere le parole Funziona ogni volta che premi il pulsante.

Se non succede nulla, vai e ricontrolla il tuo circuito.

Impostazione OLED

test di arduino oled

È necessario installare due librerie per guidare il display. Scarica le librerie Adafruit_SSD1306 e Adafruit-GFX da Github e salvale nella cartella della libreria. Se non sei sicuro di dove si trovano le cartelle della biblioteca, leggi il mio tutorial di gioco retrò Arduino Retro Gaming con un display OLED Arduino Retro Gaming con un display OLED Ti sei mai chiesto quanto lavoro ci vuole per scrivere i tuoi giochi retrò? Quanto è facile codificare Pong per l'Arduino? Leggi altro, dove configuro questo stesso display in modo più dettagliato.

Riavvia il tuo IDE Arduino e carica uno schizzo di prova dal menu File> Esempi . Seleziona Adafruit SSD1306 e quindi ssd1306_128x64_i2c . Carica questo codice (ci vorrà un po '), e dovresti vedere molte forme e motivi sul display:

test di arduino oled

Se non succede niente, ricontrolla le tue connessioni. Se, dopo aver verificato, non funzionerà ancora, sarà necessario modificare il codice di esempio.

Cambia questa linea (all'inizio della funzione di configurazione ):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

A questa:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Questo dice alla libreria dettagli specifici sul display che stai usando. Ora dovresti essere pronto per continuare con la build.

Il caso

Se lo stai costruendo su una breadboard, o se non vuoi metterlo in una scatola, puoi saltare questo passaggio.

caso arduino d20

Ho progettato e stampato questa scatola in 3D. Ottieni i file su Thingiverse. Non preoccuparti se non hai una stampante 3D: i servizi online 3D Hub e Shapeways forniscono servizi di stampa online.

Potresti facilmente realizzare questa scatola di legno o acquistando una scatola di plastica.

Il coperchio è un semplice design a pressione e contiene alcuni ritagli per l'hardware:

caso arduino d20

Il codice

Ora che tutto è pronto, è il momento per il codice. Ecco come funzionerà in 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 

Affinché funzioni correttamente, è necessario generare un numero casuale: questo è il risultato del dado. Arduino ha un generatore di numeri casuali chiamato casuale, ma non dovrebbe usarlo. Mentre è abbastanza buono per compiti casuali di base, non è abbastanza casuale per un dado elettronico. I motivi per cui sono un po 'complicati, ma puoi leggere di più se sei interessato a boallen.com.

Scarica la libreria TrueRandom di sirleech su Github. Aggiungi questo alla tua cartella della libreria e riavvia l'IDE.

Ora crea un nuovo file e imposta il tuo codice iniziale (o prendi il codice finito da 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() { } 

Questo codice configura l'OLED e include tutte le librerie necessarie per comunicare con esso, insieme alla nuova libreria di numeri casuali. Ora aggiungi questo al ciclo principale:

 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); } } 

Questo è abbastanza semplice al momento, ma è un D20 funzionante. Ogni volta che si preme il pulsante, sullo schermo viene visualizzato un numero casuale compreso tra uno e 20:

arduino d20 primo codice

Funziona bene, ma è un po 'noioso. Facciamolo meglio. Crea due nuovi metodi, drawDie ed eraseDie :

 void drawDie() { display.drawRect(32, 0, 64, 64, WHITE); } 

Questi disegneranno un dado nel mezzo dello schermo. Potresti rendere questo più complicato, magari disegnando un D20 o un D12 e così via, ma è più semplice disegnare un dado base a sei facce. Ecco l'utilizzo di base:

 drawDie(); 

Successivamente, modifica il tuo ciclo principale per disegnare il numero casuale, solo più grande e nel mezzo. Cambia la dimensione del testo e il cursore su questo:

 display.setTextColor(WHITE); display.setCursor(57, 21); 

Sembra molto meglio ora:

arduino d20 singolo personaggio

L'unico problema è con i numeri più grandi di nove:

arduino d20 doppio carattere

La soluzione per questo è semplice. Qualsiasi numero inferiore a 10 avrà il cursore impostato su una posizione diversa da quella dei numeri 10 o superiore. Sostituisci questa linea:

 display.setCursor(57, 21); 

Con questo:

 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); } 

Ecco come appare ora:

arduino d20 fisso a doppio carattere

Tutto ciò che è rimasto adesso è per le immagini quando si esegue il rollback di un colpo critico. Ci sono alcuni passaggi coinvolti, ma è un processo abbastanza semplice.

Trova un'immagine adatta che desideri utilizzare (più semplice è il migliore in quanto il display è solo monocromatico). Ecco le immagini che ho usato:

artwork di arduino d20
Credito immagine: publicdomainvectors.org

Qualsiasi immagine che desideri utilizzare dovrà essere convertita in una matrice HEX. Questa è una rappresentazione dell'immagine in forma di codice. Ci sono molti strumenti disponibili per farlo e alcuni sono scritti appositamente per i display OLED. Il modo più semplice è utilizzare lo strumento online PicturetoC_Hex. Ecco le impostazioni necessarie:

immagine arduino in esadecimale

Carica la tua immagine e imposta il formato del codice su HEX: 0x . Imposta usato per il nero / bianco per tutte le funzioni di disegno . Lascia tutte le altre opzioni come predefinite. Puoi ridimensionare l'immagine qui se necessario. Premi Ottieni stringa C e dovresti vedere apparire i dati dell'immagine:

dati immagine arduino d20

Avrai bisogno di questi dati generati in un minuto. Crea due funzioni chiamate drawExplosion e drawSkull (o un nome adatto alla tua versione). Ecco il codice:

 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 } 

Se desideri utilizzare le immagini che ho usato, prosegui e copia il codice. Se si desidera utilizzare le proprie immagini generate in precedenza, copiare il codice byte negli array imSku e imExp come richiesto.

Ecco come appaiono queste immagini sul display:

immagini arduino oled

La parte più importante di quel codice è questa linea:

 static const unsigned char PROGMEM imSku[] 

Questo dice ad Arduino di memorizzare le tue immagini nella EEPROM (cos'è EEPROM? Come utilizzare Arduino EEPROM per salvare i dati tra cicli di alimentazione Come utilizzare Arduino EEPROM per salvare i dati tra cicli di alimentazione Sapevi che Arduino può memorizzare i dati quando è spento ? Sto parlando di EEPROM, quindi unisciti a me come ti mostro come leggere e scrivere ad esso. Per saperne di più) invece della sua RAM (guida rapida alla RAM A Guida rapida e sporca alla RAM: Che cosa è necessario sapere A Guida rapida e sporca alla RAM: cosa devi sapere La RAM è un componente fondamentale di ogni computer, ma può essere fonte di confusione capire se non sei un guru della tecnologia. Afferrare i termini.Per saperne di più). La ragione di ciò è semplice; l'Arduino ha una RAM limitata, e l'utilizzo di tutto il materiale per archiviare le immagini non può lasciare residui per l'esecuzione del codice

Modifica la tua istruzione if principale per mostrare questi nuovi elementi grafici quando viene eseguito uno o 20. Nota le righe di codice per mostrare il numero arrotolato accanto alle immagini:

 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 } 

Ed ecco come appaiono questi nuovi rulli:

immagini critiche di arduino d20

Questo è tutto per il codice (vai a prendere il codice da GitHub se hai saltato tutto questo). Si potrebbe facilmente modificare questo per essere un D12, D8 e così via.

Assemblea finale

Ora che tutto il resto è finito, è ora di mettere tutto in ordine. Attaccare il display, assicurandosi di non serrare eccessivamente i bulloni. Questa è forse la parte più difficile. Ho rotto un display facendo così, quindi potresti voler usare delle rondelle di plastica. Ho tagliato alcuni quadrati da Plasticard:

Distanziatori Arduino D20

I piccoli dadi e bulloni possono essere difficili da connettere. Suggerimento: utilizzare un piccolo pezzo di Blu-Tack all'estremità di un cacciavite per posizionare inizialmente i dadi:

Dado Arduino D20

Avvitare il pulsante, collegare la batteria e chiudere il coperchio. Fare attenzione a non intrappolare i cavi o raggrupparli troppo strettamente, probabilmente causando un cortocircuito. A seconda della lunghezza dei cavi di trascinamento, potrebbe essere necessario proteggere le connessioni esposte con un certo isolamento (una scatola seriale funziona bene):

Arduino D20 Inside Cardboard

Ecco come appare all'interno:

Arduino D20 Inside

Ed ecco il prodotto finito:

Arduino D20 Skull

Ora dovresti essere l'orgoglioso proprietario di un D20 elettronico!

Quali modifiche hai apportato? Hai cambiato le immagini? Facci sapere nei commenti, ci piacerebbe vedere cosa hai fatto!

In this article