Rouler dans le style avec cette Die électronique DIY D20

Vous voulez quelque chose d'un peu unique lors de votre prochaine rencontre de jeu? Découvrez ce D20 électronique DIY, avec des graphismes personnalisés pour les coups critiques et les échecs.

Vous voulez quelque chose d'un peu unique lors de votre prochaine rencontre de jeu?  Découvrez ce D20 électronique DIY, avec des graphismes personnalisés pour les coups critiques et les échecs.
Publicité

Vous voulez quelque chose d'un peu unique pour votre prochain jeu de rôle sur table? Que diriez-vous d'un D20 électronique avec des graphiques personnalisés pour les coups critiques et les échecs? Aujourd'hui, je vais vous montrer comment construire votre propre avec un Arduino et quelques parties simples.

Ne vous inquiétez pas si vous n'avez jamais utilisé d'Arduino auparavant, nous avons un guide de démarrage. Premiers pas avec Arduino: Guide du débutant Premiers pas avec Arduino: Guide du débutant Arduino est une plate-forme de prototypage électronique open source basée sur utiliser du matériel et des logiciels. Il est destiné aux artistes, designers, amateurs et toute personne intéressée par la création d'objets ou d'environnements interactifs. Lire la suite .

Construire un plan

C'est un projet simple. Un Arduino pilotera un affichage OLED, et un bouton lancera le dé. Des graphiques personnalisés s'afficheront pour les coups critiques ou les jets critiques. Vous pouvez facilement modifier le code pour qu'il soit D8, D10 ou D12.

De quoi as-tu besoin

arduino_d20_what_you_need

  • 1 x Arduino
  • 1 écran OLED I2C de 1 x 0.96 "
  • 1 x bouton poussoir
  • 1 x 10k? Résistance
  • 1 x planche à pain
  • Fils de raccordement assortis
  • Code complet ici, si vous ne voulez pas suivre tout le chemin à travers les instructions écrites.

Ce sont les pièces de base dont vous avez besoin pour construire votre propre D20. Vous pouvez souhaiter l'installer dans un cas (discuté ci-dessous) et souder le circuit dans un état plus permanent. Voici les pièces supplémentaires dont vous aurez besoin pour cela:

  • 4 x boulons de M2 ​​x 10mm (0.4 pouce)
  • 4 x écrous M2
  • Rondelles de 4 x 7 mm (0, 28 pouce)
  • Pile de batterie 9V (ou alternative appropriée)
  • Gaine thermorétractable assortie

Ces écrans OLED sont très cool. Ils peuvent généralement être achetés en blanc, bleu, jaune ou un mélange des trois. J'en ai acheté un en bleu, pour correspondre à mon cas. Assurez-vous d'avoir un modèle I2C au lieu de SPI .

Presque n'importe quel Arduino conviendra. J'ai choisi un Nano, car ils sont assez petits pour tenir dans l'affaire. Consultez notre guide d'achat Arduino Guide d'achat: Quel conseil devriez-vous obtenir? Guide d'achat Arduino: Quel conseil devriez-vous obtenir? Il y a tellement de différents types de cartes Arduino là-bas, vous seriez pardonné d'être confus. Lequel devriez-vous acheter pour votre projet? Laissez-nous vous aider, avec ce guide d'achat Arduino! Lire la suite pour plus d'informations sur les modèles Arduino.

Le circuit

Voici le circuit dont vous avez besoin:

arduino d20 circuit

Connectez VCC et GND sur l'écran OLED à l'Arduino + 5V et à la masse . Connectez l' analogique 4 sur l'Arduino à la broche étiquetée SDA . Connectez l' analogique 5 à la broche SCL . Ces broches contiennent les circuits nécessaires pour piloter l'affichage à l'aide du bus I2C. Les broches exactes varient selon le modèle, mais A4 et A5 sont utilisés sur les modèles Nano et Uno. Vérifiez la documentation de la bibliothèque de fils pour votre modèle si vous n'utilisez pas Uno ou Nano.

Connectez la batterie à la masse et la broche VIN . Cela signifie tension d'entrée, et accepte une variété de tensions DC différentes - mais vérifiez d'abord votre modèle spécifique, et il peut parfois varier légèrement.

Connectez le bouton à la broche numérique 2 . Remarquez comment le 10k? la résistance est connectée à la masse. C'est très important! Ceci est connu comme une résistance de pull-down, et il empêche l'Arduino de détecter des données parasites ou des interférences en appuyant sur un bouton. Il sert également à protéger le conseil. Si cette résistance n'était pas utilisée, + 5V irait directement dans le sol. Ceci est connu comme un mort court et est un moyen facile de tuer un Arduino.

Si vous soudez ce circuit, protégez vos connexions avec un tube thermorétractable:

arduino d20 heatshrink

Assurez-vous de ne pas trop chauffer, et faites-le seulement une fois que vous êtes sûr que le circuit fonctionne. Vous pouvez également souhaiter torsader vos câbles en paires. Cela les garde propres et les aide à se protéger des contraintes inutiles:

arduino d20 câbles torsadés

Test de bouton

Maintenant que vous avez construit le circuit, téléchargez ce code de test (assurez-vous de sélectionner la carte et le port corrects dans les menus Outils> Carte et Outils> Port ):

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

Une fois téléchargé, gardez l'Arduino connecté via USB et ouvrez le moniteur série (en haut à droite> Serial Monitor ). Vous devriez voir apparaître les mots It Works chaque fois que vous appuyez sur le bouton.

Si rien ne se passe, allez vérifier votre circuit.

Configuration OLED

arduino oled test

Vous devez installer deux bibliothèques pour piloter l'affichage. Téléchargez les bibliothèques Adafruit_SSD1306 et Adafruit-GFX de Github et enregistrez-les dans votre dossier de bibliothèque. Si vous ne savez pas où sont les dossiers de bibliothèque, lisez mon tutoriel de jeu rétro Arduino Retro Gaming avec un écran OLED Arduino Retro Gaming avec un écran OLED Vous êtes-vous déjà demandé combien de temps il vous fallait pour écrire vos propres jeux rétro? À quel point Pong est-il facile à coder pour l'Arduino? Lire la suite, où je configure ce même affichage plus en détail.

Redémarrez votre IDE Arduino et téléchargez une esquisse de test à partir du menu Fichier> Exemples . Sélectionnez Adafruit SSD1306 puis ssd1306_128x64_i2c . Téléchargez ce code (cela prendra du temps), et vous devriez voir beaucoup de formes et de motifs sur l'écran:

arduino oled test

Si rien ne se passe, vérifiez vos connexions. Si, après vérification, cela ne fonctionne toujours pas, vous devrez modifier l'exemple de code.

Changez cette ligne (au début de la fonction d' installation ):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

Pour ça:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Cela indique à la bibliothèque des détails spécifiques sur l'affichage que vous utilisez. Vous devriez maintenant être tout ensemble à continuer avec la construction.

L'affaire

Si vous construisez cela sur une planche à pain, ou si vous ne souhaitez pas la mettre en boîte, vous pouvez ignorer cette étape.

arduino d20 cas

J'ai conçu et imprimé en 3D cette boîte. Obtenez les fichiers sur Thingiverse. Ne vous inquiétez pas si vous n'avez pas d'imprimante 3D - les services en ligne 3D Hubs et Shapeways fournissent des services d'impression en ligne.

Vous pouvez facilement faire cette boîte en bois, ou en achetant une boîte de projet en plastique.

Le couvercle est un simple design push-fit, et contient quelques découpes pour le matériel:

arduino d20 cas

Le code

Maintenant que tout est prêt, il est temps pour le code. Voici comment cela fonctionnera dans 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 

Pour que cela fonctionne correctement, un nombre aléatoire doit être généré - c'est le résultat du dé. Arduino a un générateur de nombres aléatoires appelé random, mais ne devrait pas l'utiliser. Bien qu'il soit assez bon pour les tâches aléatoires de base, ce n'est pas assez aléatoire pour un dé électronique. Les raisons sont un peu compliquées, mais vous pouvez en lire plus si vous êtes intéressé par boallen.com.

Téléchargez la bibliothèque TrueRandom de sirleech sur Github. Ajoutez ceci au dossier de votre bibliothèque et redémarrez l'IDE.

Maintenant, créez un nouveau fichier et configurez votre code initial (ou récupérez simplement le code de 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() { } 

Ce code configure l'OLED et inclut toutes les bibliothèques dont vous avez besoin pour communiquer avec votre nouvelle bibliothèque de nombres aléatoires. Maintenant, ajoutez ceci à la boucle principale:

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

C'est assez basique à la minute, mais c'est un D20 qui fonctionne. Chaque fois que le bouton est pressé, un nombre aléatoire entre un et 20 est affiché sur l'écran:

arduino d20 premier code

Cela fonctionne bien, mais c'est un peu ennuyeux. Faisons-le mieux. Créez deux nouvelles méthodes, drawDie et eraseDie :

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

Ceux-ci vont dessiner un dé au milieu de l'écran. Vous pouvez rendre ceci plus compliqué, peut-être en dessinant un D20, ou un D12 et ainsi de suite, mais c'est plus simple de dessiner un dé à six faces de base. Voici l'utilisation de base:

 drawDie(); 

Ensuite, modifiez votre boucle principale pour dessiner le nombre aléatoire, seulement plus grand et au milieu. Changez la taille du texte et le curseur à ceci:

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

Ça a l'air beaucoup mieux maintenant:

arduino d20 caractère unique

Le seul problème est avec des nombres plus grands que neuf:

arduino d20 double caractère

Le correctif pour cela est simple. Tous les nombres inférieurs à 10 verront le curseur sur une position différente de ces nombres 10 ou plus. Remplacer cette ligne:

 display.setCursor(57, 21); 

Avec ça:

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

Voici à quoi cela ressemble maintenant:

arduino d20 double caractère fixe

Tout ce qui reste est maintenant pour les images lorsque vous obtenez un coup ou un coup critique. Il y a quelques étapes à suivre, mais c'est un processus assez simple.

Trouvez une image appropriée que vous voulez utiliser (le plus simple sera le mieux car l'affichage est une seule couleur). Voici les images que j'ai utilisées:

arduino d20 oeuvre
Crédit d'image: publicdomainvectors.org

Toute image que vous souhaitez utiliser devra être convertie en une matrice HEX. Ceci est une représentation de l'image sous forme de code. Il existe de nombreux outils disponibles pour ce faire, et certains sont écrits spécifiquement pour les écrans OLED. Le plus simple est d'utiliser l'outil en ligne PicturetoC_Hex. Voici les paramètres nécessaires:

Arduino image à hex

Téléchargez votre image et définissez le format de code sur HEX: 0x . Régler Utilisé pour Noir / Blanc pour toutes les fonctions d'image . Laissez toutes les autres options comme valeurs par défaut. Vous pouvez redimensionner l'image ici si vous en avez besoin. Appuyez sur Get C String et vous devriez voir les données de l'image apparaissent:

arduino d20 données d'image

Vous aurez besoin de ces données générées dans une minute. Créez deux fonctions appelées drawExplosion et drawSkull (ou un nom approprié pour votre version). Voici le 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 } 

Si vous souhaitez utiliser les images que j'ai utilisées, alors copiez le code. Si vous souhaitez utiliser vos propres images générées plus tôt, copiez le code d'octet dans les tableaux imSku et imExp, si nécessaire.

Voici à quoi ressemblent ces images sur l'écran:

Arduino oled images

La partie la plus importante de ce code est cette ligne:

 static const unsigned char PROGMEM imSku[] 

Cela indique à l'Arduino de stocker vos images dans l'EEPROM (ce qui est EEPROM?) Comment utiliser EEPROM Arduino pour sauvegarder les données entre les cycles de puissance Comment utiliser EEPROM Arduino pour sauvegarder les données entre les cycles de puissance Saviez-vous que l'Arduino peut stocker des données quand il est éteint? "Je parle de l'EEPROM, alors rejoignez-moi comme je vous montre comment lire et écrire." Lire la suite) au lieu de sa RAM (Guide rapide de RAM Un guide rapide et sale de RAM: Ce que vous devez savoir A Guide de la RAM rapide et sale: ce que vous devez savoir La RAM est un composant crucial de chaque ordinateur, mais il peut être difficile de comprendre si vous n'êtes pas un gourou de la technologie. saisir les termes.Lire la suite). La raison en est simple. l'Arduino a une RAM limitée, et l'utiliser pour stocker des images peut ne pas laisser de place à l'exécution de votre code

Modifiez votre instruction if principale pour montrer ces nouveaux graphiques quand un ou 20 est lancé. Notez les lignes de code pour montrer le nombre roulé à côté des images:

 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 } 

Et voici à quoi ressemblent ces nouveaux rouleaux:

arduino d20 images critiques

C'est tout pour le code (allez chercher le code de GitHub si vous avez ignoré tout ça). Vous pourriez facilement modifier ceci pour être un D12, D8, et ainsi de suite.

L'assemblage final

Maintenant que tout est fini, il est temps de tout emballer. Boulonnez l'écran en veillant à ne pas trop serrer les boulons. C'est peut-être la partie la plus difficile. J'ai fait une fissure sur un écran, alors vous pouvez utiliser des rondelles en plastique. J'ai coupé quelques carrés de Plasticard:

Espaceurs Arduino D20

Les petits écrous et boulons peuvent être difficiles à connecter. Astuce: Utilisez un petit morceau de Blu-Tack à l'extrémité d'un tournevis pour fixer les écrous:

Écrou Arduino D20

Visser le bouton, connecter la batterie et fermer le couvercle. Veillez à ne pas coincer les fils ou à les attacher trop étroitement, ce qui pourrait provoquer un court-circuit. Selon la longueur de vos fils de fuite, vous devrez peut-être protéger les connexions exposées avec une certaine isolation (une boîte de série fonctionne bien):

Arduino D20 Carton intérieur

Voici à quoi cela ressemble à l'intérieur:

Arduino D20 Inside

Et voici le produit fini:

Arduino D20 Crâne

Vous devriez maintenant être le fier propriétaire d'un D20 électronique!

Quelles modifications avez-vous faites? Avez-vous changé les images? Faites-nous savoir dans les commentaires, nous aimerions voir ce que vous avez fait!

In this article