Rueda con estilo con este DIY Electronic D20 Die

Rueda con estilo con este DIY Electronic D20 Die / Bricolaje

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

No se preocupe si nunca ha usado un Arduino antes, tenemos una guía de inicio Cómo comenzar con Arduino: una guía para principiantes Cómo 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 y facilidad para utilizar hardware y software. Está dirigido a artistas, diseñadores, aficionados y cualquier persona interesada en crear objetos o entornos interactivos. Lee mas .

Plan de construcción

Este es un proyecto simple. Un Arduino conducirá una pantalla OLED, y un botón tirará el dado. Los gráficos personalizados se mostrarán para golpes críticos o fallos críticos. Puede modificar fácilmente el código para que sea un D8, D10 o D12.

Que necesitas

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

Esas son las partes principales que necesitas para construir tu propio D20. Es posible que desee instalarlo en un estuche (que se describe a continuación) y soldar el circuito en un estado más permanente. Aquí están las partes adicionales que necesitarás para hacer eso:

  • 4 x M2 x 10 mm (0,4 pulgadas) tornillos
  • 4 x M2 tuercas
  • 4 arandelas de 7 mm (0,28 pulgadas)
  • Batería de 9V a presión (o alternativa adecuada)
  • Tubos termorretráctiles surtidos

Estas pantallas OLED son muy interesantes. 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úrate de obtener un I2C modelo en lugar de SPI.

Casi cualquier Arduino será adecuado. He elegido un Nano, ya que son lo suficientemente pequeños como para caber en el caso. Consulte nuestra guía de compras Guía de compras de Arduino: ¿Qué tabla debería obtener? Guía de compra de Arduino: ¿Qué tabla debería obtener? Hay tantos tipos diferentes de tableros de Arduino por ahí que se te perdonará por estar confundido. ¿Qué debes comprar para tu proyecto? Déjanos ayudarte, con esta guía de compras de Arduino! Lea más para obtener más información sobre los modelos Arduino.

El circuito

Aquí está el circuito que necesitas:

Conectar VCC y GND en la pantalla OLED al Arduino +5V y suelo. Conectar analógico 4 en el Arduino al pin etiquetado ASD. Conectar analógico 5 al SCL alfiler. Estos pines contienen los circuitos necesarios para conducir la pantalla utilizando el bus I2C. Los pines exactos variarán según el modelo, pero se utilizan A4 y A5 en el Nano y Uno. Consulte la documentación de la biblioteca de Wire para su modelo si no está utilizando Uno o Nano.

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

Conecte el botón a pin digital 2. Observe cómo el 10k? La resistencia está conectada a tierra. ¡Esto es muy importante! Esto se conoce como resistencia desplegable, y evita que Arduino detecte datos falsos o interferencias al presionar un botón. También sirve para proteger el tablero. Si no se usara esta resistencia, + 5V iría directamente al suelo. Esto se conoce como cortocircuito Y es una manera fácil de matar a un Arduino..

Si está soldando este circuito, proteja sus conexiones con un tubo termorretráctil:

Asegúrese de no calentar demasiado, y solo hágalo una vez que esté seguro de que el circuito funciona. También puede querer torcer sus cables en pares. Esto los mantiene ordenados y ayuda a protegerlos contra el estrés excesivo:

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 en el Herramientas> Tablero y Herramientas> Puerto menús):

const int buttonPin = 2; // el número del botón pin void setup () pinMode (buttonPin, INPUT); // botón de configuración Serial.begin (9600); // configuración serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print ("It Works"); retraso (250); 

Una vez cargado, mantenga el Arduino conectado a través de USB y abra el monitor serie (Arriba a la derecha> Monitor de serie). Deberias ver las palabras Funciona Aparece cada vez que presionas el botón..

Si no pasa nada, ve y revisa tu circuito.

Configuración OLED

Es necesario instalar dos bibliotecas para controlar la pantalla. Descargue las bibliotecas Adafruit_SSD1306 y Adafruit-GFX [Ya no está disponible] desde Github, y guárdelas en la carpeta de su biblioteca. Si no estás seguro de dónde están las carpetas de la biblioteca, lee mi tutorial de juegos retro Arduino Juego retro con pantalla OLED Juego retro Arduino con pantalla OLED ¿Alguna vez te has preguntado cuánto trabajo cuesta escribir tus propios juegos retro? ¿Qué tan fácil es Pong codificar para el Arduino? Leer más, donde configuro esta misma pantalla con más detalle.

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

Si no pasa nada, revisa tus conexiones. Si, después de verificarlo, aún no funcionará, deberá modificar el código de muestra..

Cambia esta línea (al inicio de la preparar funció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 listo para continuar con la compilación.

El caso

Si está construyendo esto en una placa de pruebas, o no desea encajonarlo, puede omitir este paso..

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

Usted podría hacer esta caja fácilmente de madera, o comprando una caja de plástico para proyectos.

La tapa es un diseño simple de ajuste a presión, y contiene algunos recortes para el hardware:

El código

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

si se presiona el botón, generar un número aleatorio si el número aleatorio es 20 mostrar gráfico más si el número aleatorio es 1 mostrar gráfico más mostrar número

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 por las que son algo complicadas, pero puede leer más si está interesado en boallen.com.

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

Ahora cree un nuevo archivo y configure su código inicial (o simplemente tome el código terminado de GitHub):

#incluir  #incluir  #incluir  #incluir  #incluir  Pantalla Adafruit_SSD1306 (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // configura el modo de pin OLED (buttonPin, INPUT); // botón de configuración 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 agregue esto al bucle principal:

if (digitalRead (buttonPin) == HIGH) delay (15); if (digitalRead (buttonPin) == HIGH) display.fillScreen (BLACK); // borrar toda la pantalla display.setTextColor (BLANCO); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // imprimir número aleatorio display.display (); // escribir para mostrar el retraso (100); 

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

Esto funciona bien, pero es un poco aburrido. Vamos a hacerlo mejor. Crea dos nuevos métodos., dibujar y borrarDie:

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

Estos dibujarán un dado en el centro de la pantalla. Tal vez desee hacer esto más complicado, tal vez dibujando un D20, o un D12 y así sucesivamente, pero es más sencillo dibujar un dado básico de seis caras. Aquí está el uso básico:

drawDie ();

A continuación, modifique su bucle 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 (BLANCO); display.setCursor (57, 21);

Se ve mucho mejor ahora:

El único problema es con números más grandes que nueve:

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

display.setCursor (57, 21);

Con este:

int roll = TrueRandom.random (1, 21); // almacena el número aleatorio si < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Esto es lo que parece ahora:

Todo lo que queda ahora es para las imágenes cuando haces 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é:

Crédito de la imagen: publicdomainvectors.org

Cualquier imagen que desee utilizar deberá 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 sencilla es utilizar la herramienta en línea PicturetoC_Hex. Aquí están los ajustes necesarios:

Sube tu imagen y configura el formato de código para HEXO: 0x. Conjunto Usado para a Negro / blanco para todas las funciones de imagen de dibujo.. Deje todas las otras opciones como las predeterminadas. Puede cambiar el tamaño de la imagen aquí si lo necesita. prensa Obtener C String y deberías ver aparecer los datos de la imagen:

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

void drawExplosion () // almacenar imagen en EEPROM static static uns unseded 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,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,0x3,0x3f, 0xff, 0xff, 0xfb, 0x00,0x00,0x00xx , 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0,0x00,0x00,0x7f, 0xff, 0xff, 0xff, 0xff, 0x00,0x0xxx00,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80x00 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc0, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc, 0xc0, 0x 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf, 0xf0, 0xf0, 0xf, 0xf0, 0xf, 0xf0, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf, 0xf 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe, 0xff, 0xe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe , 0xff, 0xff, 0xe0,0x1f, 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, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff, 0xff, 0xff, 0xff, 0xff, 0xf0,0x03,0xff 0xff, 0xe0,0x01,0xff, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xf9,0xff, 0x00,0x00,0x7,0xff, 0xff, 0xf9,0xx 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,0x0,0 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,0x00,0x00,00 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,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,0x00,0x00, 0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xe0,0x00,0x00,0x00,0x00,0x00,0x0,000e0e 0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x0f, 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 0x00,0x00,0x07,0xff, 0xff, 0xff, 0xff, 0xf0,0x00,0x00,0x0f, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff 0x00,0x1f, 0xff, 0xff, 0xff, 0xff, 0xfx,0x00,0x01,0xbf, 0xff, 0xff, 0xff, 0x30,0x00,0x00,0x00,0x13,0xf7,0xx8 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00; display.drawBitmap (0, 0, imExp, 64, 62, 1); // dibujar nube de hongos void drawSkull () // almacenar imagen en EEPROM estática sin signo 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,0x00 , 0xfe, 0x00,0x07,0xfc, 0x00,0x00,0x00,0x01,0xfe, 0x00,0x07,0xfe, 0x00,0x3f, 0xc0,0x03,0xfe, 0x00,0x01,0xff, 0x81,0xff, 0xf0, 0x0,0xxx , 0x00,0x00,0x3f, 0xc7,0xff, 0xff, 0x1f, 0xc0,0x00,0x00,0x0f, 0xcf, 0xff, 0xff, 0xdf, 0x00,0x00,0x00,0x07,0xbf, 0xff, 0xff, 0xe, 0xee, 0xee, 0xee, 0xe, 0xee, 0xee, 0xee , 0x00,0x01,0x7f, 0xff, 0xff, 0xf0,0x00,0x00,0x00,0x00,0xff, 0xff, 0xff, 0xf8,0x00,0x00,0x00,0x01,0xff, 0xff, 0xf8,0x00,0x00,0x00 , 0x03,0xff, 0xff, 0xff, 0xfc, 0x00,0x00,0x00,0x07,0xff, 0xff, 0xff, 0xfe, 0x00,0x00,0x00,0x0x0x, 0xff, 0xff, 0xff, 0xff, 0x00,0x00,0x0x0x0 , 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, 0x80,0x00,0x00,0x,0x1x, 0xff, 0xff, 0xff, 0x80,0x00xxxxxx , 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 , 0x80,0x0f, 0x00,0x00,0x00,0x0d, 0x00,0x30,0xc0,0x1f, 0x00,0x00,0x00,0x05,0x80,0x70,0xc0,0x1e, 0x00,0x00,0x00,0xf0,0xf0,0xe0xxx0e0 , 0x36,0x00,0x00,0x00,0x01,0xff, 0xe0,0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0xc4,0x7f, 0xf0,0x00,0x00,0x00,0x3,0xff, 0xcc, 0xf0,0x00,0x00,0x0,003.0x3,0xff , 0x00,0x00,0x00,0x03,0xff, 0xcc, 0x7f, 0xf0,0x00,0x00,0x00,0x03,0xff, 0x9e, 0x7f, 0xf0,0xx,0x00,0x00,0x00,0xff, 0xfe, 0x7f, 0xf0,0x00xx,0x00,0x00,0x00,0x00,0xff, 0xfe, 0x7f, 0xf0,0xx,0x00,0x00,0x00,0xff, 0xfe, 0x7f, 0x7xxxxxxxxxxxxxxxxxxxxx, 0xfe, 0x7f , 0x00,0x00,0x00,0x01,0xff, 0xf8,0x1c, 0x00,0x00,0x00,0x03,0xe0,0x3f, 0x01,0xbf, 0x00,0x00,0x00,0x07,0xa6,0x40,0x0x40xxf , 0x00,0x1f, 0x27,0x5a, 0x39,0x9f, 0xf8,0x00,0x01,0xff, 0x27,0xdb, 0x39,0x0f, 0x39,0x07,0xx, 0x00,0xx, 0x00,0x7x, 0x00,0x00,00 , 0xfc, 0x10,0x1a, 0x02,0x03,0xf8,0x00,0x03,0xf8,0x10,0x00,0x02,0x01,0xf0,0x00,0x01,0x00xx8 , 0x10,0x00,0x02,0x00,0xe0,0x00,0x00,0x70,0x30,0x02,0x00,0x00,0x00,0x00,0x30,0x20,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x64 , 0x00,0x1b, 0x00,0x00,0x00,0x00,0x00,0x73,0x55,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, 0xf, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0,0 , 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); // dibujar calavera

Si desea utilizar las imágenes que he usado, continúe y copie el código. Si desea utilizar sus propias imágenes que generó anteriormente, copie el código de byte en el imSku y imExp matrices según sea necesario.

Así es como se ven esas imágenes en la pantalla:

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

static const unsigned char PROGMEM imSku []

Esto le dice a 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 únase a mí mientras le muestro cómo leer y escribir en él. Leer más) en lugar de su RAM (guía rápida de RAM Una guía rápida y sucia de RAM: lo que necesita saber A Guía rápida y sucia de 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ú de la tecnología. En esta publicación, lo desglosamos de manera fácil. comprender los términos. Leer más). La razón de esto es simple; el Arduino tiene RAM limitada, y su uso para almacenar imágenes puede no dejar ningún resto para que su código se ejecute

Modifica tu principal Si Declaración 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 enrollado 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 aquí está el aspecto de esos nuevos rollos:

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

Montaje final

Ahora que todo lo demás está terminado, es hora de encajonarlo todo. Atornille la pantalla, asegurándose de no apretar demasiado los pernos. Esta es posiblemente la parte más difícil. Al abrir una pantalla, se puede usar algunas arandelas de plástico. Corté algunos cuadrados de Plasticard:

Las pequeñas tuercas y tornillos pueden ser difíciles de conectar. Propina: Use un pedazo pequeño de Blu-Tack en el extremo de un destornillador para asentar inicialmente las tuercas:

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

Esto es lo que parece dentro:

Y aquí está el producto terminado:

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.!

Explorar más sobre: ​​Arduino, Juego de mesa, Electrónica.