Rol in stijl met deze DIY elektronische D20-spuitmond

Wilt u iets een beetje uniek bij uw volgende game-bijeenkomst? Bekijk deze DIY elektronische D20, met aangepaste afbeeldingen voor kritieke hits en missers.

Wilt u iets een beetje uniek bij uw volgende game-bijeenkomst?  Bekijk deze DIY elektronische D20, met aangepaste afbeeldingen voor kritieke hits en missers.
Advertentie

Wil je iets een beetje uniek voor je volgende rollenspel op tafelblad? Wat dacht je van een elektronische D20 met aangepaste afbeeldingen voor kritieke hits en missers? Vandaag laat ik je zien hoe je je eigen kunt bouwen met een Arduino en enkele eenvoudige onderdelen.

Maak je geen zorgen als je nog nooit een Arduino hebt gebruikt, we hebben een beknopte handleiding Aan de slag met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnershandleiding Arduino is een prototype-platform voor open-source elektronica op basis van flexibele, gebruiksvriendelijke om hardware en software te gebruiken. Het is bedoeld voor kunstenaars, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees verder .

Bouw plan

Dit is een eenvoudig project. Een Arduino stuurt een OLED-scherm en een knop rolt de dobbelsteen. Aangepaste grafische afbeeldingen worden weergegeven voor kritieke treffers of kritieke missers. U kunt de code eenvoudig wijzigen om een ​​D8, D10 of D12 te zijn.

Wat je nodig hebt

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 x 0, 96 "I2C OLED-scherm
  • 1 x drukknop
  • 1 x 10k? Weerstand
  • 1 x breadboard
  • Geassorteerde aansluitdraden
  • Volledige code hier, als u niet helemaal de schriftelijke instructies wilt volgen.

Dat zijn de belangrijkste onderdelen die u nodig hebt om uw eigen D20 te bouwen. Mogelijk wilt u het in een hoes installeren (hieronder besproken) en het circuit solderen in een meer permanente staat. Hier zijn de extra onderdelen die je daarvoor nodig hebt:

  • 4 x M2 x 10 mm (0, 4 inch) bouten
  • 4 x M2-moeren
  • 4 x 7 mm (0.28 inch) sluitringen
  • 9V batterijmoment (of geschikt alternatief)
  • Geassorteerde krimpkousen

Deze OLED-schermen zijn erg cool. Ze kunnen meestal worden gekocht in wit, blauw, geel of een mengsel van de drie. Ik heb er een in blauw gekocht, passend bij mijn zaak. Zorg ervoor dat u een I2C- model krijgt in plaats van SPI .

Bijna elke Arduino zal geschikt zijn. Ik heb een Nano gekozen, omdat deze klein genoeg zijn om in de behuizing te passen. Bekijk onze koopgids Arduino Koopwijzer: welk bord moet je kopen? Arduino Koopwijzer: welk bord moet je kopen? Er zijn zoveel verschillende soorten Arduino-boards, dat je zou worden vergeven dat je in de war was. Welke moet je kopen voor je project? Laat ons helpen, met deze Arduino koopgids! Lees meer voor meer informatie over Arduino-modellen.

Het circuit

Dit is het circuit dat je nodig hebt:

arduino d20 circuit

Verbind VCC en GND op het OLED-display met de Arduino + 5V en aarde . Sluit analoog 4 op de Arduino aan op de pin met het label SDA . Verbind analoog 5 met de SCL- pin. Deze pinnen bevatten de circuits die nodig zijn om het display te besturen met behulp van de I2C-bus. De exacte pinnen verschillen per model, maar A4 en A5 worden gebruikt op de Nano en Uno. Raadpleeg de documentatie bij de draadbibliotheek voor uw model als u geen Uno of Nano gebruikt.

Verbind de batterij met de aarde en de VIN- pin. Dit staat voor spanning in, en accepteert een verscheidenheid aan verschillende DC-spanningen - maar controleer eerst uw specifieke model en het kan soms enigszins variëren.

Sluit de knop aan op digitale pin 2 . Merk op hoe de 10k? weerstand is verbonden met aarde. Dit is erg belangrijk! Dit staat bekend als een pull-downweerstand en het voorkomt dat de Arduino valse gegevens of interferentie als een druk op de knop detecteert. Het dient ook om het bord te beschermen. Als deze weerstand niet werd gebruikt, zou + 5V rechtstreeks in de grond terechtkomen. Dit staat bekend als een doodlopende weg en is een eenvoudige manier om een ​​Arduino te doden.

Als u dit circuit soldeert, beveilig dan uw aansluitingen met krimpkousen:

arduino d20 heatshrink

Zorg ervoor dat je het niet te veel opwarmt, en doe dit alleen als je zeker weet dat het circuit werkt. U kunt ook uw kabels in paren verdraaien. Dit houdt ze netjes en helpt hen te beschermen tegen overmatige stress:

arduino d20 twisted cables

Knoptest

Nu dat je het circuit hebt gebouwd, upload deze testcode (zorg ervoor dat je het juiste bord en poort selecteert in het menu Hulpmiddelen> Bord en Extra> Poort ):

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

Na het uploaden houdt u de Arduino aangesloten via USB en opent u de seriële monitor ( rechtsboven> seriële monitor ). Elke keer dat u op de knop drukt, moet u de woorden Het Works zien verschijnen.

Als er niets gebeurt, ga dan en controleer je circuit nogmaals.

OLED-installatie

arduino oled-test

U moet twee bibliotheken installeren om het display te besturen. Download de Adafruit_SSD1306- en Adafruit-GFX-bibliotheken van Github en sla ze op in uw bibliotheekmap. Als je niet zeker weet waar je bibliotheekmappen zijn, lees dan mijn retro gaming handleiding Arduino Retro Gaming met een OLED-scherm Arduino Retro Gaming met een OLED-scherm Heb je je ooit afgevraagd hoeveel werk het kost om je eigen retro-games te schrijven? Hoe eenvoudig is Pong om te coderen voor de Arduino? Lees meer, waar ik ditzelfde scherm in meer detail configureer.

Start je Arduino IDE opnieuw en upload een testschets vanuit het menu Bestand> Voorbeelden . Selecteer Adafruit SSD1306 en vervolgens ssd1306_128x64_i2c . Upload deze code (het zal een tijdje duren), en je zou veel vormen en patronen op het scherm moeten zien:

arduino oled-test

Als er niets gebeurt, controleer dan uw verbindingen. Als het na controle nog steeds niet werkt, moet u de voorbeeldcode wijzigen.

Wijzig deze regel (aan het begin van de setup- functie):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

Hiernaar:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Dit vertelt de bibliotheek specifieke details over het display dat u gebruikt. Je zou nu helemaal klaar moeten zijn om verder te gaan met de build.

De zaak

Als u dit op een breadboard bouwt, of niet wilt inpakken, dan kunt u deze stap overslaan.

arduino d20-behuizing

Ik heb deze doos ontworpen en 3D geprint. Download de bestanden op Thingiverse. Maak je geen zorgen als je geen 3D-printer hebt - online services 3D Hubs en Shapeways bieden online afdrukservices.

Je kunt deze kist gemakkelijk van hout maken, of door een plastic projectdoos te kopen.

Het deksel heeft een eenvoudige push-fit ontwerp en bevat een paar uitsparingen voor de hardware:

arduino d20-behuizing

De code

Nu alles gereed is, is het tijd voor de code. Hier is hoe het werkt 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 

Om dit goed te laten werken, moet een willekeurig getal worden gegenereerd - dit is de worp van de dobbelsteen. Arduino heeft een random nummer generator genaamd random, maar zou het niet moeten gebruiken. Hoewel het goed genoeg is voor eenvoudige willekeurige taken, is het gewoon niet willekeurig genoeg voor een elektronische dobbelsteen. De redenen hiervoor zijn enigszins ingewikkeld, maar u kunt meer lezen als u geïnteresseerd bent in boallen.com.

Download de TrueRandom-bibliotheek van sirleech op Github. Voeg dit toe aan uw bibliotheekmap en start de IDE opnieuw.

Maak nu een nieuw bestand en stel je initiële code in (of pak gewoon de voltooide code van 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() { } 

Deze code configureert de OLED en bevat alle bibliotheken die u nodig hebt om ermee te communiceren, samen met uw nieuwe willekeurige nummerbibliotheek. Voeg dit nu toe aan de hoofdlus:

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

Dit is vrij basic op het moment, maar het is een werkende D20. Telkens wanneer op de knop wordt gedrukt, wordt een willekeurig getal tussen één en 20 op het scherm weergegeven:

arduino d20 eerste code

Dit werkt goed, maar het is een beetje saai. Laten we het beter maken. Maak twee nieuwe methoden, drawDie en eraseDie :

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

Deze tekenen een dobbelsteen in het midden van het scherm. Misschien wilt u dit ingewikkelder maken, bijvoorbeeld door een D20 of een D12 te tekenen enzovoort, maar het is eenvoudiger om een ​​eenvoudige zeszijdige dobbelsteen te tekenen. Dit is het basisgebruik:

 drawDie(); 

Wijzig vervolgens je hoofdlus om het willekeurige getal te tekenen, alleen groter en in het midden. Verander de tekstgrootte en de cursor naar dit:

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

Het ziet er nu veel beter uit:

arduino d20 single character

Het enige probleem is met getallen groter dan negen:

arduino d20 dual character

De oplossing hiervoor is eenvoudig. Bij elk getal kleiner dan 10 wordt de cursor op een andere positie gezet dan die van 10 of groter. Vervang deze regel:

 display.setCursor(57, 21); 

Hiermee:

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

Dit is hoe dat er nu uitziet:

arduino d20 fixed dual character

Het enige dat nu overblijft, is voor de afbeeldingen wanneer je een kritieke treffer of misser gooit. Er zijn een paar stappen bij betrokken, maar het is een eenvoudig genoeg proces.

Zoek een geschikte afbeelding die u wilt gebruiken (hoe eenvoudiger hoe beter, want het display is alleen in één kleur). Dit zijn de afbeeldingen die ik heb gebruikt:

arduino d20 kunstwerk
Beeldcredits: publicdomainvectors.org

Elke afbeelding die u wilt gebruiken, moet worden geconverteerd naar een HEX-array. Dit is een weergave van de afbeelding in codevorm. Er zijn veel tools beschikbaar om dit te doen, en sommige zijn specifiek geschreven voor OLED-schermen. De eenvoudigste manier is om de online tool PicturetoC_Hex te gebruiken. Hier zijn de instellingen die nodig zijn:

afbeelding van arduino naar hex

Upload uw afbeelding en stel het codeformaat in op HEX: 0x . Set Used for to Black / White voor alle draw-beeldfuncties . Laat alle andere opties staan ​​als de standaardwaarden. U kunt de grootte van de afbeelding hier wijzigen als dat nodig is. Druk op Get C String en u zou de afbeeldingsgegevens moeten zien verschijnen:

arduino d20 beeldgegevens

U zult deze gegenereerde gegevens in een minuut nodig hebben. Maak twee functies met de naam drawExplosion en drawSkull (of een geschikte naam voor uw versie). Hier is de 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 } 

Als je de afbeeldingen die ik heb gebruikt wilt gebruiken, ga je gang en kopieer je de code. Als u uw eigen afbeeldingen wilt gebruiken die u eerder hebt gegenereerd, kopieert u de bytecode naar wens in de imSku- en imExp- arrays.

Dit is hoe deze afbeeldingen eruit zien op het display:

arduino oled afbeeldingen

Het belangrijkste onderdeel van die code is deze regel:

 static const unsigned char PROGMEM imSku[] 

Dit vertelt de Arduino om uw afbeeldingen op te slaan in de EEPROM (wat is EEPROM?) Arduino EEPROM gebruiken om gegevens te bewaren tussen energiecycli Hoe gebruik Arduino EEPROM om gegevens te bewaren tussen energiecycli Wist u dat de Arduino gegevens kan opslaan wanneer deze is uitgeschakeld? ? Ik heb het over de EEPROM, dus ga met me mee als ik je laat zien hoe je het moet lezen en schrijven. Lees meer) in plaats van zijn RAM (snelle handleiding voor RAM Een snelle & vuile gids voor RAM: wat je moet weten A Snelle en vuile handleiding voor RAM: wat u moet weten RAM is een cruciaal onderdeel van elke computer, maar het kan verwarrend zijn om te begrijpen of u geen technische goeroe bent. In dit bericht splitsen we het op in gemakkelijk-naar- begrijptermen Lees meer). De reden hiervoor is eenvoudig; de Arduino heeft een beperkte hoeveelheid RAM, en als je alles opslaat om afbeeldingen op te slaan, resteren er mogelijk geen resterende bestanden om je code uit te voeren

Wijzig uw hoofd if- statement om deze nieuwe afbeeldingen weer te geven wanneer een rol of 20 wordt opgerold. Noteer de coderegels om het nummer naast de afbeeldingen weer te geven:

 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 } 

En hier is wat die nieuwe rollen eruit zien:

arduino d20 kritische beelden

Dat is alles voor de codekant (pak de code van GitHub als je dat allemaal overgeslagen hebt). Je zou dit gemakkelijk kunnen aanpassen om een ​​D12, D8, enzovoort te zijn.

Eindmontage

Nu al het andere is voltooid, is het tijd om alles op te sluiten. Schroef het display op, en zorg ervoor dat de bouten niet te vast worden aangedraaid. Dit is mogelijk het moeilijkste deel. Ik heb een display gekraakt waardoor ik dit gedaan heb, dus misschien wil je wat plastic ringen gebruiken. Ik heb enkele vierkanten uit Plasticard gesneden:

Arduino D20 afstandhouders

De kleine moeren en bouten kunnen lastig zijn om aan te sluiten. Tip: gebruik een klein stukje Blu-Tack aan het uiteinde van een schroevendraaier om de moeren eerst te plaatsen:

Arduino D20 moer

Schroef de knop op, sluit de batterij aan en sluit het deksel. Pas op dat u geen draden vastzet of bundel ze niet te strak, waardoor er mogelijk een kortsluiting ontstaat. Afhankelijk van de lengte van uw achterlopende kabels, moet u mogelijk de blootgestelde verbindingen met wat isolatie beschermen (een seriële box werkt goed):

Arduino D20 Inside Cardboard

Hier is hoe het er van binnen uitziet:

Arduino D20 Inside

En hier is het eindproduct:

Arduino D20 Skull

Je zou nu de trotse bezitter van een elektronische D20 moeten zijn!

Welke wijzigingen heb je aangebracht? Heb je de afbeeldingen veranderd? Laat het ons weten in de comments, we zouden graag zien wat je gedaan hebt!

In this article