Gulung dalam Gaya Dengan Elektronik D20 Die DIY ini

Gulung dalam Gaya Dengan Elektronik D20 Die DIY ini

Ingin sesuatu yang sedikit unik untuk game role-play meja Anda berikutnya? Bagaimana dengan D20 elektronik dengan grafis khusus untuk hit dan miss kritis? Hari ini saya akan menunjukkan cara membuat sendiri dengan Arduino dan beberapa bagian sederhana.





Jangan khawatir jika Anda belum pernah menggunakan Arduino sebelumnya, kami memiliki panduan memulai .





Bangun Rencana

Ini adalah proyek sederhana. Arduino akan menggerakkan layar OLED, dan sebuah tombol akan memutar dadu. Grafik khusus akan ditampilkan untuk pukulan kritis atau kesalahan lemparan kritis. Anda dapat dengan mudah mengubah kode menjadi D8, D10, atau D12.





Apa yang kau butuhkan

  • 1 x Arduino
  • 1x0,96' Layar OLED I2C
  • 1 x Tombol Tekan
  • 1x10k? Penghambat
  • 1 x papan tempat memotong roti
  • Berbagai macam kabel penghubung
  • Kode lengkap di sini, jika Anda tidak ingin mengikuti semua petunjuk tertulis.

Itu adalah bagian inti yang Anda butuhkan untuk membangun D20 Anda sendiri. Anda mungkin ingin memasangnya ke dalam casing (dibahas di bawah) dan menyolder sirkuit ke kondisi yang lebih permanen. Berikut adalah bagian tambahan yang Anda perlukan untuk melakukannya:

Tampilan OLED ini sangat keren. Mereka biasanya dapat dibeli dalam warna putih, biru, kuning, atau campuran dari ketiganya. Saya telah membeli satu dengan warna biru, untuk mencocokkan kasing saya. Pastikan Anda mendapatkan I2C model bukannya SPI .



Hampir semua Arduino akan cocok. Saya telah memilih Nano, karena cukup kecil untuk masuk ke dalam casing. Lihat panduan pembelian kami untuk informasi lebih lanjut tentang model Arduino.

Sirkuit

Inilah sirkuit yang Anda butuhkan:





Menghubung VCC dan GND pada layar OLED ke Arduino +5V dan tanah . Menghubung analog 4 di Arduino ke pin berlabel SDA . Menghubung analog 5 ke SCL pin. Pin ini berisi sirkuit yang diperlukan untuk menggerakkan tampilan menggunakan bus I2C. Pin yang tepat akan bervariasi menurut model, tetapi A4 dan A5 digunakan pada Nano dan Uno. Periksalah Dokumentasi perpustakaan kawat untuk model Anda jika Anda tidak menggunakan Uno atau Nano.

Hubungkan baterai ke ground dan ANGGUR pin. Ini adalah singkatan dari voltase masuk, dan menerima berbagai voltase DC yang berbeda - tetapi periksa model spesifik Anda terlebih dahulu, dan terkadang bisa sedikit berbeda.





Hubungkan tombol ke pin digital 2 . Perhatikan bagaimana 10k ? resistor dihubungkan ke ground. Ini sangat penting! Ini dikenal sebagai resistor pull down, dan mencegah Arduino mendeteksi data palsu atau gangguan saat menekan tombol. Ini juga berfungsi untuk melindungi papan. Jika resistor ini tidak digunakan, +5V akan langsung masuk ke ground. Ini dikenal sebagai mati pendek dan merupakan cara mudah untuk membunuh Arduino.

Jika Anda menyolder sirkuit ini, lindungi koneksi Anda dengan tabung panas menyusut:

Pastikan Anda tidak memanaskannya terlalu banyak, dan lakukan hanya setelah Anda yakin sirkuitnya berfungsi. Anda mungkin juga ingin memelintir kabel menjadi pasangan. Ini membuat mereka tetap rapi dan membantu melindungi mereka dari tekanan yang tidak semestinya:

Tes Tombol

Sekarang setelah Anda membangun sirkuit, unggah kode tes ini (pastikan untuk memilih papan dan port yang benar dari Alat > Papan dan Alat > Pelabuhan 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);
}
}

Setelah diunggah, biarkan Arduino tetap terhubung melalui USB dan buka monitor serial ( Kanan Atas > Monitor Serial ). Anda harus melihat kata-kata Berhasil muncul setiap kali Anda menekan tombol.

Jika tidak ada yang terjadi, pergi dan periksa kembali sirkuit Anda.

Pengaturan OLED

Anda perlu menginstal dua perpustakaan untuk menggerakkan tampilan. Unduh Adafruit_SSD1306 dan perpustakaan Adafruit-GFX [Tidak Lagi Tersedia] dari Github, dan simpan ke folder perpustakaan Anda. Jika Anda tidak yakin di mana folder perpustakaan Anda, baca tutorial game retro saya, di mana saya mengonfigurasi tampilan yang sama ini secara lebih rinci.

Mulai ulang Arduino IDE Anda dan unggah sketsa uji dari File > Contoh Tidak bisa. Pilih Adafruit SSD1306 lalu ssd1306_128x64_i2c . Unggah kode ini (akan memakan waktu cukup lama), dan Anda akan melihat banyak bentuk dan pola di layar:

Jika tidak ada yang terjadi, periksa kembali koneksi Anda. Jika, setelah memeriksa, itu masih tidak berfungsi, Anda perlu mengubah kode sampel.

tidak dapat menghapus karena file sedang digunakan

Ubah baris ini (di awal mempersiapkan fungsi):

display.begin(SSD1306_SWITCHCAPVCC, 0x3D);

Untuk ini:

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Ini memberi tahu perpustakaan detail spesifik tentang tampilan yang Anda gunakan. Anda sekarang harus siap untuk melanjutkan dengan build.

Kasus

Jika Anda membuat ini di atas papan tempat memotong roti, atau tidak ingin membungkusnya, maka Anda dapat melewati langkah ini.

Saya mendesain dan mencetak kotak ini secara 3D. Dapatkan file di alam semesta . Jangan khawatir jika Anda tidak memiliki printer 3D -- layanan online Hub 3D dan Shapeways menyediakan layanan pencetakan online.

Anda dapat dengan mudah membuat kotak ini dari kayu, atau dengan membeli plastik kotak proyek .

Tutupnya adalah desain push-fit sederhana, dan berisi beberapa potongan untuk perangkat keras:

Kode

Sekarang semuanya sudah siap, saatnya untuk kode. Begini cara kerjanya di Kode semu :

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

Agar ini berfungsi dengan baik, nomor acak perlu dibuat - ini adalah gulungan dadu. Arduino memiliki generator nomor acak yang disebut acak , tetapi tidak boleh menggunakannya. Meskipun cukup baik untuk tugas-tugas acak dasar, itu tidak cukup acak untuk die elektronik. Alasan mengapa agak rumit, tetapi Anda dapat membaca lebih lanjut jika Anda tertarik boallen.com .

Unduh BenarAcak perpustakaan oleh sirleech di Github. Tambahkan ini ke folder perpustakaan Anda dan mulai ulang IDE.

Sekarang buat file baru dan atur kode awal Anda (atau ambil kode yang sudah jadi dari 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() {

}

Kode ini mengonfigurasi OLED, dan menyertakan semua pustaka yang Anda perlukan untuk berkomunikasi dengannya, bersama dengan pustaka nomor acak baru Anda. Sekarang tambahkan ini ke loop utama:

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

Ini cukup mendasar saat ini, tetapi ini adalah D20 yang berfungsi. Setiap kali tombol ditekan, nomor acak antara satu dan 20 ditampilkan di layar:

Ini bekerja dengan baik, tapi agak membosankan. Mari kita membuatnya lebih baik. Buat dua metode baru, menggambarMati dan hapusMati :

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

Ini akan menggambar dadu di tengah layar. Anda mungkin ingin membuatnya lebih rumit, mungkin dengan menggambar D20, atau D12 dan seterusnya, tetapi lebih mudah untuk menggambar dadu bersisi enam dasar. Berikut penggunaan dasarnya:

drawDie();

Selanjutnya, ubah loop utama Anda untuk menggambar angka acak, hanya lebih besar dan di tengah. Ubah ukuran teks dan kursor menjadi ini:

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

Ini terlihat jauh lebih baik sekarang:

Satu-satunya masalah adalah dengan angka yang lebih besar dari sembilan:

Perbaikan untuk ini sederhana. Setiap angka yang kurang dari 10 akan memiliki kursor yang diatur ke posisi yang berbeda dari angka 10 atau lebih besar. Ganti baris ini:

cara memblokir nomor Anda saat melakukan panggilan
display.setCursor(57, 21);

Dengan ini:

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

Inilah yang terlihat seperti sekarang:

Semua yang tersisa sekarang adalah untuk gambar ketika Anda menggulung hit atau miss yang kritis. Ada beberapa langkah yang terlibat, tetapi ini adalah proses yang cukup sederhana.

Temukan gambar yang sesuai yang ingin Anda gunakan (semakin sederhana semakin baik karena tampilannya hanya satu warna). Berikut adalah gambar yang saya gunakan:

Kredit Gambar: publicdomainvectors.org

Setiap gambar yang ingin Anda gunakan perlu dikonversi ke array HEX. Ini adalah representasi dari gambar dalam bentuk kode. Ada banyak alat yang tersedia untuk melakukan ini, dan beberapa ditulis khusus untuk tampilan OLED. Cara termudah adalah dengan menggunakan PicturetoC_Hex alat daring. Berikut adalah pengaturan yang diperlukan:

memecahkan masalah dengan driver video amd/ati

Unggah gambar Anda, dan atur format kode ke HEX: 0x . Mengatur Digunakan untuk ke Hitam/Putih untuk semua fungsi gambar gambar . Biarkan semua opsi lain sebagai default. Anda dapat mengubah ukuran gambar di sini jika perlu. tekan Dapatkan C String dan Anda akan melihat data gambar muncul:

Anda akan membutuhkan data yang dihasilkan ini dalam satu menit. Buat dua fungsi yang disebut menggambarLedakan dan menggambar Tengkorak (atau nama yang cocok untuk versi Anda). Berikut kodenya:

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
}

Jika Anda ingin menggunakan gambar yang saya gunakan, silakan dan salin kodenya. Jika Anda ingin menggunakan gambar Anda sendiri yang Anda buat sebelumnya, salin kode byte ke dalam imSku dan imExp array sesuai kebutuhan.

Inilah tampilan gambar-gambar itu di layar:

Bagian terpenting dari kode itu adalah baris ini:

static const unsigned char PROGMEM imSku[]

Ini memberitahu Arduino untuk menyimpan gambar Anda di EEPROM ( apa itu EEPROM? ) bukan RAM-nya ( panduan cepat untuk RAM ). Alasannya sederhana; Arduino memiliki RAM yang terbatas, dan menggunakan semuanya untuk menyimpan gambar mungkin tidak menyisakan apa pun untuk dieksekusi oleh kode Anda

Ubah utama Anda jika pernyataan untuk menunjukkan grafik baru ini ketika satu atau 20 digulung. Perhatikan baris kode untuk menunjukkan nomor yang digulung di samping gambar juga:

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
}

Dan inilah tampilan gulungan baru itu:

Itu saja untuk sisi kode (ambil kode dari GitHub jika Anda melewatkan semua itu). Anda dapat dengan mudah memodifikasi ini menjadi D12, D8, dan seterusnya.

Majelis Akhir

Sekarang setelah semuanya selesai, saatnya untuk mengemas semuanya. Pasang baut display, pastikan untuk tidak mengencangkan baut secara berlebihan. Ini mungkin bagian yang paling sulit. Saya memecahkan layar saat melakukannya, jadi Anda mungkin ingin menggunakan beberapa mesin cuci plastik. Saya memotong beberapa kotak dari Plastisin :

Mur dan baut kecil bisa sulit untuk disambungkan. Tip: Gunakan sepotong kecil Blu-Tack di ujung obeng untuk memasang mur pada awalnya:

Pasang tombol, sambungkan baterai dan tutup penutupnya. Berhati-hatilah agar tidak menjebak kabel apa pun, atau mengikatnya terlalu erat, yang dapat menyebabkan korsleting. Bergantung pada panjang kabel trailing Anda, Anda mungkin perlu melindungi koneksi yang terbuka dengan beberapa insulasi (kotak serial berfungsi dengan baik):

Berikut tampilan dalamnya:

Dan inilah produk jadinya:

Anda sekarang harus menjadi pemilik D20 elektronik yang bangga!

Modifikasi apa yang Anda lakukan? Apakah Anda mengubah gambar? Beri tahu kami di komentar, kami akan senang melihat apa yang Anda lakukan!

Membagikan Membagikan Menciak Surel Panduan Pemula untuk Menganimasikan Pidato

Menganimasikan pidato bisa menjadi tantangan. Jika Anda siap untuk mulai menambahkan dialog ke proyek Anda, kami akan merinci prosesnya untuk Anda.

Baca Selanjutnya
Topik-topik yang berkaitan
  • buatan sendiri
  • Arduino
  • Papan permainan
  • Elektronik
Tentang Penulis Joe Coburn(136 Artikel Diterbitkan)

Joe adalah lulusan Ilmu Komputer dari University of Lincoln, Inggris. Dia adalah pengembang perangkat lunak profesional, dan ketika dia tidak menerbangkan drone atau menulis musik, dia sering terlihat sedang mengambil foto atau membuat video.

More From Joe Coburn

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan