Rollen Sie im Stil mit diesem DIY Electronic D20 Würfel
Wünschen Sie etwas Einzigartiges für Ihr nächstes Tabletop-Rollenspiel? Wie wäre es mit einer elektronischen D20 mit benutzerdefinierten Grafiken für kritische Treffer und Fehlschüsse? Heute zeige ich Ihnen, wie Sie mit einem Arduino und einigen einfachen Teilen Ihr eigenes bauen können.
Machen Sie sich keine Sorgen, wenn Sie noch nie einen Arduino verwendet haben. Wir haben einen Leitfaden für den Einstieg. Erste Schritte mit Arduino: Ein Leitfaden für Anfänger Erste Schritte mit Arduino: Ein Leitfaden für Anfänger Arduino ist eine Open-Source-Prototyping-Plattform für Elektronik, die auf flexiblen, Hardware und Software verwenden. Es ist für Künstler, Designer, Hobbyisten und alle gedacht, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen .
Plan erstellen
Dies ist ein einfaches Projekt. Ein Arduino steuert ein OLED-Display, und eine Schaltfläche wirft den Würfel. Benutzerdefinierte Grafiken werden für kritische Treffer oder kritische Fehlwürfe angezeigt. Sie können den Code problemlos in D8, D10 oder D12 ändern.
Was du brauchst
- 1 x Arduino
- 1 x 0,96 "I2C OLED-Display
- 1 x Druckknopf
- 1 x 10k? Widerstand
- 1 x Brotschneidebrett
- Verschiedene Drähte anschließen
- Vollständiger Code hier, wenn Sie die schriftlichen Anweisungen nicht vollständig befolgen möchten.
Dies sind die Kernkomponenten, die Sie zum Bau Ihrer eigenen D20 benötigen. Sie können es in einem Gehäuse installieren (siehe unten) und den Stromkreis in einen dauerhafteren Zustand verlöten. Hier sind die zusätzlichen Teile, die Sie dazu benötigen:
- 4 x M2 x 10 mm (0,4 Zoll) Schrauben
- 4 x M2 Muttern
- 4 x 7 mm (0,28 Zoll) Scheiben
- 9V-Batterieklemme (oder geeignete Alternative)
- Verschiedene Schrumpfschläuche
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, um meinem Fall zu entsprechen. Stellen Sie sicher, dass Sie eine bekommen I2C Modell statt SPI.
Fast jedes Arduino ist geeignet. Ich habe einen Nano gewählt, da er klein genug ist, um in den Koffer zu passen. Schauen Sie sich unseren Einkaufsführer an Arduino Buying Guide: Welches Board sollten Sie bekommen? Arduino Buying Guide: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino-Boards, dass Sie sich verwechseln könnten. Was solltest du für dein Projekt kaufen? Lassen Sie uns mit diesem Arduino Einkaufsführer helfen! Weitere Informationen zu Arduino-Modellen finden Sie unter Weitere Informationen.
Die Rennbahn
Hier ist die Schaltung, die Sie brauchen:
Verbinden VCC und GND auf dem OLED-Display zum Arduino +5V und Boden. Verbinden analog 4 auf dem Arduino auf dem Pin beschriftet SDA. Verbinden analog 5 zum SCL Stift. Diese Pins enthalten die Schaltung, die zum Ansteuern der Anzeige über den I2C-Bus erforderlich ist. Die genauen Pins sind je nach Modell unterschiedlich, aber beim Nano und beim Uno werden A4 und A5 verwendet. Lesen Sie in der Dokumentation zur Drahtbibliothek für Ihr Modell nach, wenn Sie keinen Uno oder Nano verwenden.
Verbinden Sie die Batterie mit Masse und VIN Stift. Dies steht für Spannung in und akzeptiert eine Vielzahl unterschiedlicher Gleichspannungen - aber überprüfen Sie zuerst Ihr spezifisches Modell, und es kann manchmal etwas variieren.
Verbinden Sie den Button mit digitaler 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 Arduino falsche Daten oder Interferenzen als Tastendruck erkennt. Es dient auch zum Schutz der Platine. Wenn dieser Widerstand nicht verwendet wird, geht + 5V direkt in Masse. Dies ist bekannt als ganz kurz und ist eine einfache Möglichkeit, einen Arduino zu töten.
Wenn Sie diesen Stromkreis verlöten, schützen Sie Ihre Anschlüsse mit einem Schrumpfschlauch:
Stellen Sie sicher, dass Sie es nicht zu stark aufheizen, und tun Sie es erst, wenn Sie sicher sind, dass die Schaltung funktioniert. Sie können auch Ihre Kabel paarweise verdrillen. Dies hält sie ordentlich und schützt sie vor übermäßigem Stress:
Button Test
Nachdem Sie die Schaltung aufgebaut haben, laden Sie diesen Testcode hoch (stellen Sie sicher, dass Sie die richtige Karte und den richtigen Port aus dem auswählen Extras> Platine und Extras> Port Menüs):
const int buttonPin = 2; // die Nummer der Schaltfläche Pin void setup () pinMode (buttonPin, INPUT); // Setup-Schaltfläche Serial.begin (9600); // Setup serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("It Works"); Verzögerung (250);
Lassen Sie das Arduino nach dem Hochladen über USB angeschlossen und öffnen Sie den seriellen Monitor (Oben rechts> Serienmonitor). Sie sollten die Wörter sehen Es klappt erscheint jedes Mal, wenn Sie die Taste drücken.
Wenn nichts passiert, überprüfen Sie Ihre Schaltung.
OLED-Setup
Sie müssen zwei Bibliotheken installieren, um die Anzeige zu steuern. Laden Sie die Bibliotheken Adafruit_SSD1306 und Adafruit-GFX [nicht mehr verfügbar] von Github herunter und speichern Sie sie in Ihrem Bibliotheksordner. Wenn Sie nicht sicher sind, wo sich Ihre Bibliotheksordner befinden, lesen Sie mein Retro-Gaming-Tutorial. Arduino Retro Gaming mit einem OLED-Display Arduino Retro Gaming mit einem OLED-Display Haben Sie sich schon immer gefragt, wie viel Arbeit Sie benötigen, um Ihre eigenen Retro-Spiele zu schreiben? Wie einfach ist es, dass Pong für den Arduino kodiert? Lesen Sie weiter, wo ich dieselbe Anzeige detaillierter konfiguriere.
Starten Sie Ihre Arduino IDE neu und laden Sie eine Testskizze aus der hoch Datei> Beispiele Speisekarte. Wählen Adafruit SSD1306 und dann ssd1306_128x64_i2c. Laden Sie diesen Code hoch (es dauert eine Weile), und Sie sollten viele Formen und Muster auf dem Display sehen:
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 des Konfiguration 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 alles tun, um mit dem Build fortzufahren.
Der Fall
Wenn Sie dies auf einem Steckbrett bauen oder nicht einpacken möchten, können Sie diesen Schritt überspringen.
Ich habe diese Box entworfen und in 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 an.
Sie können diese Box leicht aus Holz oder durch den Kauf einer Projektbox aus Kunststoff herstellen.
Der Deckel ist ein einfaches Push-Fit-Design und enthält einige Ausschnitte für die Hardware:
Der Code
Nun, da alles fertig ist, ist es Zeit für den Code. So funktioniert es in Pseudocode:
Wenn die Taste gedrückt wird, generieren Sie eine Zufallszahl, wenn die Zufallszahl 20 ist, zeigen Sie die Grafik an
Damit dies einwandfrei funktioniert, muss eine Zufallszahl generiert werden - dies ist die Würfelrolle. Arduino hat einen Zufallszahlengenerator aufgerufen zufällig, sollte es aber nicht benutzen. Während es für einfache zufällige Aufgaben gut genug ist, ist es für einen elektronischen Würfel einfach nicht zufällig genug. Die Gründe dafür sind etwas kompliziert, aber Sie können mehr darüber 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 holen Sie sich einfach den fertigen Code von GitHub):
#umfassen #umfassen #umfassen #umfassen #umfassen Adafruit_SSD1306-Anzeige (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // Einrichten des OLED pinMode (buttonPin, INPUT); // Setup-Schaltfläche void loop ()
Dieser Code konfiguriert die OLED und enthält alle Bibliotheken, die Sie zur Kommunikation damit benötigen, sowie Ihre neue Zufallszahlenbibliothek. Fügen Sie dies der Hauptschleife hinzu:
if (digitalRead (buttonPin) == HIGH) delay (15); if (digitalRead (buttonPin) == HIGH) display.fillScreen (BLACK); // die gesamte Anzeige löschen display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // Zufallszahl drucken display.display (); // schreibe auf Displayverzögerung (100);
Das ist im Moment ziemlich einfach, aber es ist eine funktionierende D20. Bei jedem Tastendruck wird eine Zufallszahl zwischen 1 und 20 auf dem Bildschirm angezeigt:
Das funktioniert gut, ist aber etwas langweilig. Lass es uns besser machen. Erstellen Sie zwei neue Methoden, drawDie und eraseDie:
void drawDie () display.drawRect (32, 0, 64, 64, WEISS);
Diese zeichnen einen Würfel in der Mitte des Bildschirms. Sie möchten dies vielleicht komplizierter machen, indem Sie beispielsweise eine D20 oder eine D12 usw. zeichnen. Es ist jedoch einfacher, einen sechsseitigen Grundwürfel zu zeichnen. Hier ist die grundlegende Verwendung:
drawDie ();
Ändern Sie als Nächstes 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:
Das einzige Problem ist mit Zahlen größer als neun:
Die Lösung dafür ist einfach. Bei Zahlen unter 10 wird der Cursor an einer anderen Position als die Zahlen ab 10 eingestellt. Diese Zeile ersetzen:
display.setCursor (57, 21);
Mit diesem:
int roll = TrueRandom.random (1, 21); // speichere die Zufallszahl if (roll < 10) // single character number display.setCursor(57, 21); else // dual character number display.setCursor(47, 21);
So sieht das jetzt aus:
Alles, was jetzt noch übrig ist, ist für die Bilder, wenn Sie einen kritischen Treffer oder einen Fehlschlag werfen. Es gibt ein paar Schritte, aber es ist einfach genug.
Suchen Sie nach einem geeigneten Bild, das Sie verwenden möchten (je einfacher, desto besser ist die Anzeige nur einfarbig). Hier sind die Bilder, die ich verwendet habe:
Jedes Bild, das Sie verwenden möchten, muss in ein HEX-Array konvertiert werden. Dies ist eine Darstellung des Bildes in Code-Form. Dafür stehen viele Tools zur Verfügung, und einige sind speziell für OLED-Displays geschrieben. Der einfachste Weg ist die Verwendung des Online-Tools PicturetoC_Hex. Hier sind die Einstellungen erforderlich:
Laden Sie Ihr Bild hoch und setzen Sie das Code-Format auf HEX: 0x. einstellen Benutzt für zu Schwarz / Weiß für alle Bildfunktionen. Übernehmen Sie alle anderen Optionen als Standard. Sie können das Bild hier anpassen, wenn Sie möchten. Drücken Sie Holen Sie sich C-String und Sie sollten die Bilddaten sehen:
Sie benötigen diese generierten Daten in einer Minute. Erstellen Sie zwei aufgerufene Funktionen drawExplosion und drawSkull (oder einen geeigneten Namen für Ihre Version). Hier ist der Code:
void drawExplosion () // Bild im EEPROM speichern statische Konstante unsigniertes Zeichen 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,0x00,0xfx, 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, 0xf0,0x07,0xff, 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, 0xff, 0xe0,0x1f, 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, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x01,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x0f, 0xff, 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,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,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,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,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,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0, 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,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,0x00,0x0f, 0xff, 0xff, 0xff, 0x00, 0x00,0x00,0x07,0xff, 0xff, 0xff, 0xff, 0xf0,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x01,0xbf, 0xff, 0xff, 0xff, 0x30,0x00,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,0x00; display.drawBitmap (0, 0, imExp, 64, 62, 1); // draw mushroom cloud void drawSkull () // Image im EEPROM speichern 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,0xe0,0x00,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,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, 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 0x0,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,0x0,0x0,0xe0,0e0xe0 0x36,0x00,0x00,0x00,0x01,0xff, 0xe0,0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0xc4,0x7f, 0xf0,0x00,0x00,0x00,0x0,0x03,0xff, 0xcc, 0x7f, 0xf0 0x00,0x00,0x00,0x03,0xff, 0xcc, 0x7f, 0xf0,0x00,0x00,0x03,0xff, 0x9e, 0x7f, 0xf0,0x00,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,0x01,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,0x00,0x64 0x00,0x1b, 0x00,0x00,0x00,0x00,0x00,0x73,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0x55,0x4f, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0x14 , 0x1,0x00,0x00,0x00,0x00,0x00,0x1f, 0xe0,0xfe, 0x00,0x00,0x00,0x00,0x00,0x0f, 0xff, 0xfc, 0x00,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,0x00,0x00; display.drawBitmap (0, 0, imSku, 60, 64, 1); // Schädelwolke zeichnen
Wenn Sie die von mir verwendeten Bilder verwenden möchten, kopieren Sie den Code. Wenn Sie Ihre eigenen, zuvor erstellten Bilder verwenden möchten, kopieren Sie den Bytecode in das imSku und imExp Arrays nach Bedarf.
So sehen diese Bilder auf dem Display aus:
Der wichtigste Teil dieses Codes ist diese Zeile:
statisches const unsigned char PROGMEM imSku []
Dadurch wird dem Arduino mitgeteilt, dass er Ihre Bilder im EEPROM speichern soll (Was ist EEPROM? So verwenden Sie Arduino EEPROM zum Speichern von Daten zwischen Stromkreisläufen Verwenden von Arduino EEPROM zum Speichern von Daten zwischen Stromkreisläufen Wussten Sie, dass der Arduino Daten speichern kann, wenn er ausgeschaltet ist Ich spreche vom EEPROM, also mache ich mit, wenn ich Ihnen zeige, wie man es liest und schreibt. Lesen Sie mehr) anstelle des RAMs (Kurzanleitung zu RAM. A Kurzanleitung zu RAM: Was Sie wissen müssen A Kurzanleitung zu RAM: Was Sie wissen müssen RAM ist ein entscheidender Bestandteil jedes Computers, aber wenn Sie kein Tech-Guru sind, kann es verwirrend sein, wenn Sie es nicht verstehen. begriffen. Lesen Sie mehr). Der Grund dafür ist einfach; Der Arduino verfügt über einen begrenzten RAM-Speicher. Wenn Sie den gesamten Speicherplatz zum Speichern von Bildern verwenden, bleibt möglicherweise kein Code für die Ausführung Ihres Codes übrig
Ändern Sie Ihre Hauptansicht ob Anweisung, diese neuen Grafiken anzuzeigen, wenn eine Eins oder 20 gewürfelt wird. Beachten Sie die Codezeilen, um die neben den Bildern gerollte Zahl 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:
Das ist alles für die Codeseite (hol dir den Code von GitHub, wenn du das alles übersprungen hast). Sie können dies leicht zu einem D12, D8 usw. ändern.
Endmontage
Nun, da alles andere fertig ist, ist es Zeit, alles einzupacken. Befestigen Sie das Display an und achten Sie darauf, die Schrauben nicht zu fest anzuziehen. Dies ist möglicherweise der schwierigste Teil. Ich habe dabei ein Display geknackt, daher möchten Sie vielleicht einige Plastikscheiben verwenden. Ich schneide ein paar Quadrate aus Plasticard heraus:
Die kleinen Muttern und Bolzen können schwierig zu verbinden sein. Spitze: Verwenden Sie ein kleines Stück Blu-Tack am Ende eines Schraubendrehers, um die Muttern zunächst einzusetzen:
Schrauben Sie den Knopf auf, schließen Sie die Batterie an und schließen Sie den Deckel. Achten Sie darauf, dass Sie keine Drähte einklemmen oder sie zu fest zusammenfassen, was zu einem Kurzschluss führen kann. Abhängig von der Länge Ihrer nachlaufenden Kabel müssen Sie freiliegende Verbindungen möglicherweise mit etwas Isolierung schützen (eine serielle Box funktioniert gut):
So sieht es innen aus:
Und hier ist das fertige Produkt:
Sie sollten jetzt stolzer Besitzer einer elektronischen D20 sein!
Welche Modifikationen haben Sie vorgenommen? Hast du die Bilder geändert? Lassen Sie uns in den Kommentaren wissen, wir würden gerne sehen, was Sie getan haben!
Erfahren Sie mehr über: Arduino, Brettspiel, Elektronik.