Daftar Isi:
- Langkah 1: Hal-hal yang Digunakan dalam Proyek Ini
- Langkah 2: Koneksi Perangkat Keras
- Langkah 3: Pemrograman Perangkat Lunak
- Langkah 4: Operasi
Video: Musik Natal Cheer Light: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Selamat Natal! Apakah Anda ingin memiliki pohon Natal yang dapat berinteraksi dengan Anda?
Langkah 1: Hal-hal yang Digunakan dalam Proyek Ini
Komponen perangkat keras
- Seeeduino V4.2
- Perisai Dasar V2
- Grove - Sensor Gerak PIR yang Dapat Disesuaikan
- Grove - Sensor Kenyaringan
- Grove - WS2813 RGB LED Strip Tahan Air - 60 LED/m - 1m
Aplikasi perangkat lunak dan layanan online
Arduino IDE
Langkah 2: Koneksi Perangkat Keras
Hubungkan Sensor PIR, Sensor Kenyaringan, dan strip LED ke port D2, A0 dan D6 Base Shield secara terpisah. Pasang Base Shield ke Seeduino, semua selesai.
Langkah 3: Pemrograman Perangkat Lunak
Pustaka berikut perlu diinstal sebelum pemrograman, silakan unduh dan impor ke Arduino IDE Anda secara manual:
- Led_Strip
- MsTimer2
- Arduino_Vektor
Untuk membuat kode lebih ringkas, kami telah mengemasnya. Kelas CheerLight adalah kelas aplikasi dari proyek ini.
aplikasi kelas::CheerLight
: aplikasi publik::interface::IApplication { public: void setup(void); lingkaran batal (batal); batalkan setPIRSensorPin(pin uint8_t); void setLoudnessSensorPin(pin uint8_t); void measureSensors(void); void changeAnimation(void * args); void changeSpeed(void * args); void changeColor(void * args); aplikasi statis::CheerLight * getInstance(void); dilindungi: driver::LEDStrip _ledStrip; driver::PIRSensor _pirSensor; driver::LoudnessSensor _loudnessSensor; uint8_t _animation; middleware::Delegasikan _detectedDelegate; middleware::Delegasikan _absoluteLoudnessDelegate; middleware::Delegasikan _relativeLoudnessDelegate; CheerLight(kosong); aplikasi statis::CheerLight _instance; };
Kelas CheerLight dirancang oleh Singleton Patterns, yang berarti hanya ada satu instance untuknya, Anda dapat memanggil CheerLight::getInstance() ke instance tersebut. Jika koneksi Sensor Anda berbeda dengan Koneksi Perangkat Keras, Anda dapat mengubahnya dengan memanggil metode setPIRSensorPin() dan setLoudnessSensorPin().
Kami merekomendasikan memanggil metode measureSensors() dalam interupsi timer untuk membuat sensor diukur tepat waktu, tetapi memanggil metode changeAnimation(), changeSpeed() atau changeColor() secara manual tidak diperlukan. Mereka akan dipanggil melalui Delegasi saat sensor diukur.
Apa itu Delegasi?
Seperti yang kita semua tahu, kita dapat mendeklarasikan pointer fungsi dan membuatnya menunjuk ke fungsi di C:
batal func1(kosong);
void (*pFunc)(void) = fungsi1;
dan gunakan untuk memanggil fungsi yang ditunjuknya
pFunc();
Tetapi ada perbedaan dalam C++, jika Anda mencoba mengkompilasi kode berikut:
kelas A {
publik: void func1(void); }; void (*pFunc)(void) = &A::func1;
kompiler akan melaporkan kesalahan konversi tipe, berikut adalah contoh yang tepat:
void (A::*pFunc)(void) = &A::func1;
Ketika kami mencoba menggunakannya untuk memanggil metode itu, kesalahan lagi. Alasan kesalahan itu adalah bahwa metode objek harus dipanggil oleh objek. Jadi kami membuat objek untuk menyebutnya:
A A;
a.*pFunc();
Kali ini tidak masalah. Jadi ada kelas Delegate di Delegate.h.
templat
class middleware::Delegate: public middleware::interface::IDelegate { public: Delegate(T * objek, void (T::*method)(void *)); void memanggil(void * args); dilindungi: T * _objek; batal (T::*_metode)(batal *); }; template inline middleware::Delegate::Delegate(T * objek, void (T::*method)(void *)): _object(object), _method(method) { } template inline void middleware::Delegate::invoke(void * args) { (_object->*_method)(args); }
Karena kelas Delegate adalah kelas template, yang berarti Delegate berbeda dengan Delegate, bagaimana caranya agar mereka ditunjuk oleh pointer dengan tipe yang sama? Jawabannya adalah interface, jadi ada interface IDelegate di IDelegate.h.
kelas middleware::interface::IDelegate {
publik: virtual void memanggil(void * args) = 0; };
Di kelas PIR Sensor dan Loudness Sensor, ada variabel bernama _delegates yang digunakan untuk menyimpan pointer dari Delegate, dan ada sebuah method bernama inviteAllDelegates() yang digunakan untuk memanggil semua Delegates di _delegates, itu akan dipanggil di method measure().
CATATAN: Metode delegasi, seperti changeAnimation(), changeSpeed() dan changeColor() akan dipanggil dalam interupsi timer2, jadi JANGAN gunakan delay() atau fungsi berbasis interupsi lainnya di dalamnya.
Direkomendasikan:
Pertunjukan Cahaya Natal yang Disinkronkan dengan Musik!: 4 Langkah
Pertunjukan Cahaya Natal yang Disinkronkan dengan Musik!: Dalam instruksi ini, saya akan menunjukkan kepada Anda bagaimana membuat pertunjukan cahaya Natal disinkronkan dengan musik Natal menggunakan piksel RGB. Jangan biarkan nama itu membuat Anda takut! Tidak terlalu sulit untuk mempelajari cara melakukannya. Saya akan memperingatkan Anda bahwa ini bisa sangat
Lampu Natal Musik Otomatis DIY (MSGEQ7 + Arduino): 6 Langkah (dengan Gambar)
Lampu Natal Musik Otomatis DIY (MSGEQ7 + Arduino): Jadi setiap tahun saya mengatakan akan melakukan ini dan tidak pernah melakukannya karena saya sering menunda-nunda. 2020 adalah tahun perubahan jadi saya katakan ini adalah tahun untuk melakukannya. Jadi harap Anda menyukai dan membuat lampu Natal musik Anda sendiri. Ini akan menjadi s
Sensor Efek Hall: Kotak Musik Natal: 4 Langkah
Sensor Efek Hall: Kotak Musik Natal: Ini adalah kotak musik yang memutar musik setelah dibuka (tonton videonya!). Ini cara yang bagus, istimewa, dan unik untuk membungkus hadiah Anda untuk seseorang yang spesial! Ini menggunakan sensor efek hall untuk memeriksa apakah tutupnya telah dibuka oleh kurangnya medan
Lampu Natal Musik DIY untuk Pemula Dengan Raspberry Pi: 12 Langkah (dengan Gambar)
Lampu Natal Musik DIY untuk Pemula Dengan Raspberry Pi: Hari ini, saya akan membahas langkah-langkah menggunakan raspberry pi untuk membuat lampu Natal Anda berkedip dengan musik. Dengan hanya beberapa dolar bahan tambahan, saya memandu Anda mengubah lampu Natal biasa Anda menjadi pertunjukan cahaya seluruh rumah. Tujuannya dia
Jadikan Lampu Natal Terkendali Musik: 6 Langkah
Jadikan Lampu Natal Terkendali Musik: Buat lampu Natal yang dikontrol musik dengan sangat murah. Ini menggunakan bagian yang sangat mendasar. Ide ini bukan berasal dari saya. Ini adalah turunan dari desain Rybitski yang terletak di sini