Cuốn theo phong cách với khuôn D20 điện tử tự làm này

Cuốn theo phong cách với khuôn D20 điện tử tự làm này

Muốn một chút gì đó độc đáo cho trò chơi nhập vai trên bàn tiếp theo của bạn? Làm thế nào về một D20 điện tử với đồ họa tùy chỉnh cho các cú đánh quan trọng và bỏ lỡ? Hôm nay tôi sẽ chỉ cho bạn cách xây dựng Arduino của riêng bạn và một vài phần đơn giản.





Đừng lo lắng nếu bạn chưa bao giờ sử dụng Arduino trước đây, chúng tôi có Bắt đầu khóa hướng dẫn .





Xây dựng kế hoạch

Đây là một dự án đơn giản. Arduino sẽ điều khiển màn hình OLED và một nút sẽ cuộn khuôn. Đồ họa tùy chỉnh sẽ hiển thị cho các lượt đánh quan trọng hoặc các lượt bỏ lỡ quan trọng. Bạn có thể dễ dàng sửa đổi mã thành D8, D10 hoặc D12.





Những gì bạn cần

  • 1 x Arduino
  • 1 x 0,96 ' Màn hình OLED I2C
  • 1 x Nút nhấn
  • 1 x 10k? Điện trở
  • 1 x Breadboard
  • Các loại dây móc
  • Mã đầy đủ ở đây, nếu bạn không muốn làm theo tất cả các cách thông qua các hướng dẫn bằng văn bản.

Đó là những phần cốt lõi bạn cần để xây dựng D20 của riêng mình. Bạn có thể muốn lắp nó vào một hộp (thảo luận bên dưới) và hàn mạch vào trạng thái lâu dài hơn. Dưới đây là các phần bổ sung bạn sẽ cần để làm điều đó:

  • 4 x M2 x 10mm (0,4 inch) bu lông
  • 4 x M2 hạt
  • Vòng đệm 4 x 7mm (0,28 inch)
  • Pin 9V chụp nhanh (hoặc thay thế phù hợp)
  • Ống co nhiệt các loại

Những màn hình OLED này rất tuyệt. Chúng thường có thể được mua với màu trắng, xanh lam, vàng hoặc hỗn hợp của ba loại. Tôi đã mua một cái màu xanh lam, để phù hợp với trường hợp của tôi. Hãy chắc chắn rằng bạn nhận được một I2C mô hình thay vì SPI .



Hầu như bất kỳ Arduino nào cũng sẽ phù hợp. Tôi đã chọn một Nano, vì chúng đủ nhỏ để vừa với vỏ máy. Xem hướng dẫn mua của chúng tôi để biết thêm thông tin về các mô hình Arduino.

Mạch

Đây là mạch bạn cần:





Liên kết VCCGND trên màn hình OLED cho Arduino + 5Vđất . Liên kết tương tự 4 trên Arduino đến chân có nhãn SDA . Liên kết tương tự 5 đến SCL ghim. Các chân này chứa mạch cần thiết để điều khiển màn hình bằng bus I2C. Các chân cắm chính xác sẽ khác nhau tùy theo kiểu máy, nhưng A4 và A5 được sử dụng trên Nano và Uno. Kiểm tra Tài liệu thư viện dây cho mô hình của bạn nếu bạn không sử dụng Uno hoặc Nano.

Kết nối pin với mặt đất và RƯỢU ghim. Điều này là viết tắt của điện áp vào và chấp nhận nhiều loại điện áp DC khác nhau - nhưng hãy kiểm tra kiểu máy cụ thể của bạn trước và nó đôi khi có thể thay đổi một chút.





Kết nối nút với chân kỹ thuật số 2 . Chú ý làm thế nào 10k? điện trở được nối với đất. Cái này rất quan trọng! Đây được gọi là điện trở kéo xuống và nó ngăn Arduino phát hiện dữ liệu giả hoặc nhiễu khi nhấn nút. Nó cũng dùng để bảo vệ bảng. Nếu điện trở này không được sử dụng, + 5V sẽ đi thẳng vào đất. Điều này được gọi là chết hụt và là một cách dễ dàng để giết Arduino.

Nếu bạn đang hàn mạch này, hãy bảo vệ các kết nối của bạn bằng ống co nhiệt:

Đảm bảo rằng bạn không làm nóng nó quá nhiều và chỉ làm như vậy khi bạn đã chắc chắn rằng mạch hoạt động. Bạn cũng có thể muốn xoắn dây cáp của mình thành từng cặp. Điều này giúp chúng gọn gàng và giúp bảo vệ chúng khỏi căng thẳng quá mức:

Kiểm tra nút

Bây giờ bạn đã xây dựng mạch, hãy tải lên mã kiểm tra này (đảm bảo chọn đúng bo mạch và cổng từ Công cụ> BảngCông cụ> Cổng menu):

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

Sau khi tải lên, hãy giữ Arduino được kết nối qua USB và mở màn hình nối tiếp ( Trên cùng bên phải> Màn hình nối tiếp ). Bạn sẽ thấy những từ Nó hoạt động xuất hiện mỗi khi bạn nhấn nút.

Nếu không có gì xảy ra, hãy đi và kiểm tra lại mạch của bạn.

Thiết lập OLED

Bạn cần cài đặt hai thư viện để điều khiển màn hình. Tải về Adafruit_SSD1306 và Adafruit-GFX [Không còn sẵn có] từ Github và lưu chúng vào thư mục thư viện của bạn. Nếu bạn không chắc các thư mục thư viện của mình ở đâu, hãy đọc hướng dẫn chơi game cổ điển của tôi, nơi tôi định cấu hình cùng một màn hình này chi tiết hơn.

Khởi động lại Arduino IDE của bạn và tải lên bản phác thảo thử nghiệm từ Tệp> Ví dụ thực đơn. Lựa chọn Adafruit SSD1306 và sau đó ssd1306_128x64_i2c . Tải lên mã này (sẽ mất một lúc) và bạn sẽ thấy rất nhiều hình dạng và mẫu trên màn hình:

Nếu không có gì xảy ra, hãy kiểm tra lại các kết nối của bạn. Nếu sau khi kiểm tra, nó vẫn không hoạt động, bạn sẽ cần phải sửa đổi mã mẫu.

làm thế nào để máy tính của bạn đọc cho bạn

Thay đổi dòng này (ở đầu cài đặt hàm số):

display.begin(SSD1306_SWITCHCAPVCC, 0x3D);

Về điều này:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Điều này cho thư viện biết chi tiết cụ thể về màn hình bạn đang sử dụng. Bây giờ bạn đã sẵn sàng để tiếp tục xây dựng.

Trường hợp

Nếu bạn đang xây dựng nó trên breadboard hoặc không muốn đóng nó, thì bạn có thể bỏ qua bước này.

Tôi đã thiết kế và in 3D chiếc hộp này. Nhận các tệp trên Thingiverse . Đừng lo lắng nếu bạn không có máy in 3D - Dịch vụ trực tuyến Trung tâm 3DĐường định hình cung cấp dịch vụ in ấn trực tuyến.

Bạn có thể dễ dàng làm hộp này từ gỗ hoặc bằng cách mua nhựa hộp dự án .

Nắp máy có thiết kế đẩy vừa vặn đơn giản và có một vài phần cắt cho phần cứng:

Mật mã

Bây giờ mọi thứ đã sẵn sàng, đã đến lúc viết mã. Đây là cách nó sẽ hoạt động trong Mã giả :

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

Để điều này hoạt động bình thường, một số ngẫu nhiên cần được tạo ra - đây là cuộn của xúc xắc. Arduino có một trình tạo số ngẫu nhiên được gọi là ngẫu nhiên , nhưng không nên sử dụng nó. Mặc dù nó đủ tốt cho các nhiệm vụ ngẫu nhiên cơ bản, nhưng nó không đủ ngẫu nhiên cho một khuôn điện tử. Lý do tại sao hơi phức tạp, nhưng bạn có thể đọc thêm nếu bạn quan tâm tại boallen.com .

Tải về TrueRandom thư viện của sirleech trên Github. Thêm cái này vào thư mục thư viện của bạn và khởi động lại IDE.

Bây giờ, hãy tạo một tệp mới và thiết lập mã ban đầu của bạn (hoặc chỉ lấy mã đã hoàn thành từ 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() {

}

Mã này cấu hình OLED và bao gồm tất cả các thư viện bạn cần giao tiếp với nó, cùng với thư viện số ngẫu nhiên mới của bạn. Bây giờ thêm điều này vào vòng lặp chính:

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

Điều này khá cơ bản vào thời điểm này, nhưng nó là một D20 đang hoạt động. Bất cứ khi nào nút được nhấn, một số ngẫu nhiên từ một đến 20 sẽ hiển thị trên màn hình:

Điều này hoạt động tốt, nhưng nó hơi nhàm chán. Hãy làm cho nó tốt hơn. Tạo hai phương pháp mới, drawDiexóa :

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

Chúng sẽ vẽ một con súc sắc ở giữa màn hình. Bạn có thể muốn làm cho điều này phức tạp hơn, có thể bằng cách vẽ D20 hoặc D12, v.v., nhưng đơn giản hơn là vẽ một khuôn sáu mặt cơ bản. Đây là cách sử dụng cơ bản:

drawDie();

Tiếp theo, sửa đổi vòng lặp chính của bạn để vẽ số ngẫu nhiên, chỉ lớn hơn và ở giữa. Thay đổi kích thước văn bản và con trỏ thành cái này:

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

Bây giờ có vẻ tốt hơn nhiều:

Vấn đề duy nhất là với các số lớn hơn chín:

Cách khắc phục điều này rất đơn giản. Bất kỳ số nào nhỏ hơn 10 sẽ có con trỏ được đặt ở vị trí khác với các số 10 hoặc lớn hơn đó. Thay thế dòng này:

xóa bộ nhớ đệm microsoft edge mà không cần mở
display.setCursor(57, 21);

Với cái này:

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

Đây là những gì trông giống như bây giờ:

Tất cả những gì còn lại bây giờ là dành cho những hình ảnh khi bạn tung một cú đánh quan trọng hoặc bắn trượt. Có một vài bước liên quan, nhưng đó là một quá trình đủ đơn giản.

Tìm một hình ảnh phù hợp mà bạn muốn sử dụng (càng đơn giản càng tốt vì màn hình chỉ có một màu). Đây là những hình ảnh tôi đã sử dụng:

Tín dụng hình ảnh: publicdomainvectors.org

Bất kỳ hình ảnh nào bạn muốn sử dụng sẽ cần được chuyển đổi thành mảng HEX. Đây là một đại diện của hình ảnh ở dạng mã. Có rất nhiều công cụ có sẵn để làm điều này và một số được viết riêng cho màn hình OLED. Cách dễ nhất là sử dụng PicturetoC_Hex công cụ trực tuyến. Dưới đây là các cài đặt cần thiết:

bạn có thể chia sẻ google play phim

Tải lên hình ảnh của bạn và đặt định dạng mã thành HEX: 0x . Bộ Được dùng cho đến Đen / Trắng cho tất cả chức năng vẽ hình ảnh . Để tất cả các tùy chọn khác làm mặc định. Bạn có thể thay đổi kích thước hình ảnh ở đây nếu bạn cần. nhấn Nhận chuỗi C và bạn sẽ thấy dữ liệu hình ảnh xuất hiện:

Bạn sẽ cần dữ liệu được tạo này sau một phút. Tạo hai hàm được gọi là drawExplosiondrawSkull (hoặc tên phù hợp cho phiên bản của bạn). Đây là mã:

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
}

Nếu bạn muốn sử dụng hình ảnh tôi đã sử dụng, hãy tiếp tục và sao chép mã. Nếu bạn muốn sử dụng hình ảnh của riêng mình mà bạn đã tạo trước đó, hãy sao chép mã byte vào imSkuimExp mảng theo yêu cầu.

Đây là những gì những hình ảnh đó trông như thế nào trên màn hình:

Phần quan trọng nhất của mã đó là dòng này:

static const unsigned char PROGMEM imSku[]

Điều này yêu cầu Arduino lưu trữ hình ảnh của bạn trong EEPROM ( EEPROM là gì? ) thay vì RAM của nó ( hướng dẫn nhanh về RAM ). Lý do cho điều này là đơn giản; Arduino có RAM giới hạn và việc sử dụng hết bộ nhớ này để lưu trữ hình ảnh có thể không để lại bất kỳ phần nào còn lại để mã của bạn thực thi

Sửa đổi chính của bạn nếu như để hiển thị các đồ họa mới này khi một hoặc 20 được cuộn. Lưu ý các dòng mã để hiển thị số được cuộn dọc theo hình ảnh:

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
}

Và đây là những gì các cuộn mới đó trông như thế nào:

Đó là tất cả về mặt mã (hãy lấy mã từ GitHub nếu bạn bỏ qua tất cả những điều đó). Bạn có thể dễ dàng sửa đổi nó thành D12, D8, v.v.

Hội đồng cuối cùng

Bây giờ mọi thứ khác đã hoàn tất, đã đến lúc đóng hộp mọi thứ. Bật bu lông màn hình, đảm bảo không siết quá chặt các bu lông. Đây có thể là phần khó nhất. Tôi đã bẻ khóa màn hình khi làm như vậy, vì vậy bạn có thể muốn sử dụng một số vòng đệm bằng nhựa. Tôi cắt một số hình vuông ra khỏi Nhựa dẻo :

Các đai ốc và bu lông nhỏ có thể khó kết nối. Mẹo: Sử dụng một miếng Blu-Tack nhỏ ở đầu tuốc nơ vít để đặt các đai ốc ban đầu:

Vặn nút, kết nối pin và đóng nắp. Hãy cẩn thận để không mắc kẹt bất kỳ dây nào hoặc bó chúng quá chặt, có thể gây ra đoản mạch. Tùy thuộc vào độ dài của dây dẫn cuối cùng của bạn, bạn có thể cần phải bảo vệ các kết nối bị hở bằng một số vật liệu cách nhiệt (hộp nối tiếp hoạt động tốt):

Đây là những gì nó trông giống như bên trong:

Và đây là thành phẩm:

Bây giờ bạn sẽ là chủ sở hữu tự hào của một D20 điện tử!

Bạn đã thực hiện những sửa đổi nào? Bạn đã thay đổi hình ảnh? Hãy cho chúng tôi biết trong phần bình luận, chúng tôi rất thích xem bạn đã làm gì!

Đăng lại Đăng lại tiếng riu ríu E-mail Hướng dẫn cho người mới bắt đầu để tạo hoạt ảnh cho bài phát biểu

Hoạt hình có thể là một thách thức. Nếu bạn đã sẵn sàng bắt đầu thêm đối thoại vào dự án của mình, chúng tôi sẽ chia nhỏ quy trình cho bạn.

Đọc tiếp
Chủ đề liên quan
  • DIY
  • Arduino
  • Trò chơi trên bàn cờ
  • Thiết bị điện tử
Giới thiệu về tác giả Joe Coburn(136 bài báo đã xuất bản)

Joe tốt nghiệp ngành Khoa học Máy tính tại Đại học Lincoln, Vương quốc Anh. Anh ấy là một nhà phát triển phần mềm chuyên nghiệp và khi anh ấy không lái máy bay không người lái hay viết nhạc, anh ấy thường có thể bị bắt gặp chụp ảnh hoặc sản xuất video.

Xem thêm từ Joe Coburn

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký
Thể LoạI Diy