Role em estilo com este DIY eletrônico D20 Die

Quer algo um pouco original no seu próximo encontro de jogos? Confira este DIY D20 eletrônico, com gráficos personalizados para acertos e erros críticos.

Quer algo um pouco original no seu próximo encontro de jogos?  Confira este DIY D20 eletrônico, com gráficos personalizados para acertos e erros críticos.
Propaganda

Quer algo um pouco original para o seu próximo jogo de RPG de mesa? Como sobre um D20 eletrônico com gráficos personalizados para acertos e erros críticos? Hoje mostrarei como construir seu próprio com um Arduino e algumas partes simples.

Não se preocupe se você nunca usou um Arduino antes, temos um guia de primeiros passos Introdução ao Arduino: um Guia para Iniciantes Introdução ao Arduino: um Guia para Iniciantes Arduino é uma plataforma de prototipagem eletrônica de código aberto baseada em flexibilidade para usar hardware e software. É destinado a artistas, designers, amadores e qualquer pessoa interessada em criar objetos ou ambientes interativos. Consulte Mais informação .

Plano de construção

Este é um projeto simples. Um Arduino vai dirigir um display OLED, e um botão irá rolar o dado. Gráficos personalizados serão exibidos para acertos críticos ou faltas críticas. Você pode modificar facilmente o código para ser um D8, D10 ou D12.

O que você precisa

arduino_d20_what_you_need

  • 1 x arduino
  • 1 x 0, 96 ″ I2C display OLED
  • 1 x botão
  • 1 x 10k? Resistor
  • 1 x tábua de pão
  • Assorted ligar fios
  • Código completo aqui, se você não quiser seguir todo o caminho através das instruções escritas.

Essas são as partes principais que você precisa para construir seu próprio D20. Você pode querer instalá-lo em um caso (discutido abaixo) e soldar o circuito em um estado mais permanente. Aqui estão as partes adicionais que você precisará para fazer isso:

  • 4 x parafusos M2 x 10 mm (0, 4 polegadas)
  • 4 x porcas M2
  • Arruelas de 4 x 7 mm (0, 28 pol.)
  • Encaixe da bateria de 9V (ou alternativa adequada)
  • Tubulação termo-retrátil

Esses displays OLED são muito legais. Eles geralmente podem ser comprados em branco, azul, amarelo ou uma mistura dos três. Eu comprei um em azul, para combinar com o meu caso. Certifique-se de obter um modelo I2C em vez de SPI .

Quase qualquer Arduino será adequado. Eu escolhi um Nano, pois eles são pequenos o suficiente para caber no case. Confira nosso guia de compra Arduino Guia de compra: Qual placa você deve obter? Guia de compra do Arduino: Qual placa você deve obter? Existem tantos tipos diferentes de placas Arduino por aí, você seria perdoado por estar confuso. Qual você deve comprar para o seu projeto? Deixe-nos ajudar, com este guia de compra do Arduino! Leia mais para mais informações sobre modelos Arduino.

O circuito

Aqui está o circuito que você precisa:

circuito arduino d20

Conecte VCC e GND no display OLED ao Arduino + 5V e terra . Conecte o analógico 4 no Arduino ao pino rotulado SDA . Conecte o analógico 5 ao pino SCL . Esses pinos contêm o circuito necessário para acionar a exibição usando o barramento I2C. Os pinos exatos variam de acordo com o modelo, mas A4 e A5 são usados ​​no Nano e no Uno. Verifique a documentação da biblioteca Wire para o seu modelo, se você não estiver usando um Uno ou Nano.

Conecte a bateria ao terra e o pino VIN . Isso significa tensão, e aceita uma variedade de voltagens DC diferentes - mas verifique primeiro seu modelo específico e às vezes ele pode variar um pouco.

Ligue o botão ao pino digital 2 . Observe como o 10k? o resistor está conectado ao terra. Isto é muito importante! Isso é conhecido como resistor pull down e impede que o Arduino detecte dados espúrios ou interferência como pressionar um botão. Também serve para proteger a placa. Se esse resistor não fosse usado, + 5V iria direto para o chão. Isso é conhecido como um morto curto e é uma maneira fácil de matar um Arduino.

Se você estiver soldando este circuito, proteja suas conexões com tubos termo-retráteis:

arduino d20 heatshrink

Certifique-se de não aquecer muito, e só faça isso quando tiver certeza de que o circuito funciona. Você também pode querer torcer seus cabos em pares. Isso os mantém limpos e ajuda a protegê-los do estresse desnecessário:

arduino d20 cabos trançados

Teste de botão

Agora que você construiu o circuito, faça o upload deste código de teste (certifique-se de selecionar a placa e a porta corretas nos menus Ferramentas> Placa e Ferramentas> Porta ):

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

Uma vez carregado, mantenha o Arduino conectado via USB e abra o monitor serial ( Superior Direito> Monitor Serial ). Você deve ver as palavras Que Funciona aparecer toda vez que você pressionar o botão.

Se nada acontecer, vá e verifique seu circuito.

Instalação OLED

teste de arduino oled

Você precisa instalar duas bibliotecas para conduzir a exibição. Faça o download das bibliotecas Adafruit_SSD1306 e Adafruit-GFX do Github e salve-as na pasta da sua biblioteca. Se você não tem certeza de onde estão as pastas da biblioteca, vá ler meu tutorial de jogos retro Arduino Retro Gaming com um display OLED Arduino Retro Gaming com um display OLED Já imaginou quanto trabalho é necessário para escrever seus próprios jogos retrô? Quão fácil é Pong codificar para o Arduino? Leia mais, onde eu configuro essa mesma exibição em mais detalhes.

Reinicie seu Arduino IDE e faça upload de um esboço de teste no menu Arquivo> Exemplos . Selecione Adafruit SSD1306 e, em seguida, ssd1306_128x64_i2c . Carregue este código (vai demorar um pouco), e você deverá ver muitas formas e padrões no display:

teste de arduino oled

Se nada acontecer, verifique suas conexões. Se, após a verificação, ainda não funcionar, será necessário modificar o código de amostra.

Altere esta linha (no início da função de configuração ):

 display.begin(SSD1306_SWITCHCAPVCC, 0x3D); 

Para isso:

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 

Isso informa à biblioteca detalhes específicos sobre a exibição que você está usando. Agora você deve estar pronto para continuar com a compilação.

O caso

Se você está construindo isso em uma placa de montagem, ou não deseja encaixá-lo, então você pode pular este passo.

caso arduino d20

Eu projetei e imprimi em 3D esta caixa. Receba os arquivos no Thingiverse. Não se preocupe se você não tiver uma impressora 3D - os serviços online Hubs 3D e Shapeways fornecem serviços de impressão on-line.

Você poderia facilmente fazer esta caixa de madeira, ou comprando uma caixa de projeto de plástico.

A tampa é um projeto de encaixe simples e contém alguns recortes para o hardware:

caso arduino d20

O código

Agora que tudo está pronto, é hora do código. Veja como isso funcionará no 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 isso funcione corretamente, um número aleatório precisa ser gerado - esse é o lançamento do dado. O Arduino tem um gerador de números aleatórios chamado aleatório, mas não deve usá-lo. Embora seja bom o suficiente para tarefas aleatórias básicas, não é aleatório o suficiente para um dado eletrônico. As razões são um pouco complicadas, mas você pode ler mais se estiver interessado em boallen.com.

Faça o download da biblioteca TrueRandom por sirleech no Github. Adicione isso à sua pasta de biblioteca e reinicie o IDE.

Agora crie um novo arquivo e configure seu código inicial (ou simplesmente pegue o código finalizado no 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() { } 

Esse código configura o OLED e inclui todas as bibliotecas necessárias para se comunicar com ele, junto com sua nova biblioteca de números aleatórios. Agora adicione isso ao loop 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); } } 

Isso é bem básico no momento, mas é um D20 funcional. Sempre que o botão é pressionado, um número aleatório entre um e 20 é mostrado na tela:

arduino d20 primeiro código

Isso funciona bem, mas é um pouco chato. Vamos melhorar. Crie dois novos métodos, drawDie e eraseDie :

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

Estes irão desenhar um dado no meio da tela. Você pode querer tornar isso mais complicado, talvez desenhando um D20, ou um D12 e assim por diante, mas é mais simples desenhar um dado básico de seis lados. Aqui está o uso básico:

 drawDie(); 

Em seguida, modifique seu loop principal para desenhar o número aleatório, apenas maior e no meio. Altere o tamanho do texto e o cursor para isto:

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

Parece muito melhor agora:

arduino d20 único caractere

O único problema é com números maiores que nove:

personagem dual arduino d20

A correção para isso é simples. Qualquer número menor que 10 terá o cursor configurado para uma posição diferente dos números 10 ou maiores. Substitua esta linha:

 display.setCursor(57, 21); 

Com isso:

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

Aqui está o que parece agora:

arduino d20 fixo caráter duplo

Tudo o que resta agora é para as imagens quando você faz um acerto ou erro crítico. Existem alguns passos envolvidos, mas é um processo bastante simples.

Encontre uma imagem adequada que você deseja usar (quanto mais simples, melhor, pois a tela é apenas de cor única). Aqui estão as imagens que usei:

arte do arduino d20
Crédito de imagem: publicdomainvectors.org

Qualquer imagem que você deseja usar precisará ser convertida em uma matriz HEX. Esta é uma representação da imagem em forma de código. Existem muitas ferramentas disponíveis para fazer isso, e algumas são escritas especificamente para telas OLED. A maneira mais fácil é usar a ferramenta online PicturetoC_Hex. Aqui estão as configurações necessárias:

imagem arduino para hex

Envie sua imagem e defina o formato do código para HEX: 0x . Definir Usado para Preto / Branco para todas as funções de imagem de desenho . Deixe todas as outras opções como padrões. Você pode redimensionar a imagem aqui se precisar. Pressione Get C String e você verá os dados da imagem aparecerem:

arduino d20 image data

Você precisará desses dados gerados em um minuto. Crie duas funções chamadas drawExplosion e drawSkull (ou um nome adequado para sua versão). Aqui está o 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 } 

Se você deseja usar as imagens que eu usei, então vá em frente e copie o código. Se você quiser usar suas próprias imagens geradas anteriormente, copie o código de bytes nos arrays imSku e imExp, conforme necessário.

Veja como essas imagens se parecem no visor:

arduino oled imagens

A parte mais importante desse código é esta linha:

 static const unsigned char PROGMEM imSku[] 

Isso diz ao Arduino para armazenar suas imagens na EEPROM (o que é EEPROM? Como usar o Arduino EEPROM para salvar dados entre os ciclos de energia Você sabia que o Arduino pode armazenar dados quando está desligado? Estou falando sobre a EEPROM, então junte-se a mim enquanto mostro como ler e escrever para ela Leia mais) em vez de sua RAM (guia rápido para a RAM) Guia Rápido e Sujo para a RAM: o que você precisa saber Guia Rápido e Sujo para a RAM: O que você precisa saber A RAM é um componente crucial de qualquer computador, mas pode ser confuso entender se você não é um guru da tecnologia. compreender termos. Leia mais). A razão para isso é simples; o Arduino tem RAM limitada, e usar tudo isso para armazenar imagens não pode deixar nenhum restante para o seu código ser executado

Modifique sua instrução if principal para mostrar esses novos gráficos quando um ou 20 for lançado. Observe as linhas de código para mostrar o número rolado ao lado das imagens também:

 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 } 

E é assim que esses novos rolos se parecem:

imagens críticas de arduino d20

Isso é tudo para o lado do código (vá pegar o código do GitHub se você pulou tudo isso). Você poderia facilmente modificar isso para ser um D12, D8 e assim por diante.

Assembléia final

Agora que tudo está terminado, é hora de colocar tudo em caixa. Aparafuse a tela, certificando-se de não apertar demais os parafusos. Esta é possivelmente a parte mais difícil. Eu quebrei uma tela fazendo isso, então você pode querer usar algumas anilhas de plástico. Eu cortei alguns quadrados de Plasticard:

Espaçadores Arduino D20

As pequenas porcas e parafusos podem ser difíceis de conectar. Dica: Use um pequeno pedaço de Blu-Tack no final de uma chave de fenda para assentar inicialmente as porcas:

Porca Arduino D20

Aperte o botão, conecte a bateria e feche a tampa. Tenha cuidado para não prender nenhum fio ou enrolá-lo com muita força, possivelmente causando um curto. Dependendo do comprimento de seus terminais à direita, talvez seja necessário proteger as conexões expostas com algum isolamento (uma caixa serial funciona bem):

Arduino D20 dentro do cartão

Aqui está o que parece dentro:

Arduino D20 dentro

E aqui está o produto acabado:

Arduino D20 Crânio

Agora você deve ser o orgulhoso proprietário de um D20 eletrônico!

Quais modificações você fez? Você mudou as imagens? Deixe-nos saber nos comentários, nós gostaríamos de ver o que você fez!

In this article