Roll in Style mit dieser DIY elektronischen D20 sterben

Willst du etwas Einzigartiges bei deinem nächsten Gaming Meetup? Werfen Sie einen Blick auf diese DIY elektronische D20, mit benutzerdefinierten Grafiken für kritische Treffer und Misses.

Willst du etwas Einzigartiges bei deinem nächsten Gaming Meetup?  Werfen Sie einen Blick auf diese DIY elektronische D20, mit benutzerdefinierten Grafiken für kritische Treffer und Misses.
Werbung

Willst du etwas Einzigartiges für dein nächstes Tabletop-Rollenspiel? Wie wäre es mit einem elektronischen D20 mit benutzerdefinierten Grafiken für kritische Treffer und Fehlschläge? Heute werde ich Ihnen zeigen, wie Sie Ihre eigenen mit einem Arduino und ein paar einfachen Teilen bauen.

Machen Sie sich keine Sorgen, wenn Sie noch nie zuvor ein Arduino verwendet haben. Wir haben eine Anleitung für den Einstieg. Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Prototyping-Plattform, die auf flexiblen, einfachen um Hardware und Software zu verwenden. Es richtet sich an Künstler, Designer, Bastler und alle, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen .

Bauplan

Dies ist ein einfaches Projekt. Ein Arduino wird ein OLED-Display fahren, und eine Schaltfläche wird den Würfel rollen. Benutzerdefinierte Grafiken werden für kritische Treffer oder kritische Trefferwürfe angezeigt. Sie können den Code einfach als D8, D10 oder D12 ändern.

Was du brauchst

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 x 0, 96 "I2C OLED-Display
  • 1 x Drucktaste
  • 1 x 10k? Widerstand
  • 1 x Steckbrett
  • Assorted Haken Drähte
  • Vollständiger Code hier, wenn Sie nicht den ganzen Weg durch die schriftlichen Anweisungen folgen wollen.

Das sind die Kernkomponenten, die Sie benötigen, um Ihre eigene D20 zu bauen. Möglicherweise möchten Sie es in ein Gehäuse einbauen (siehe unten) und den Schaltkreis in einen dauerhafteren Zustand verlöten. Hier sind die zusätzlichen Teile, die Sie tun müssen:

  • 4 x M2 x 10 mm (0, 4 Zoll) Schrauben
  • 4 x M2 Muttern
  • 4 x 7 mm (0, 28 Zoll) Unterlegscheiben
  • 9V Batterie-Snap (oder geeignete Alternative)
  • Sortierter Schrumpfschlauch

Diese OLED-Displays sind sehr cool. Sie können normalerweise in weiß, blau, gelb oder einer Mischung der drei gekauft werden. Ich habe einen in Blau gekauft, passend zu meinem Fall. Stellen Sie sicher, dass Sie ein I2C- Modell anstelle von SPI erhalten .

Fast jeder Arduino wird geeignet sein. Ich habe einen Nano gewählt, da er klein genug ist, um in das Gehäuse zu passen. Sehen Sie sich unsere Kaufanleitung an Arduino Buying Guide: Welches Board sollten Sie bekommen? Arduino Einkaufsführer: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino Boards da draußen, es wäre dir vergeben, wenn du verwirrt bist. Was sollten Sie für Ihr Projekt kaufen? Lassen Sie uns helfen, mit diesem Arduino Einkaufsführer! Lesen Sie mehr für weitere Informationen zu Arduino-Modellen.

Die Rennbahn

Hier ist die Schaltung, die du brauchst:

Arduino d20 Schaltung

Verbinden Sie VCC und GND auf dem OLED-Display mit dem Arduino + 5V und Masse . Verbinden Sie das analoge 4 am Arduino mit dem Pin mit der Bezeichnung SDA . Verbinden Sie Analog 5 mit dem SCL- Pin. Diese Pins enthalten die Schaltung, die benötigt wird, um die Anzeige unter Verwendung des I2C-Busses zu betreiben. Die genauen Pins variieren je nach Modell, aber A4 und A5 werden bei Nano und Uno verwendet. Überprüfen Sie die Drahtbibliotheksdokumentation für Ihr Modell, wenn Sie kein Uno oder Nano verwenden.

Verbinden Sie die Batterie mit Masse und dem VIN- Pin. Dies steht für Spannung in, und akzeptiert eine Vielzahl von verschiedenen DC-Spannungen - aber überprüfen Sie zuerst Ihr spezifisches Modell, und es kann manchmal leicht variieren.

Verbinden Sie den Knopf mit dem digitalen Pin 2 . Beachten Sie, wie die 10k? Widerstand ist mit Masse verbunden. Dies ist sehr wichtig! Dies ist als Pull-Down-Widerstand bekannt und verhindert, dass der Arduino falsche Daten oder Interferenzen als Knopfdruck erkennt. Es dient auch zum Schutz der Platine. Wenn dieser Widerstand nicht verwendet würde, würden +5 V direkt in Masse gehen. Dies ist bekannt als ein toter Kurzschluss und ist eine einfache Möglichkeit, einen Arduino zu töten.

Wenn Sie diesen Schaltkreis löten, schützen Sie Ihre Verbindungen mit Schrumpfschlauch:

Arduino D20 Wärmeschrumpf

Stellen Sie sicher, dass Sie es nicht zu viel erhitzen, und tun Sie es erst, wenn Sie sicher sind, dass die Schaltung funktioniert. Vielleicht möchten Sie auch Ihre Kabel paarweise verdrillen. Das hält sie sauber und schützt sie vor unnötigem Stress:

arduino d20 verdrillte Kabel

Schaltfläche Test

Nachdem Sie die Schaltung erstellt haben, laden Sie diesen Testcode hoch (achten Sie darauf, die richtige Karte und den richtigen Anschluss aus den Menüs Tools> Board und Tools> Port auszuwählen):

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

Nach dem Upload halten Sie den Arduino über USB verbunden und öffnen Sie den seriellen Monitor ( oben rechts> Serieller Monitor ). Sie sollten sehen, dass jedes Mal, wenn Sie die Taste drücken, die Wörter " Es funktioniert" angezeigt werden.

Wenn nichts passiert, gehen Sie und überprüfen Sie Ihre Schaltung.

OLED-Einrichtung

Arduino oled Test

Sie müssen zwei Bibliotheken installieren, um das Display zu steuern. Laden Sie die Adafruit_SSD1306- und Adafruit-GFX-Bibliotheken von Github herunter und speichern Sie sie in Ihrem Bibliotheksordner. Wenn Sie nicht sicher sind, wo Sie Bibliothek Ordner sind, lesen Sie meine Retro-Gaming-Tutorial Arduino Retro Gaming mit einem OLED-Display Arduino Retro-Gaming mit einem OLED-Display Haben Sie sich jemals gefragt, wie viel Arbeit es braucht, um Ihre eigenen Retro-Spiele zu schreiben? Wie einfach ist Pong für den Arduino zu codieren? Lesen Sie mehr, wo ich diese Anzeige detaillierter konfiguriere.

Starten Sie Ihre Arduino IDE neu und laden Sie eine Testskizze über das Menü Datei> Beispiele . Wählen Sie Adafruit SSD1306 und dann ssd1306_128x64_i2c . Laden Sie diesen Code hoch (es wird eine Weile dauern), und Sie sollten viele Formen und Muster auf dem Display sehen:

Arduino oled Test

Wenn nichts passiert, überprüfen Sie Ihre Verbindungen. Wenn es nach der Überprüfung immer noch nicht funktioniert, müssen Sie den Beispielcode ändern.

Ändern Sie diese Zeile (am Anfang der Setup- Funktion):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

Zu diesem:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Dies teilt der Bibliothek spezifische Details über die von Ihnen verwendete Anzeige mit. Sie sollten jetzt alle auf das Fortsetzen mit dem Build eingestellt sein.

Der Fall

Wenn Sie dies auf einem Steckbrett aufbauen oder es nicht einpacken wollen, können Sie diesen Schritt überspringen.

Arduino d20 Fall

Ich habe diese Box entworfen und 3D gedruckt. Holen Sie sich die Dateien auf Thingiverse. Machen Sie sich keine Sorgen, wenn Sie keinen 3D-Drucker haben - Online-Dienste 3D Hubs und Shapeways bieten Online-Druckdienste.

Sie können diese Schachtel ganz einfach aus Holz machen oder eine Kunststoff-Projektkiste kaufen.

Der Deckel ist ein einfaches Push-Fit-Design und enthält ein paar Aussparungen für die Hardware:

Arduino d20 Fall

Der Code

Jetzt, wo alles fertig ist, ist es Zeit für den Code. So funktioniert es 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 

Damit dies richtig funktioniert, muss eine Zufallszahl generiert werden - das ist die Rolle des Würfels. Arduino hat einen Zufallszahlengenerator namens random, sollte aber nicht verwenden. Während es für grundlegende zufällige Aufgaben gut genug ist, ist es einfach nicht zufällig genug für einen elektronischen Würfel. Die Gründe, warum sind etwas kompliziert, aber Sie können mehr lesen, wenn Sie an boallen.com interessiert sind.

Laden Sie die TrueRandom-Bibliothek von Sirleech auf Github herunter. Fügen Sie dies Ihrem Bibliotheksordner hinzu und starten Sie die IDE neu.

Erstellen Sie nun eine neue Datei und richten Sie Ihren ursprünglichen Code ein (oder greifen Sie einfach den fertigen Code von 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() { } 

Dieser Code konfiguriert die OLED und enthält alle Bibliotheken, mit denen Sie kommunizieren müssen, sowie Ihre neue Zufallszahlenbibliothek. Fügen Sie das jetzt zur Hauptschleife hinzu:

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

Dies ist zur Zeit sehr einfach, aber es ist ein funktionierender D20. Immer wenn die Taste gedrückt wird, wird eine Zufallszahl zwischen 1 und 20 auf dem Bildschirm angezeigt:

Arduino d20 erster Code

Das funktioniert gut, aber es ist ein bisschen langweilig. Lass es uns besser machen. Erstellen Sie zwei neue Methoden, DrawDie und EraseDie :

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

Diese zeichnen einen Würfel in der Mitte des Bildschirms. Vielleicht möchten Sie das komplizierter machen, vielleicht indem Sie einen D20 oder einen D12 usw. zeichnen, aber es ist einfacher, einen einfachen sechsseitigen Würfel zu zeichnen. Hier ist die grundlegende Verwendung:

 drawDie(); 

Als nächstes ändern Sie Ihre Hauptschleife, um die Zufallszahl zu zeichnen, nur größer und in der Mitte. Ändern Sie die Textgröße und den Cursor wie folgt:

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

Es sieht jetzt viel besser aus:

Arduino d20 einzelnes Zeichen

Das einzige Problem ist mit Zahlen größer als neun:

Arduino d20 Doppelcharakter

Die Lösung dafür ist einfach. Bei Zahlen unter 10 wird der Cursor auf eine andere Position als die Zahlen 10 oder größer gesetzt. Ersetzen Sie diese Zeile:

 display.setCursor(57, 21); 

Mit diesem:

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

So sieht das jetzt aus:

Arduino D20 festen Doppelcharakter

Alles, was noch übrig ist, sind die Bilder, wenn Sie einen kritischen Treffer oder Fehltreffer erzielen. Es gibt ein paar Schritte, aber es ist ein einfacher Vorgang.

Suchen Sie ein geeignetes Bild, das Sie verwenden möchten (je einfacher, desto besser, da das Display nur eine Farbe hat). Hier sind die Bilder, die ich benutzt habe:

Arduino d20 Kunstwerk
Bildquelle: publicdomainvectors.org

Jedes Bild, das Sie verwenden möchten, muss in ein HEX-Array konvertiert werden. Dies ist eine Darstellung des Bildes in Codeform. Dafür stehen viele Tools zur Verfügung, und einige sind speziell für OLED-Displays geschrieben. Der einfachste Weg ist das PicturetoC_Hex Online-Tool. Hier sind die Einstellungen erforderlich:

Arduino-Bild zu hexen

Laden Sie Ihr Bild hoch und legen Sie das Codeformat auf HEX: 0x fest . Set Wird für Schwarz / Weiß für alle Zeichenfunktionen verwendet . Belassen Sie alle anderen Optionen als Standardeinstellungen. Sie können das Bild hier ändern, wenn Sie müssen. Drücken Sie Get C String und Sie sollten die Bilddaten angezeigt werden:

Arduino d20 Bilddaten

Sie benötigen diese generierten Daten in einer Minute. Erstellen Sie zwei Funktionen namens drawExplosion und drawSkull (oder einen geeigneten Namen für Ihre Version). Hier ist der Code:

 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 } 

Wenn Sie die von mir verwendeten Bilder verwenden möchten, kopieren Sie den Code. Wenn Sie Ihre zuvor erstellten eigenen Bilder verwenden möchten, kopieren Sie den Byte-Code nach Bedarf in die Arrays imSku und imExp .

So sehen diese Bilder auf dem Display aus:

Arduino oled Bilder

Der wichtigste Teil dieses Codes ist diese Zeile:

 static const unsigned char PROGMEM imSku[] 

Dies teilt dem Arduino mit, Ihre Bilder im EEPROM zu speichern (was ist EEPROM? Wie verwende ich Arduino EEPROM um Daten zwischen Power Cycles zu speichern? Wie verwende ich Arduino EEPROM um Daten zwischen Power Cycles zu speichern? Wussten Sie, dass Arduino Daten speichern kann? "Ich spreche über das EEPROM, also komm zu mir, während ich dir zeige, wie man es liest und schreibt. Lesen Sie mehr) anstelle von seinem RAM (Kurzanleitung zu RAM Eine schnelle und schmutzige Anleitung zum RAM: Was Sie wissen müssen A Schnelle und dreckige Anleitung zum RAM: Was Sie wissen müssen RAM ist eine entscheidende Komponente jedes Computers, aber es kann verwirrend sein, wenn Sie kein Tech-Guru sind. begreifen Begriffe. Lesen Sie mehr). Der Grund dafür ist einfach; Der Arduino verfügt über einen begrenzten RAM-Speicher. Wenn Sie alle Daten für die Speicherung von Bildern verwenden, bleiben keine weiteren Informationen für die Ausführung des Codes übrig

Ändern Sie Ihre if- Hauptanweisung, um diese neuen Grafiken anzuzeigen, wenn eine 1 oder 20 gerollt wird. Beachten Sie die Codezeilen, um die Nummer neben den Bildern anzuzeigen:

 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 } 

Und so sehen diese neuen Rollen aus:

Arduino d20 kritische Bilder

Das ist alles für die Codepage (geh den Code von GitHub, wenn du das alles überspringst). Sie könnten dies leicht zu einem D12, D8 und so weiter ändern.

Endmontage

Jetzt, da alles andere fertig ist, ist es Zeit, alles in Ordnung zu bringen. Schrauben Sie das Display an und achten Sie darauf, die Schrauben nicht zu fest anzuziehen. Dies ist möglicherweise der schwierigste Teil. Ich habe ein Display geknackt, so dass Sie möglicherweise einige Kunststoffscheiben verwenden möchten. Ich habe ein paar Quadrate aus Plasticard geschnitten:

Arduino D20 Abstandshalter

Die kleinen Schrauben und Muttern können schwierig zu verbinden sein. Tipp: Verwenden Sie ein kleines Stück Blu-Tack am Ende eines Schraubenziehers, um die Muttern zu setzen:

Arduino D20 Nuss

Schrauben Sie den Knopf an, schließen Sie den Akku an und schließen Sie den Deckel. Achten Sie darauf, dass Sie keine Kabel einklemmen oder sie zu eng bündeln und dadurch möglicherweise einen Kurzschluss verursachen. Abhängig von der Länge Ihrer Schleppleitungen müssen Sie eventuell freiliegende Verbindungen mit einer Isolierung schützen (eine serielle Box funktioniert gut):

Arduino D20 in Karton

So sieht es innen aus:

Arduino D20 Innen

Und hier ist das fertige Produkt:

Arduino D20 Schädel

Sie sollten jetzt stolzer Besitzer eines elektronischen D20 sein!

Welche Änderungen haben Sie vorgenommen? Hast du die Bilder geändert? Lass uns in den Kommentaren wissen, wir würden gerne sehen, was du getan hast!

In this article