Rol in stijl met deze DIY elektronische D20-spuitmond

Rol in stijl met deze DIY elektronische D20-spuitmond / DIY

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

  • 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 je een krijgt I2C model in plaats van SPI.

Bijna elke Arduino zal geschikt zijn. Ik heb gekozen voor een Nano, omdat ze 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:

Aansluiten VCC en GND op het OLED-scherm naar de Arduino +5V en grond. Aansluiten analoog 4 op de Arduino naar de pin gemarkeerd SDA. Aansluiten analoog 5 naar 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.

Verbind de knop met 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 a doodkort en is een eenvoudige manier om een ​​Arduino te doden.

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

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:

Knoptest

Nu u het circuit hebt gebouwd, uploadt u deze testcode (zorg ervoor dat u het juiste bord en de juiste poort selecteert in de Hulpmiddelen> Bord en Hulpmiddelen> Poort menu's):

const int buttonPin = 2; // het nummer van de knop-pin-leegte-instelling () pinMode (buttonPin, INPUT); // setup-knop Serial.begin (9600); // setup serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("It Works"); vertraging (250); 

Na het uploaden houdt u de Arduino aangesloten via USB en opent u de seriële monitor (Rechtsboven> Seriële monitor). Je zou de woorden moeten zien Het werkt verschijnen elke keer dat u op de knop drukt.

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

OLED-installatie

U moet twee bibliotheken installeren om het display te besturen. Download de bibliotheken Adafruit_SSD1306 en Adafruit-GFX [niet langer beschikbaar] 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 van de Bestand> Voorbeelden menu. kiezen Adafruit SSD1306 en dan ssd1306_128x64_i2c. Upload deze code (het zal een tijdje duren), en je zou veel vormen en patronen op het scherm moeten zien:

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

Verander deze regel (aan het begin van de opstelling 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.

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 zou deze kist gemakkelijk van hout kunnen maken, of door een plastic projectkist te kopen.

Het deksel is een eenvoudig ontwerp met push-fit en bevat enkele uitsparingen voor de hardware:

De code

Nu alles gereed is, is het tijd voor de code. Hier is hoe het werkt in Pseudocode:

als op de knop wordt gedrukt, genereer een willekeurig nummer als het willekeurige nummer 20 is, laat de afbeelding anders zien als het willekeurige nummer 1 showgrafiek anders toonnummer is

Om dit goed te laten werken, moet een willekeurig getal worden gegenereerd - dit is de worp van de dobbelsteen. Arduino heeft een willekeurige nummer generator willekeurig, 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); // stel de OLED pinMode in (buttonPin, INPUT); // setup-knop 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); // wis het volledige 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:

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 (wit); display.setCursor (57, 21);

Het ziet er nu veel beter uit:

Het enige probleem is met getallen groter dan negen:

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); Bewaar het willekeurige nummer als (rol < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Dit is hoe dat er nu uitziet:

Het enige dat nu overblijft, is voor de afbeeldingen wanneer u 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:

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:

Upload uw afbeelding en stel het codeformaat in HEX: 0x. set Gebruikt voor naar Zwart / wit 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 Koop C String en je zou de afbeeldingsgegevens moeten zien verschijnen:

U zult deze gegenereerde gegevens in een minuut nodig hebben. Maak twee functies genaamd 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); // trek mushroom cloud void drawSkull () // winkelafbeelding 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); // trek de schedelwolk aan

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 in de imSku en IMEXP arrays zoals vereist.

Dit is hoe deze afbeeldingen eruit zien op het display:

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. Arduino EEPROM gebruiken 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 (quick guide to RAM A Quick & Dirty Guide to RAM: What You Need to Know 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 eenvoudig te 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

Pas je hoofd aan als verklaring 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:

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:

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:

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

Hier is hoe het er van binnen uitziet:

En hier is het eindproduct:

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!

Ontdek meer over: Arduino, Bordspel, Elektronica.