Itulah yang harus kita dapatkan, yah, dia masih tahu bagaimana cara melompat, berjalan dan mengalahkan kaktus jahat yang menyerangnya, tetapi kita akan sampai pada langkah ini selangkah demi selangkah :)
BAGIAN # 1 dasar-dasar
Saya memesan arduino, "mainan biasa-biasa saja", saya pikir, kit kecil (untuk pengujian), yang kemudian saya sesali. Saya ingin melepaskan potensi, tetapi karena kurangnya modul tambahan ini tidak berfungsi, saya harus bereksperimen, memotong arduino ke sistem keamanan dan mengamati bagaimana sensor melakukan pekerjaan mereka, kemudian memutuskan untuk membuat alarm audio (menggunakan squeaker praktis dari kit), jadi menyapih anjing dengan keras atau menggonggong tiba-tiba :) dan kemudian tangan saya mencapai layar 1602. "Hmm ... ini adalah tampilan yang nyata," pikir saya, tetapi saya kecewa mengetahui bahwa dia makan hampir setengah dari semua kontak pada arduino itu sendiri. Saya mencari-cari dan menemukan papan aneh di kit "i2C" dan itu sangat mencurigakan! Bahwa jumlah lubang bertepatan dengan jumlah mucikari pada layar. "Hmm, tidak mudah ..." pikirku, dan memutuskan untuk menyolder mereka. Beberapa saat kemudian, saya menyadari bahwa saya telah melakukan hal yang benar dan sekarang layar saya hanya makan dua saluran. Dia mulai mempelajari tampilan seperti apa itu dan apa yang bisa dia lakukan. Setelah mempelajari materi yang cukup, saya menemukan bahwa tampilan itu murni tekstual, tetapi lihatlah! Ia dapat menangani 8 karakter baru dengan dimensi 5x8 piksel. Kalau begitu, mari kita mulai menulis game! Pertama, Anda perlu mencari tahu seperti apa permainannya nanti, saya memutuskan untuk membuatnya tampak seperti krom dinosaurus gugl, tetapi dengan beberapa keripik, jadi, untuk pemula, saya pikir itu akan berhasil :)
tetapi Anda masih harus mengelola sesuatu, dan multi-tombol, tidak harus berpikir lama. Saya mengambil remote control IR dari kit.

"Itu joystick," aku bergumam curiga, berpikir tentang penundaan remote control, kejernihan sensor IR, dan umumnya tentang kecukupan ide ini, tapi tidak ada yang bisa dilakukan, aku bisa melatih arduino untuk bekerja dengan keyboard untuk komputer, tapi itu benar-benar malas untuk melakukannya. Jadi saya mulai menulis kode kendali jarak jauh, sehingga saya bisa bekerja dengannya di masa depan. Kode untuk mikrokontroler adalah yang paling sederhana di sini:
"--------------------------------------------------------------------------" // IRremote #include <IRremote.h> decode_results results; IRrecv irrecv (A0); // void setup () { Serial.begin(9600); // com irrecv.enableIRIn(); // } void loop () { if (irrecv.decode( &results )) // , { Serial.println( results.value, HEX ); // irrecv.resume(); // } } "--------------------------------------------------------------------------"
Kode sinyal kendali jarak jauh terlihat seperti ini: "FF18E7" kode Anda akan berbeda, tentu saja, tetapi Anda harus memahami esensinya, dan ketika Anda mengajukan banding ke kode ini, kami menambahkan "0x" di awal dan kami mendapatkan (0xFF18E7).
Setelah mengisi ini ke arduino dan menghubungkannya sebagaimana mestinya, kita dapat mulai merekam dari port log tsiforka, setelah mengklik tombol-tombol perangkat IR. Tapi di sini saya hanya ingin menjelaskan kepada Anda bagaimana menghubungkan sensor IR.
Jika kita melihat sensornya, kita melihat tiga kaki, kiri (sinyal analog), tengah (ground), kanan (plus 5V).

Karena saya masih tidak tahu bagaimana ini akan bekerja sama sekali, saya memulai eksperimen. Pada awalnya saya membuat kode sketsa langkah demi langkah, melalui (delay (waktu)) pada awalnya saya tidak curiga bahwa ini adalah ide yang buruk :)
Apa kusen utama. Mikrokontroler ini tidak dapat melakukan multitasking. Dia mempertimbangkan kode dari atas ke bawah, melewati semua cabang dan fungsi, dan setelah selesai, dia mulai lagi. Dan sekarang, ketika kita memiliki banyak "keterlambatan" dalam kode ini, kita mulai melihat penundaan yang jelas. Ngomong-ngomong, ya, mengapa kita membutuhkan banyak "penundaan" sama sekali. Ketika kami membuat game, jumlah cek dan interaksi mulai bertambah. Sebagai contoh, seorang musuh bergerak ke arah kami dan saya ingin melompatinya, saya menekan "lompatan" dan menurut rencana, saya harus menggantung di udara misalnya 0,8 detik di udara, dan ini adalah seluruh permainan dan membeku selama 0,8 detik ini. "Tidak" Aku berpikir dan mulai memikirkan solusi. Solusinya ditemukan dengan cepat. Mikrokontroler itu sendiri dapat dengan cepat membaca kode dari awal sampai akhir (jika tidak mengganggunya) dan dia juga tahu bagaimana cara menghitung waktu dari awal inklusi. Inilah yang kami butuhkan. Sekarang kita hanya membuat variabel yang akan menyimpan waktu untuk tindakan ini atau itu dan variabel yang membandingkan perbedaan dari jam berapa sekarang dan berapa banyak yang diperlukan untuk mengaktifkan kode. Arduino per detik, membutuhkan 1000 milidetik, cukup nyaman. Berikut ini cuplikan ketika menjadi lebih jelas:
"--------------------------------------------------------------------------" // , , // long ClearTime = 150; // 150 = 0.15f ~6 long ClearTimeCheck = 0; // , long currentMillis = 0; // void loop () { currentMillis = millis(); // = } void clearscreen () // { // if (currentMillis - ClearTimeCheck >= ClearTime) // ( - 0.15f { ClearTimeCheck = currentMillis; // lcd.clear(); // , } } "--------------------------------------------------------------------------"
Tidak sulit kan?
Setelah menulis ulang seluruh kode dengan cara baru, permainan mulai bekerja dengan cepat dan jelas, untuk mensimulasikan tindakan multitasking :) Saya pergi jauh. Bagaimanapun, kita masih perlu membuat karakter, semacam antarmuka dan animasi. Karena kita hanya dapat membuat delapan karakter baru, kita perlu mengacaukan semuanya dengan cerdas. Saya tidak berencana untuk melakukan banyak objek pada layar sejauh ini, oleh karena itu, hal itu dapat dilakukan sehingga saya hanya memiliki delapan objek aktif di layar dalam satu pemrosesan kode. Apa yang akan terjadi Nah, tentu saja karakter utama, pukulan, penjahat, jantung dan indikator kesehatan. Sebagai permulaan, ini sudah cukup. Ya, dan saya memiliki tiga objek unik lainnya dalam persediaan.
Karakter utama akan terlihat seperti ini:

Proses memasukkan karakter baru, saya hasilkan dalam kode biner (saya merasa sangat nyaman)
akan terlihat seperti ini:
01110
01110
00100
01110
10101
00100
01110
01010
Jika Anda melihat lebih dekat, maka dari satu, kita akan melihat karakter kita, tetapi agar dia tidak diam, mari kita buat dia menjadi animasi.

Sekarang ke kode kita, satu set bilangan biner ditambahkan, yaitu yang ini:
00000
01110
01110
00100
11111
00100
01110
01010
Cara membuat animasi pada tampilan ini, saya menunjukkan logika di atas, dan sekarang mari kita berlatih, saat ini, letakkan di tengah layar dan buat diam, dan ingat, tugas kita adalah menggunakan hanya satu sel memori untuk dua sprite animasi. Ini lebih mudah daripada kedengarannya:
"--------------------------------------------------------------------------" #include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x3F,16,2); // long AnimatedTime = 300; // long AnimatedTimeCheck = 0; // ( ) int AnimPlayer = 1; // int GGpozX = 8; // int GGpozY = 1; // 1 2 0 long currentMillis = 0; // // , , :) enum { SYMBOL_HEIGHT = 8 }; byte Player_1[SYMBOL_HEIGHT] = {B01110,B01110,B00100,B01110,B10101,B00100,B01110,B01010,}; // 1 byte Player_2[SYMBOL_HEIGHT] = {B00000,B01110,B01110,B00100,B11111,B00100,B01110,B01010,}; // 2 void setup() { lcd.init(); lcd.backlight();// loop(); PlAn(); } void loop() { if (AnimPlayer != 50) { // , :) //
Setelah memulai, kita melihat lelaki kecil, yang berada di tengah layar, pada baris ke-2 dan bergoyang, untuk berbicara.
Kesimpulan: hari ini saya berbicara tentang bagaimana mencari tahu data melalui port inframerah, cara mem-bypass penundaan kode mikrokontroler, dan bagaimana membuat animasi awal.
Sisanya akan segera tiba :) Saya masih harus menulis banyak, jadi saya akan melihat bagaimana hal itu akan menarik bagi Anda sama sekali, dan jika demikian, besok saya akan mulai menulis sekuel.
Terima kasih atas perhatian Anda, ciao cocoa!
Bagian kedua artikel ->
habr.com/post/425367