Rzuć styl dzięki tej elektronicznej matrycy D20

  • Mark Lucas
  • 0
  • 1177
  • 136
Reklama

Chcesz czegoś wyjątkowego do następnej gry RPG? A może elektroniczny D20 z niestandardową grafiką do krytycznych trafień i chybień? Dzisiaj pokażę ci, jak zbudować własny z Arduino i kilkoma prostymi częściami.

Nie martw się, jeśli nigdy wcześniej nie korzystałeś z Arduino, mamy przewodnik dla początkujących Pierwsze kroki z Arduino: Przewodnik dla początkujących Pierwsze kroki z Arduino: Przewodnik dla początkujących Arduino to platforma prototypowania elektroniki typu open source oparta na elastycznej, łatwej używać sprzętu i oprogramowania. Jest przeznaczony dla artystów, projektantów, hobbystów i wszystkich zainteresowanych tworzeniem interaktywnych obiektów lub środowisk. .

Plan kompilacji

To prosty projekt. Arduino poprowadzi wyświetlacz OLED, a przycisk rzuci kostką. Niestandardowa grafika będzie wyświetlana dla trafień krytycznych lub trafień krytycznych. Możesz łatwo zmodyfikować kod na D8, D10 lub D12.

Czego potrzebujesz

  • 1 x Arduino
  • 1 x wyświetlacz OLED I2C 0,96 "
  • 1 x przycisk
  • 1 x 10k? Rezystor
  • 1 x deska do krojenia chleba
  • Różne przewody przyłączeniowe
  • Pełny kod tutaj, jeśli nie chcesz postępować zgodnie z instrukcjami na piśmie.

To są podstawowe elementy potrzebne do zbudowania własnego D20. Możesz zainstalować go w obudowie (omówionej poniżej) i przylutować obwód do bardziej trwałego stanu. Oto dodatkowe części, które musisz to zrobić:

  • 4 śruby M2 x 10 mm (0,4 cala)
  • 4 x nakrętki M2
  • Podkładki 4 x 7 mm (0,28 cala)
  • Zatrzask akumulatora 9 V (lub odpowiednia alternatywa)
  • Różne rurki termokurczliwe

Te wyświetlacze OLED są bardzo fajne. Zazwyczaj można je kupić w kolorze białym, niebieskim, żółtym lub mieszance tych trzech. Kupiłem jeden w kolorze niebieskim, pasującym do mojej skrzynki. Upewnij się, że dostaniesz I2C model zamiast SPI.

Prawie każde Arduino będzie odpowiednie. Wybrałem Nano, ponieważ są wystarczająco małe, aby zmieścić się w obudowie. Sprawdź nasz przewodnik zakupu Przewodnik zakupu Arduino: Którą deskę powinieneś dostać? Poradnik kupujący Arduino: Którą deskę powinieneś dostać? Jest tak wiele różnych rodzajów tablic Arduino, że wybaczono by ci, że jesteś zdezorientowany. Który powinieneś kupić dla swojego projektu? Pomóż nam, korzystając z tego przewodnika zakupów Arduino! aby uzyskać więcej informacji na temat modeli Arduino.

Obwód

Oto obwód, którego potrzebujesz:

Połączyć VCC i GND na wyświetlaczu OLED do Arduino +5 V. i ziemia. Połączyć analog 4 na Arduino do pinu oznaczonego SDA. Połączyć analog 5 do SCL kołek. Te piny zawierają obwody potrzebne do sterowania wyświetlaczem za pomocą magistrali I2C. Dokładne styki będą się różnić w zależności od modelu, ale A4 i A5 są używane w Nano i Uno. Sprawdź dokumentację biblioteki Wire dla swojego modelu, jeśli nie używasz Uno lub Nano.

Podłącz akumulator do uziemienia i VIN kołek. To oznacza napięcie wejściowe i przyjmuje różne napięcia DC - ale najpierw sprawdź konkretny model, a czasem może się nieznacznie różnić.

Podłącz przycisk do cyfrowy pin 2. Zauważ jak 10k? rezystor jest podłączony do uziemienia. To jest bardzo ważne! Jest to znane jako rezystor obniżający i zapobiega wykrywaniu przez Arduino fałszywych danych lub zakłóceń po naciśnięciu przycisku. Służy również do ochrony tablicy. Gdyby ten rezystor nie był użyty, + 5 V trafiłoby prosto w ziemię. Jest to znane jako bardzo krótko i jest łatwym sposobem na zabicie Arduino.

Jeśli lutujesz ten obwód, chroń swoje połączenia za pomocą rurki termokurczliwej:

Upewnij się, że nie nagrzewasz go zbyt mocno i rób to tylko wtedy, gdy masz pewność, że obwód działa. Możesz także skręcić kable w pary. Dzięki temu są schludne i chronią przed nadmiernym stresem:

Test przycisku

Po zbudowaniu obwodu prześlij ten kod testowy (upewnij się, że wybrałeś właściwą płytkę i port z Narzędzia> Płyta i Narzędzia> Port menu):

const int buttonPin = 2; // numer przycisku pin void setup () pinMode (buttonPin, INPUT); // przycisk konfiguracji Serial.begin (9600); // setup serial void loop () if (digitalRead (buttonPin) == HIGH) Serial.print („It Works”); opóźnienie (250); 

Po przesłaniu utrzymaj połączenie Arduino przez USB i otwórz monitor szeregowy (W prawym górnym rogu> Monitor szeregowy). Powinieneś zobaczyć słowa To działa pojawiają się za każdym naciśnięciem przycisku.

Jeśli nic się nie wydarzy, idź i sprawdź dwukrotnie obwód.

Konfiguracja OLED

Musisz zainstalować dwie biblioteki do obsługi wyświetlacza. Pobierz biblioteki Adafruit_SSD1306 i Adafruit-GFX [No Longer Available] z Github i zapisz je w folderze biblioteki. Jeśli nie masz pewności, gdzie znajdują się foldery z biblioteką, przeczytaj mój poradnik gier retro Arduino Retro Gaming z wyświetlaczem OLED Arduino Retro Gaming z wyświetlaczem OLED Zastanawiałeś się kiedyś, ile pracy zajmuje napisanie własnych gier retro? Jak łatwo kodować Pong dla Arduino? , gdzie bardziej szczegółowo konfiguruję ten sam wyświetlacz.

Uruchom ponownie Arduino IDE i prześlij szkic testowy z Plik> Przykłady menu. Wybierz Adafruit SSD1306 i wtedy ssd1306_128x64_i2c. Prześlij ten kod (zajmie to trochę czasu), a na ekranie powinieneś zobaczyć wiele kształtów i wzorów:

Jeśli nic się nie stanie, sprawdź dokładnie swoje połączenia. Jeśli po sprawdzeniu nadal nie będzie działać, musisz zmodyfikować przykładowy kod.

Zmień ten wiersz (na początku Ustawiać funkcjonować):

display.begin (SSD1306_SWITCHCAPVCC, 0x3D);

Do tego:

display.begin (SSD1306_SWITCHCAPVCC, 0x3C);

Informuje to bibliotekę o szczegółach dotyczących używanego wyświetlacza. Powinieneś teraz być ustawiony na kontynuowanie kompilacji.

Walizka

Jeśli budujesz to na desce do krojenia lub nie chcesz go zapakować, możesz pominąć ten krok.

Zaprojektowałem i wydrukowałem w 3D to pudełko. Pobierz pliki na Thingiverse. Nie martw się, jeśli nie masz drukarki 3D - usługi online 3D Hubs i Shapeways zapewniają usługi drukowania online.

Możesz łatwo zrobić to pudełko z drewna lub kupując plastikowe pudełko projektu.

Pokrywka ma prostą, dopasowaną konstrukcję i zawiera kilka wycięć na sprzęt:

Kod

Teraz, gdy wszystko jest gotowe, czas na kod. Oto jak to będzie działać w Pseudokodzie:

po naciśnięciu przycisku wygeneruj liczbę losową, jeśli liczba losowa wynosi 20, pokaż grafikę, jeśli inna liczba losowa to 1, pokaż grafikę, inaczej pokaż liczbę

Aby działało to poprawnie, należy wygenerować losową liczbę - jest to rzut kości. Arduino ma generator liczb losowych o nazwie losowy, ale nie powinien go używać. Chociaż jest wystarczający do wykonywania podstawowych zadań losowych, po prostu nie jest wystarczająco losowy, aby wykonać elektroniczną kostkę. Przyczyny są nieco skomplikowane, ale możesz to zrobić, jeśli jesteś zainteresowany boallen.com.

Pobierz bibliotekę TrueRandom od sirleech z Github. Dodaj to do folderu biblioteki i zrestartuj IDE.

Teraz utwórz nowy plik i skonfiguruj początkowy kod (lub po prostu pobierz gotowy kod z GitHub):

#include #include #include #include #include Adafruit_SSD1306 display (4); void setup () display.begin (SSD1306_SWITCHCAPVCC, 0x3C); // ustaw pinMode OLED (buttonPin, INPUT); // przycisk konfiguracji void loop () 

Ten kod konfiguruje OLED i zawiera wszystkie biblioteki, z którymi musisz się komunikować, wraz z nową biblioteką liczb losowych. Teraz dodaj to do głównej pętli:

if (digitalRead (buttonPin) == HIGH) opóźnienie (15); if (digitalRead (buttonPin) == HIGH) display.fillScreen (CZARNY); // usuń cały ekran display.setTextColor (WHITE); display.setTextSize (2); display.setCursor (0, 0); display.println (TrueRandom.random (1, 21)); // wydrukuj liczbę losową display.display (); // zapis do wyświetlenia opóźnienie (100); 

W tej chwili jest to dość proste, ale jest to działający D20. Po każdym naciśnięciu przycisku na ekranie wyświetlana jest losowa liczba od 1 do 20:

Działa to dobrze, ale jest trochę nudne. Zróbmy to lepiej. Utwórz dwie nowe metody, drawDie i eraseDie:

void drawDie () display.drawRect (32, 0, 64, 64, BIAŁY); 

Spowoduje to narysowanie kości na środku ekranu. Możesz to skomplikować, być może przez narysowanie D20 lub D12 itd., Ale łatwiej jest narysować podstawową sześciościenną kostkę. Oto podstawowe zastosowanie:

drawDie ();

Następnie zmodyfikuj główną pętlę, aby narysować losową liczbę, tylko większą i pośrodku. Zmień rozmiar tekstu i kursor na:

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

Wygląda teraz znacznie lepiej:

Jedyny problem dotyczy liczb większych niż dziewięć:

Rozwiązanie tego problemu jest proste. Wszelkie liczby mniejsze niż 10 będą miały kursor ustawiony w innej pozycji niż te liczby 10 lub większe. Zamień ten wiersz:

display.setCursor (57, 21);

Z tym:

int roll = TrueRandom.random (1, 21); // zapisz losową liczbę if (roll < 10)  // single character number display.setCursor(57, 21);  else  // dual character number display.setCursor(47, 21); 

Oto jak to wygląda teraz:

Pozostały tylko zdjęcia, gdy rzucisz trafienie krytyczne lub trafisz. W grę wchodzi kilka kroków, ale jest to dość prosty proces.

Znajdź odpowiedni obraz, którego chcesz użyć (im prościej, tym lepiej, ponieważ wyświetlacz jest tylko w jednym kolorze). Oto obrazy, których użyłem:

Źródło zdjęcia: publicdomainvectors.org

Każdy obraz, którego chcesz użyć, będzie musiał zostać przekonwertowany na tablicę HEX. Jest to przedstawienie obrazu w formie kodu. Dostępnych jest wiele narzędzi, a niektóre zostały napisane specjalnie dla wyświetlaczy OLED. Najłatwiejszym sposobem jest skorzystanie z narzędzia online PicturetoC_Hex. Oto potrzebne ustawienia:

Prześlij obraz i ustaw format kodu na HEX: 0x. Zestaw Używany do do Czarny / biały dla wszystkich funkcji rysowania obrazu. Pozostaw wszystkie pozostałe opcje jako domyślne. W razie potrzeby możesz zmienić rozmiar obrazu. naciśnij Uzyskaj C String i powinieneś zobaczyć dane obrazu:

Będziesz potrzebować tych wygenerowanych danych za minutę. Utwórz dwie funkcje o nazwie drawExplosion i drawSkull (lub odpowiednią nazwę dla twojej wersji). Oto kod:

void drawExplosion () // przechowuj obraz w EEPROM const const bez znaku 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, 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); // rysuj chmurę grzybową void drawSkull () // przechowuj obraz w pamięci EEPROM const const niepodpisany 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); // narysuj chmurę czaszki

Jeśli chcesz użyć obrazów, których użyłem, skopiuj kod. Jeśli chcesz użyć własnych obrazów wygenerowanych wcześniej, skopiuj kod bajtu do pliku imSku i imExp tablice zgodnie z wymaganiami.

Oto jak te obrazy wyglądają na wyświetlaczu:

Najważniejszą częścią tego kodu jest ten wiersz:

static const unsigned char PROGMEM imSku []

Mówi to Arduino, aby zapisywał twoje obrazy w pamięci EEPROM (co to jest EEPROM? Jak korzystać z Arduino EEPROM do zapisywania danych między cyklami zasilania Jak korzystać z Arduino EEPROM do zapisywania danych między cyklami zasilania Czy wiesz, że Arduino może przechowywać dane po wyłączeniu „Mówię o EEPROM, więc dołącz do mnie, ponieważ pokażę ci, jak czytać i pisać na nim.) Zamiast jego pamięci RAM (szybki przewodnik po pamięci RAM Szybki i brudny przewodnik po pamięci RAM: Co musisz wiedzieć szybko i Brudny przewodnik po pamięci RAM: co musisz wiedzieć Pamięć RAM jest kluczowym elementem każdego komputera, ale może być myląca. Rozbijamy ją na łatwe do zrozumienia warunki, które zrozumiesz.) Powód tego jest prosty; Arduino ma ograniczoną pamięć RAM, a używanie jej do przechowywania obrazów może nie pozostawiać żadnego kodu do wykonania

Zmodyfikuj swój główny Jeśli instrukcja, aby pokazać te nowe grafiki, gdy jeden lub 20 jest rzutowany. Zwróć uwagę na wiersze kodu, aby pokazać liczbę zrolowaną obok obrazów:

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 

Oto jak wyglądają te nowe rolki:

To wszystko po stronie kodu (idź pobrać kod z GitHub, jeśli pominęłeś to wszystko). Możesz łatwo zmienić to na D12, D8 i tak dalej.

Montaż końcowy

Teraz, gdy wszystko inne jest skończone, czas zapakować wszystko. Przykręcić wyświetlacz, uważając, aby nie dokręcić zbyt mocno śrub. To prawdopodobnie najtrudniejsza część. W ten sposób pękłem wyświetlacz, więc możesz użyć plastikowych podkładek. Z plastiku wyciąłem kilka kwadratów:

Małe nakrętki i śruby mogą być trudne do połączenia. Wskazówka: Użyj małego kawałka Blu-Tack na końcu śrubokręta, aby wstępnie osadzić nakrętki:

Przykręć przycisk, podłącz akumulator i zamknij pokrywę. Uważaj, aby nie uwięzić żadnych przewodów ani nie związać ich zbyt mocno, ponieważ może to spowodować zwarcie. W zależności od długości końcowych przewodów może być konieczne zabezpieczenie odsłoniętych połączeń pewną izolacją (skrzynka szeregowa działa dobrze):

Oto jak to wygląda w środku:

A oto gotowy produkt:

Powinieneś teraz być dumnym właścicielem elektronicznego D20!

Jakie modyfikacje wprowadziłeś? Czy zmieniłeś zdjęcia? Daj nam znać w komentarzach, chcielibyśmy zobaczyć, co zrobiłeś!




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.