Rollo de estilo con este DIY Electronic D20 Die

¿Desea algo un poco único en su próxima reunión de juegos? Echa un vistazo a este D20 electrónico DIY, que presenta gráficos personalizados para éxitos y errores críticos.

¿Desea algo un poco único en su próxima reunión de juegos?  Echa un vistazo a este D20 electrónico DIY, que presenta gráficos personalizados para éxitos y errores críticos.
Anuncio

¿Desea algo un poco único para su próximo juego de rol de mesa? ¿Qué tal un D20 electrónico con gráficos personalizados para hits críticos y errores? Hoy te mostraré cómo construir el tuyo con un Arduino y algunas partes simples.

No se preocupe si nunca antes ha usado un Arduino, tenemos una guía de introducción. Comenzar con Arduino: una guía para principiantes Comenzar con Arduino: una guía para principiantes Arduino es una plataforma de creación de prototipos de electrónica de código abierto basada en flexibilidad, facilidad usar hardware y software. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas .

Plan de compilación

Este es un proyecto simple. Un Arduino controlará una pantalla OLED y un botón lanzará el dado. Se mostrarán gráficos personalizados para hits críticos o miss críticos. Puede modificar fácilmente el código para que sea un D8, D10 o D12.

Que necesitas

arduino_d20_what_you_need

  • 1 x Arduino
  • Pantalla OLED I2C de 1 x 0.96 "
  • 1 x botón pulsador
  • 1 x 10k? Resistor
  • 1 x Tablero
  • Surtido de cables de conexión
  • El código completo aquí, si no desea seguir todo el camino a través de las instrucciones escritas.

Esas son las partes principales que necesita para construir su propio D20. Es posible que desee instalarlo en una caja (que se explica a continuación) y soldar el circuito en un estado más permanente. Estas son las partes adicionales que necesitará para hacer eso:

  • 4 x pernos de M2 ​​x 10 mm (0, 4 pulgadas)
  • 4 x tuercas M2
  • Arandelas de 4 x 7 mm (0.28 pulgadas)
  • Batería de 9V a presión (o alternativa adecuada)
  • Tubo termocontraíble clasificado

Estas pantallas OLED son geniales. Por lo general, se pueden comprar en blanco, azul, amarillo o una mezcla de los tres. He comprado uno en azul, para que coincida con mi caso. Asegúrese de obtener un modelo I2C en lugar de SPI .

Casi cualquier Arduino será adecuado. He elegido un Nano, ya que son lo suficientemente pequeños como para caber en la caja. Consulte nuestra guía de compras Guía de compra de Arduino: ¿Qué placa debería obtener? Guía de compra de Arduino: ¿Qué placa debería obtener? Hay tantos tipos diferentes de tableros Arduino que hay, se te perdonaría por estar confundido. ¿Qué debería comprar para su proyecto? ¡Permítanos ayudarlo con esta guía de compra de Arduino! Lea más para obtener más información sobre los modelos Arduino.

El circuito

Este es el circuito que necesitas:

circuito arduino d20

Conecte VCC y GND en la pantalla OLED a Arduino + 5V y tierra . Conecte el análogo 4 en el Arduino al pin etiquetado SDA . Conecte el análogo 5 al pin SCL . Estos pines contienen los circuitos necesarios para controlar la pantalla con el bus I2C. Los pines exactos variarán según el modelo, pero A4 y A5 se usan en Nano y Uno. Consulte la documentación de la biblioteca Wire para su modelo si no está usando uno o Nano.

Conecte la batería a tierra y el pin VIN . Esto significa voltaje y acepta una variedad de voltajes de CC diferentes, pero primero verifique su modelo específico y, a veces, puede variar levemente.

Conecte el botón al pin digital 2 . Observe cómo el 10k? la resistencia está conectada a tierra ¡Esto es muy importante! Esto se conoce como resistencia de extracción, e impide que el Arduino detecte datos espurios o interferencias como la pulsación de un botón. También sirve para proteger el tablero. Si esta resistencia no se usara, + 5V iría directamente a tierra. Esto se conoce como un corto muerto y es una manera fácil de matar a un Arduino.

Si está soldando este circuito, proteja sus conexiones con tubos termorretráctiles:

arduino d20 heatshrink

Asegúrate de no calentar demasiado, y solo hazlo una vez que estés seguro de que el circuito funciona. También es posible que desee torcer sus cables en pares. Esto los mantiene limpios y ayuda a protegerlos del estrés indebido:

arduino d20 cables trenzados

Prueba de botón

Ahora que ha construido el circuito, cargue este código de prueba (asegúrese de seleccionar la placa y el puerto correctos desde Herramientas> Tablero y Herramientas> Menús de puerto ):

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

Una vez cargado, mantenga el Arduino conectado a través de USB y abra el monitor serie ( Superior derecha> Monitor serie ). Debería ver que las palabras It Works aparecen cada vez que presiona el botón.

Si no ocurre nada, ve y revisa tu circuito.

Configuración OLED

prueba de arduino oled

Necesita instalar dos bibliotecas para conducir la pantalla. Descargue las bibliotecas Adafruit_SSD1306 y Adafruit-GFX de Github y guárdelas en la carpeta de su biblioteca. Si no está seguro de dónde están las carpetas de la biblioteca, vaya a leer mi tutorial de juegos retro Arduino Retro Gaming con pantalla OLED Arduino Retro Gaming con pantalla OLED ¿Alguna vez se ha preguntado cuánto trabajo se necesita para escribir sus propios juegos retro? ¿Qué tan fácil es Pong para codificar el Arduino? Lea más, donde configuro esta misma pantalla con más detalle.

Reinicie su Arduino IDE y cargue un boceto de prueba desde el menú Archivo> Ejemplos . Seleccione Adafruit SSD1306 y luego ssd1306_128x64_i2c . Cargue este código (llevará un tiempo), y debería ver muchas formas y patrones en la pantalla:

prueba de arduino oled

Si no ocurre nada, comprueba dos veces tus conexiones. Si, después de verificar, aún no funciona, deberá modificar el código de muestra.

Cambia esta línea (al comienzo de la función de configuración ):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

A esto:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Esto le dice a la biblioteca detalles específicos sobre la pantalla que está usando. Ahora debería estar todo listo para continuar con la compilación.

El caso

Si está construyendo esto en una placa de prueba, o no desea guardarlo en una caja, entonces puede saltear este paso.

caso arduino d20

Diseñé e imprimí esta caja en 3D. Obtenga los archivos de Thingiverse. No se preocupe si no tiene una impresora 3D: los servicios en línea 3D Hubs y Shapeways brindan servicios de impresión en línea.

Puede hacer fácilmente esta caja de madera o comprar una caja de plástico para proyectos.

La tapa tiene un diseño simple de ajuste y contiene algunos recortes para el hardware:

caso arduino d20

El código

Ahora que todo está listo, es hora de que el código. Así es como funcionará en Pseudocódigo:

 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 

Para que esto funcione correctamente, se debe generar un número aleatorio: esta es la tirada del dado. Arduino tiene un generador de números aleatorios llamado aleatorio, pero no debería usarlo. Si bien es lo suficientemente bueno para tareas aleatorias básicas, no es lo suficientemente aleatorio para un dado electrónico. Las razones son un tanto complicadas, pero puedes leer más si estás interesado en boallen.com.

Descargue la biblioteca TrueRandom por sirleech en Github. Agregue esto a su carpeta de biblioteca y reinicie el IDE.

Ahora crea un nuevo archivo y configura tu código inicial (o simplemente toma el código final 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() { } 

Este código configura el OLED e incluye todas las bibliotecas que necesita para comunicarse con él, junto con su nueva biblioteca de números aleatorios. Ahora agrega esto al ciclo principal:

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

Esto es bastante básico por el momento, pero es un D20 que funciona. Cada vez que se presiona el botón, se muestra un número aleatorio entre uno y 20 en la pantalla:

arduino d20 primer código

Esto funciona bien, pero es un poco aburrido. Hagámoslo mejor. Crea dos nuevos métodos, drawDie y eraseDie :

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

Estos dibujarán un dado en el medio de la pantalla. Es posible que desee complicarlo más, tal vez dibujando un D20, un D12, etc., pero es más simple dibujar un dado básico de seis lados. Aquí está el uso básico:

 drawDie(); 

A continuación, modifique su ciclo principal para dibujar el número aleatorio, solo que más grande y en el medio. Cambia el tamaño del texto y el cursor a esto:

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

Se ve mucho mejor ahora:

arduino d20 solo personaje

El único problema es con números mayores que nueve:

personaje doble arduino d20

La solución para esto es simple. Cualquier número menor que 10 tendrá el cursor establecido en una posición diferente a la de los números 10 o mayores. Reemplace esta línea:

 display.setCursor(57, 21); 

Con este:

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

Esto es lo que parece ahora:

arduino d20 fijo carácter dual

Todo lo que queda ahora es para las imágenes cuando lanza un golpe crítico o falla. Hay algunos pasos involucrados, pero es un proceso bastante simple.

Encuentre una imagen adecuada que desee usar (cuanto más simple mejor, ya que la pantalla es de un solo color). Aquí están las imágenes que utilicé:

ilustraciones de arduino d20
Crédito de la imagen: publicdomainvectors.org

Cualquier imagen que desee utilizar tendrá que convertirse en una matriz HEX. Esta es una representación de la imagen en forma de código. Hay muchas herramientas disponibles para hacer esto, y algunas están escritas específicamente para pantallas OLED. La forma más fácil es usar la herramienta en línea PicturetoC_Hex. Aquí están las configuraciones necesarias:

imagen arduino a hex

Suba su imagen y establezca el formato de código en HEX: 0x . Set Usado para Black / White para todas las funciones de dibujar imágenes . Deje todas las demás opciones como predeterminadas. Puedes cambiar el tamaño de la imagen aquí si es necesario. Presione Get C String y debería ver aparecer los datos de la imagen:

Datos de imagen arduino d20

Necesitará estos datos generados en un minuto. Cree dos funciones llamadas drawExplosion y drawSkull (o un nombre adecuado para su versión). Aquí está el código:

 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 desea usar las imágenes que he usado, siga adelante y copie el código. Si desea usar sus propias imágenes generadas anteriormente, copie el código de bytes en las matrices imSku e imExp según sea necesario.

Estas son las imágenes que se ven en la pantalla:

imágenes de Arduino Oled

La parte más importante de ese código es esta línea:

 static const unsigned char PROGMEM imSku[] 

Esto le dice al Arduino que almacene sus imágenes en la EEPROM (¿Qué es EEPROM? Cómo usar Arduino EEPROM para guardar datos entre ciclos de energía Cómo usar Arduino EEPROM para guardar datos entre ciclos de energía ¿Sabía que Arduino puede almacenar datos cuando está apagado? "Estoy hablando de la EEPROM, así que únete a mí mientras te enseño a leer y escribir". Leer más) en lugar de su RAM (guía rápida de RAM). Una guía rápida y sucia para la RAM: lo que necesitas saber A Guía rápida y sucia para la memoria RAM: lo que necesita saber La memoria RAM es un componente crucial de todas las computadoras, pero puede ser confuso comprender si usted no es un gurú tecnológico. En esta publicación, lo desglosamos en fácil: captar términos. Leer más). La razón de esto es simple; el Arduino tiene RAM limitada, y usarlo todo para almacenar imágenes puede no dejar nada para que su código se ejecute

Modifique su declaración if principal para mostrar estos nuevos gráficos cuando se lanza uno o 20. Tenga en cuenta las líneas de código para mostrar el número rodado junto con las imágenes también:

 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 } 

Y así es como se ven esos nuevos rollos:

Imágenes críticas de arduino d20

Eso es todo por el lado del código (ve a buscar el código de GitHub si te saltaste todo eso). Puede modificar esto fácilmente para que sea un D12, D8, etc.

Montaje final

Ahora que todo lo demás ha terminado, es hora de guardarlo todo. Atornille la pantalla, asegurándose de no apretar demasiado los pernos. Esta es posiblemente la parte más difícil. Rompí una pantalla al hacerlo, por lo que es posible que desee utilizar algunas arandelas de plástico. Corté algunos cuadrados de Plasticard:

Separadores Arduino D20

Los pequeños tornillos y tuercas pueden ser difíciles de conectar. Consejo: use una pequeña pieza de Blu-Tack en el extremo de un destornillador para asentar inicialmente las tuercas:

Tuerca Arduino D20

Enrosque el botón, conecte la batería y cierre la tapa. Tenga cuidado de no atrapar ningún cable, o arránquelos demasiado apretados, posiblemente causando un cortocircuito. Dependiendo de la longitud de sus cables de salida, es posible que deba proteger las conexiones expuestas con algo de aislamiento (una caja de serie funciona bien):

Arduino D20 dentro de cartón

Esto es lo que parece adentro:

Arduino D20 Inside

Y aquí está el producto terminado:

Cráneo Arduino D20

¡Ahora debería ser el orgulloso propietario de un D20 electrónico!

¿Qué modificaciones hiciste? ¿Cambiaste las imágenes? Háganos saber en los comentarios, ¡nos encantaría ver lo que hizo!

In this article