Rouler avec style avec cette puce électronique DIY D20

Rouler avec style avec cette puce électronique DIY D20 / DIY

Vous voulez quelque chose d'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 ratés? Aujourd'hui, je vais vous montrer comment construire le vôtre avec un Arduino et quelques éléments 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: Un guide du débutant Premiers pas avec Arduino: Un guide du débutant Arduino est une plate-forme de prototypage d’électronique à source ouverte basée sur utiliser du matériel et des logiciels. Il est destiné aux artistes, concepteurs, amateurs et à toute personne intéressée par la création d'objets ou d'environnements interactifs. Lire la suite .

Plan de construction

C'est un projet simple. Un Arduino pilotera un écran OLED et un bouton lancera le dé. Les graphiques personnalisés indiqueront les coups critiques ou les coups manqués critiques. Vous pouvez facilement modifier le code en D8, D10 ou D12..

De quoi as-tu besoin

  • 1 x Arduino
  • 1 écran OLED I2C 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 toutes les instructions écrites.

Ce sont les éléments essentiels dont vous avez besoin pour construire votre propre D20. Vous voudrez peut-être l'installer dans un boîtier (voir ci-dessous) et souder le circuit dans un état plus permanent. Voici les pièces supplémentaires dont vous aurez besoin pour faire cela:

  • 4 boulons M2 x 10mm (0.4 inch)
  • 4 x écrous M2
  • 4 rondelles de 7 mm (0,28 pouce)
  • Accrochage de la batterie 9V (ou alternative appropriée)
  • Assortiment de gaines thermorétractables

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'ai acheté un en bleu, pour correspondre à mon cas. Assurez-vous d'avoir un I2C modèle au lieu de SPI.

Presque n'importe quel Arduino conviendra. J'ai choisi un Nano, car ils sont assez petits pour tenir dans le boîtier. Consultez notre guide d'achat Guide d'achat Arduino: Quel conseil choisir? Guide d'achat Arduino: Quel conseil choisir? Il y a tellement de types de cartes Arduino que vous ne pouvez pas vous tromper Que devriez-vous acheter pour votre projet? Laissez-nous vous aider avec ce guide d'achat Arduino! Lisez Plus pour plus d'informations sur les modèles Arduino.

Le circuit

Voici le circuit dont vous avez besoin:

Relier VCC et GND sur l'écran OLED à l'Arduino +5V et sol. Relier analogique 4 sur le Arduino à la broche étiquetée SDA. Relier analogique 5 au SCL épingle. Ces broches contiennent les circuits nécessaires pour commander l’affichage à l’aide du bus I2C. Les broches exactes varieront selon le modèle, mais les formats A4 et A5 sont utilisés sur les modèles Nano et Uno. Consultez la documentation de la bibliothèque Wire de votre modèle si vous n’utilisez pas Uno ou Nano..

Connectez la batterie à la terre et le NIV épingle. Cela correspond à la tension, et accepte une variété de tensions CC différentes - mais vérifiez d'abord votre modèle spécifique et il peut parfois varier légèrement.

Connectez le bouton à broche numérique 2. Remarquez comment le 10k? la résistance est connectée à la terre. C'est très important! C'est ce qu'on appelle une résistance d'abaissement, et cela empêche l'Arduino de détecter des données parasites ou des interférences lors d'une pression sur un bouton. Cela sert aussi à protéger le tableau. Si cette résistance n'était pas utilisée, + 5V irait directement à la terre. 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 une gaine thermorétractable:

Assurez-vous de ne pas trop chauffer, et ne le faites que lorsque vous êtes certain que le circuit fonctionne. Vous pouvez également souhaiter tordre vos câbles en paires. Cela les garde en ordre et les protège du stress excessif:

Bouton test

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

const int buttonPin = 2; // le numéro de la broche du bouton void setup () pinMode (buttonPin, INPUT); // bouton d'installation Serial.begin (9600); // configuration de la série void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("It Works"); délai (250); 

Une fois téléchargé, gardez l’Arduino connecté via USB et ouvrez le moniteur série (En haut à droite> Moniteur série). Vous devriez voir les mots Ça marche apparaît chaque fois que vous appuyez sur le bouton.

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

Configuration OLED

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èques. Si vous ne savez pas exactement où sont vos dossiers de bibliothèque, consultez mon tutoriel sur le 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 travail il fallait pour écrire vos propres jeux rétro? Est-ce que Pong est 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 Fichier> Exemples menu. Sélectionner Adafruit SSD1306 et alors ssd1306_128x64_i2c. Téléchargez ce code (cela prendra un peu de temps), et vous devriez voir beaucoup de formes et de motifs sur l’affichage:

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

Changer cette ligne (au début de la installer une fonction):

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 prêt à continuer avec la construction.

L'affaire

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

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 - services en ligne Les Hubs et Shapeways 3D fournissent des services d'impression en ligne.

Vous pouvez facilement fabriquer cette boîte en bois ou en achetant une boîte en plastique pour projets.

Le couvercle est un design simple à enfiler et contient quelques découpes pour le matériel:

Le code

Maintenant que tout est prêt, il est temps de passer au code. Voici comment cela fonctionnera dans Pseudocode:

si le bouton est enfoncé, générer un nombre aléatoire si le nombre est égal à 20 Afficher le graphique sinon si le nombre aléatoire est 1 Afficher le graphique sinon Afficher le nombre

Pour que cela fonctionne correctement, un nombre aléatoire doit être généré - il s'agit du lancer du dé. Arduino a un générateur de nombre aléatoire appelé au hasard, mais ne devrait pas l'utiliser. Bien que cela soit suffisant pour des tâches aléatoires de base, ce n'est tout simplement pas assez aléatoire pour un dé électronique. Les raisons pour lesquelles sont un peu compliquées, mais vous pouvez en lire plus si vous êtes intéressé à boallen.com.

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

Créez maintenant un nouveau fichier et configurez votre code initial (ou récupérez simplement le code final dans GitHub):

#comprendre  #comprendre  #comprendre  #comprendre  #comprendre  Adafruit_SSD1306 affichage (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // configuration du mode pin OLED (buttonPin, INPUT); // bouton d'installation void loop () 

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

if (digitalRead (buttonPin) == HIGH) délai (15); if (digitalRead (buttonPin) == HIGH) display.fillScreen (BLACK); // efface tout l'affichage display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // affiche un nombre aléatoire display.display (); // écrire pour afficher le délai (100); 

C'est assez basique à la minute, mais c'est un D20 en état de marche. Chaque fois que vous appuyez sur le bouton, un nombre aléatoire compris entre 1 et 20 s'affiche à l'écran:

Cela fonctionne bien, mais c'est un peu ennuyeux. Faisons le mieux. Créer deux nouvelles méthodes, DrawDie et effacerdie:

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

Ceux-ci vont dessiner un dé au milieu de l'écran. Vous voudrez peut-être rendre cela plus compliqué, peut-être en dessinant un D20, un D12, etc., mais il est plus simple de dessiner un dé de base à six faces. Voici l'utilisation de base:

drawDie ();

Ensuite, modifiez votre boucle principale pour tracer le nombre aléatoire, uniquement le plus grand et le milieu. Changer la taille du texte et le curseur à ceci:

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

Ça a l'air beaucoup mieux maintenant:

Le seul problème concerne les nombres supérieurs à neuf:

La solution à ce problème est simple. Tous les nombres inférieurs à 10 auront le curseur réglé sur une position différente de celle des nombres 10 ou plus. Remplace cette ligne:

display.setCursor (57, 21);

Avec ça:

int roll = TrueRandom.random (1, 21); // stocke le nombre aléatoire if (roll < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Voici à quoi cela ressemble maintenant:

Il ne reste plus que les images lorsque vous obtenez un résultat critique ou manquant. Il y a quelques étapes à suivre, mais c'est un processus assez simple.

Trouvez l'image que vous souhaitez utiliser (plus il est simple, mieux c'est, car l'affichage est à une seule couleur). Voici les images que j'ai utilisées:

Crédit d'image: publicdomainvectors.org

Toute image que vous souhaitez utiliser devra être convertie en tableau HEX. C'est une représentation de l'image sous forme de code. Il existe de nombreux outils disponibles pour ce faire, et certains sont spécialement conçus pour les écrans OLED. Le moyen le plus simple consiste à utiliser l'outil en ligne PicturetoC_Hex. Voici les paramètres nécessaires:

Téléchargez votre image et définissez le format de code sur HEX: 0x. Ensemble Utilisé pour à Noir / Blanc pour toutes les fonctions de dessin de l'image. Laissez toutes les autres options comme valeurs par défaut. Vous pouvez redimensionner l'image ici si vous en avez besoin. presse Obtenir la chaîne C et vous devriez voir les données d'image apparaître:

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 () // image stockée dans EEPROM caractère statique non signée PROGMEM imExp [] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,00 , 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 , 0x00,0x00,0x78,0x7f, 0xff, 0xc0,0x00,0x00,0x00,0x00,0xfe, 0xff, 0xff, 0xf0,0x00,0x00,0x00,0x3f, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb , 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,0x00,0x00,0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xff, 0x80, 0xff, 0x80, 0x03, 0xff , 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x07,0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xff, 0xe0,0x07,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff , 0xff, 0xff, 0xe0,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0,0x01,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x0f, 0xff, 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,0x0f, 0xe0,0x00,0x00f, 0xe0,0x00,0x00,0x00, 0x00,0x00,0x00,0x0f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00f, 0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00f, 0xff, 0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7f, 0xfe, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f0f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0,0, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0,0,0x0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0,0 0x00,0x00,0x00,0x00,0x00,0x00,0x0,0,00,0f0,0x00,0x00,0x00,0x00,0x00,0x00,0x0,00f, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 0xf8,0x00, 0xf8,0x00, 0x00,0x00,0x00,0x00,0x00,0x0f, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x00xxf, 0xff, 0x00,0x00,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,0x00,0x07,0xff, 0xff, 0xff, 0xff, 0xf0,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x01,0xbf, 0xff, 0xff, 0xff, 0x30,000,00x00,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 nuage champignon void drawSkull () // image stockée dans char EEPROM statique const non signée char PROGMEM imSku [] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,00 , 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,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0 , 0x00,0x78,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0xfc, 0x00,0x07,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0xfc, 0x00,0x07,0x00,0xfc, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfc , 0xfe, 0x00,0x07,0xfc, 0x00,0x00,0x00,0x01,0xfe, 0x00,0x07,0xfe, 0x00,0x3f, 0xc0,0x03,0xfe, 0x00,0x01,0xff, 0x81,0xff, 0xfc, 0x0c, 0x0c , 0x00,0x00,0x3f, 0xc7,0xff, 0xff, 0x1f, 0xc0,0x00,0x00,0x0f, 0xcf, 0xff, 0xff, 0xdf, 0x00,0x00,0x07,0xbf, 0xff, 0xff, 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,0x00 , 0x03,0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x00,0x07,0xff, 0xff, 0xff, 0xfe, 0x00,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x00,0x0x0f , 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00 , 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x00xxf , 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80,0x00,0x00,0x1e, 0x3f, 0xff, 0x3f, 0xc7,0x80,0x00,0x00,0x00xxe, 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,0x0f, 0x00,0x0f , 0x80,0x0f, 0x00,0x00,0x00,0x0d, 0x00,0x30,0xc0,0x1f, 0x00,0x00,0x00,0x0,0x0,0x0,0x0,0xc0,0xc0,0x0f, 0x00,0x00,0x0,0x0f , 0x36,0x00,0x00,0x00,0x01,0xff, 0xe0,0x7f, 0xf0,0x00,0x00,0x00,0x0,0,0xff, 0xc4,0x7f, 0xf0,0x00,0x00,0x00,0x0,0,0xff, 0xcc, 0x7, 0xf0, , 0x00,0x00,0x00,0x03,0xff, 0xcc, 0x7f, 0xf0,0x00,0x00,0x00,0x00,0x0,0xff, 0x9e, 0x7f, 0xf0,000,00x00,0x00,0x00,0x00,0x00, 0xfe, 0x7f, 0x7f, 0xc0,0x00 , 0x00,0x00,0x00,0x01,0xff, 0xf8,0x1c, 0x00,0x00,0x00,0x03,0xe0,0x3f, 0x01,0xbf, 0x00,0x00,0x0,00,0a0,0a0,00,03e0,0x3f, 0x00,0x0f, 0x00,0x0f, 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,0x0,0,00,00,00,00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x78 , 0x10,0x00,0x0,0,000,00xe0,0x00,0x00,0x70,0x30,0x00,0x0,0,000,00x00,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,0x64 , 0x00,0x1b, 0x00,0x00,0x00,0x00,0x00,0x73,0x55,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0xf9,0x55,0x4f, 0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0x14 , 0x1f, 0x00,0x00,0x00,0x00,0x00,0x1f, 0xe0,0xfe, 0x00,0x00,0x00,0x00,0x00,0x0f0f, 0xff, 0xfc, 0x00,0x00,0x00,0x00,0x00,0x07,0x0f, 0xf0 , 0x00,0x00,0x00,0x00,0x00,0x03,0xff, 0xc0,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,00 , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; display.drawBitmap (0, 0, imSku, 60, 64, 1); // dessine un nuage de crâne

Si vous souhaitez utiliser les images que j'ai utilisées, alors copiez le code. Si vous souhaitez utiliser vos propres images que vous avez générées précédemment, copiez le code d'octet dans le répertoire. imSku et imExp tableaux au besoin.

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

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 la mémoire EEPROM (Qu'est-ce que la mémoire EEPROM? Comment utiliser la mémoire EEPROM d'Arduino pour enregistrer des données entre deux cycles d'alimentation? "Je parle de l'EEPROM, alors rejoignez-moi et je vous montrerai comment lire et écrire. Lisez-en plus" à la place de la RAM (guide rapide de la RAM). Guide rapide de la RAM: ce qu'il faut savoir. Quick & Dirty Guide to RAM: Ce que vous devez savoir La RAM est un composant essentiel de tout ordinateur, mais il peut être compliqué 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 mémoire RAM limitée, et utiliser tout cela pour stocker des images ne laissera aucun reste pour l’exécution de votre code

Modifier votre main si déclaration pour montrer ces nouveaux graphiques quand un ou 20 est roulé. 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:

C'est tout pour le code (allez chercher le code dans GitHub si vous avez sauté tout ça). Vous pouvez facilement le modifier pour qu'il s'agisse d'un D12, d'un D8, etc..

L'assemblage final

Maintenant que tout le reste 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 craqué un écran pour le faire, alors vous pouvez utiliser des rondelles en plastique. J'ai coupé des carrés dans Plasticard:

Les petits écrous et boulons peuvent être difficiles à connecter. Pointe: Utilisez un petit morceau de Blu-Tack au bout d'un tournevis pour placer d'abord les écrous:

Vissez le bouton, connectez la batterie et fermez le couvercle. Veillez à ne pas coincer les fils, ni à les regrouper de manière trop serrée, ce qui pourrait causer un court-circuit. En fonction de la longueur de vos câbles de fuite, vous devrez peut-être protéger les connexions exposées avec un isolant (un boîtier série fonctionne bien):

Voici à quoi ça ressemble à l'intérieur:

Et voici le produit fini:

Vous devriez maintenant être l'heureux propriétaire d'un D20 électronique!

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

Explorer plus sur: Arduino, Jeu de société, Electronique.