Roll in Style con questo DIY Electronic D20 Die

Roll in Style con questo DIY Electronic D20 Die / Fai da te

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 di cui hai bisogno

  • 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 avere un I2C modello invece di 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:

Collegare VCC e GND sul display OLED su Arduino +5V e terra. Collegare analogico 4 sull'arduino al pin etichettato SDA. Collegare analogico 5 al SCL pin. 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 VIN pin. 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 a 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 a morto corto ed è un modo semplice per uccidere un Arduino.

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

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:

Test dei pulsanti

Ora che hai costruito il circuito, carica questo codice di prova (assicurati di selezionare la scheda e la porta corrette da Strumenti> Scheda e Strumenti> Porta menu):

const int buttonPin = 2; // il numero del pulsante pin void setup () pinMode (buttonPin, INPUT); // pulsante di configurazione Serial.begin (9600); // setup serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("Funziona"); ritardo (250); 

Una volta caricato, tieni collegato Arduino via USB e apri il monitor seriale (In alto a destra> Monitor seriale). Dovresti vedere le parole Funziona appaiono ogni volta che si preme il pulsante.

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

Impostazione OLED

È necessario installare due librerie per guidare il display. Scarica le librerie Adafruit_SSD1306 e Adafruit-GFX [Non più disponibili] 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 File> Esempi menu. Selezionare Adafruit SSD1306 e poi ssd1306_128x64_i2c. Carica questo codice (ci vorrà un po '), e dovresti vedere molte forme e motivi sul display:

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 del impostare funzione):

display.begin (SSD1306_SWITCHCAPVCC, 0x3D);

A questo:

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.

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:

Il codice

Ora che tutto è pronto, è il momento per il codice. Ecco come funzionerà in Pseudocode:

se si preme il pulsante genera un numero casuale se il numero casuale è 20 mostra il grafico altro se il numero casuale è 1 mostra il numero dello spettacolo altro grafico

Affinché questo 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):

#includere  #includere  #includere  #includere  #includere  Display Adafruit_SSD1306 (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // imposta la pinMode OLED (buttonPin, INPUT); // pulsante di configurazione 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); // cancella l'intero display display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // stampa il numero casuale display.display (); // scrive per visualizzare il ritardo (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:

Funziona bene, ma è un po 'noioso. Facciamolo meglio. Crea due nuovi metodi, drawDie e 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 (nero); display.setCursor (57, 21);

Sembra molto meglio ora:

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

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); // memorizza il numero casuale se (tira < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Ecco come appare ora:

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:

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:

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

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

void drawExplosion () // archivia l'immagine in EEPROM static const char unsigned 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 () // archivia l'immagine in EEPROM static const char unsigned 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); // disegna una nuvola di teschi

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 nel file imSku e COMP.EXP array come richiesto.

Ecco come appaiono queste immagini sul display:

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

statico 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 il tuo principale Se dichiarazione per mostrare questi nuovi elementi grafici quando ne 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:

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:

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

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

Ecco come appare all'interno:

Ed ecco il prodotto finito:

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!

Scopri di più su: Arduino, gioco da tavolo, elettronica.