Isi kandungan:
- Langkah 1: Perkara Yang Digunakan dalam Projek Ini
- Langkah 2: Sambungan Perkakasan
- Langkah 3: Pengaturcaraan Perisian
- Langkah 4: Operasi
Video: Cahaya Sorakan Muzik Krismas: 4 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:10
Selamat Hari Natal! Adakah anda ingin mempunyai pokok Krismas yang dapat berinteraksi dengan anda?
Langkah 1: Perkara Yang Digunakan dalam Projek Ini
Komponen perkakasan
- Seeeduino V4.2
- Perisai Pangkalan V2
- Grove - Sensor Gerakan PIR Boleh Laras
- Grove - Sensor Loudness
- Grove - WS2813 RGB LED Strip Waterproof - 60 LED / m - 1m
Aplikasi perisian dan perkhidmatan dalam talian
Arduino IDE
Langkah 2: Sambungan Perkakasan
Sambungkan PIR Sensor, Loudness Sensor dan strip LED ke port Base Shield D2, A0 dan D6 secara berasingan. Pasangkan Base Shield ke Seeduino, semuanya selesai.
Langkah 3: Pengaturcaraan Perisian
Perpustakaan yang mengikuti perlu dipasang sebelum pengaturcaraan, sila muat turun dan import ke Arduino IDE anda secara manual:
- Led_Strip
- MsTimer2
- Arduino_Vector
Untuk menjadikan kodnya lebih ringkas, kami telah mengemasnya. Kelas CheerLight adalah kelas aplikasi projek ini.
aplikasi kelas:: CheerLight
: aplikasi awam:: antara muka:: IApplication {public: void setup (void); gelung kosong (kekosongan); batal setPIRSensorPin (pin uint8_t); batal setLoudnessSensorPin (pin uint8_t); pengukuran kekosongan Sensor (kekosongan); perubahan voidAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); aplikasi statik:: CheerLight * getInstance (tidak sah); dilindungi: driver:: LEDStrip _ledStrip; pemandu:: PIRSensor _pirSensor; pemandu:: LoudnessSensor _loudnessSensor; uint8_t _animasi; middleware:: Delegate _detectedDelegate; middleware:: Delegate _absoluteLoudnessDelegate; middleware:: Delegate _relativeLoudnessDelegate; CheerLight (tidak sah); aplikasi statik:: CheerLight _instance; };
Kelas CheerLight dirancang oleh Singleton Patterns, yang bermaksud hanya ada satu contoh untuknya, anda boleh memanggil CheerLight:: getInstance () ke instance tersebut. Sekiranya sambungan Sensor anda berbeza dengan Sambungan Perkakasan, anda boleh mengubahnya dengan memanggil kaedah setPIRSensorPin () dan setLoudnessSensorPin ().
Kami mengesyorkan memanggil kaedah mengukurSensors () pada pemasa untuk mengganggu agar sensor diukur tepat pada masanya, tetapi memanggil kaedah ChangeAnimation (), changeSpeed () atau changeColor () secara manual tidak diperlukan. Mereka akan dipanggil melalui Delegasi ketika sensor diukur.
Apa itu Delegasi?
Seperti yang kita semua ketahui, kita dapat menyatakan fungsi penunjuk dan membuatnya menunjuk ke fungsi dalam C:
kekosongan func1 (kekosongan);
void (* pFunc) (void) = func1;
dan menggunakannya untuk memanggil fungsi yang ditunjukkannya
pFunc ();
Tetapi terdapat perbezaan dalam C ++, jika anda cuba menyusun kod berikut:
kelas A {
awam: void func1 (void); }; void (* pFunc) (void) = & A:: func1;
penyusun akan melaporkan ralat penukaran jenis, berikut adalah contoh yang betul:
void (A:: * pFunc) (void) = & A:: func1;
Apabila kita mencuba menggunakannya untuk memanggil kaedah itu, ralat sekali lagi. Sebab untuk kesalahan itu adalah bahawa kaedah objek mesti dipanggil oleh objek. Oleh itu, kami membuat objek untuk memanggilnya:
A a;
a. * pFunc ();
Kali ini tiada masalah. Jadi ada kelas Delegate di Delegate.h.
templat
kelas middleware:: Delegate: public middleware:: interface:: IDelegate {public: Delegate (objek T *, void (kaedah T:: *) (void *)); invoid batal (void * args); dilindungi: T * _object; batal (kaedah T:: * _) (batal *); }; templat inline tengah:: Delegate:: Delegate (objek T *, void (kaedah T:: *) (void *)): _object (objek), _method (kaedah) {} templat inline void templat:: Delegate:: invoke (batal * args) {(kaedah _object -> * _) (args); }
Oleh kerana kelas Delegate adalah kelas templat, yang berarti Delegate adalah perbezaan dengan Delegate, bagaimana membuat mereka ditunjuk oleh pointer mempunyai jenis yang sama? Jawapannya adalah antara muka, jadi terdapat antara muka IDelegate di IDelegate.h.
middleware kelas:: antara muka:: IDelegate {
awam: virtual void invoke (void * args) = 0; };
Dalam kelas PIR Sensor dan Loudness Sensor, terdapat pemboleh ubah bernama _delegates yang digunakan untuk menyimpan pointer of Delegates, dan ada kaedah bernama invokeAllDelegates () yang digunakan untuk memanggil semua Delegate dalam _delegates, ia akan dipanggil dalam kaedah mengukur ().
CATATAN: Kaedah perwakilan, seperti perubahanAnimation (), changeSpeed () dan changeColor () akan dipanggil dalam pemasa 2 interrupt, jadi JANGAN gunakan penundaan () atau fungsi lain berdasarkan gangguan di dalamnya.
Disyorkan:
Pertunjukan Cahaya Krismas Diselaraskan dengan Muzik !: 4 Langkah
Pertunjukan Cahaya Krismas Diselaraskan ke Muzik !: Dalam instruksi ini, saya akan menunjukkan kepada anda bagaimana membuat pertunjukan cahaya Krismas yang diselaraskan dengan muzik Krismas menggunakan piksel RGB. Jangan biarkan nama itu menakutkan anda! Tidak sukar untuk belajar bagaimana melakukan ini. Saya akan memberi amaran kepada anda bahawa ini cukup
Sensor Kesan Dewan: Kotak Muzik Krismas: 4 Langkah
Hall Effect Sensor: Christmas Music Box: Ini adalah kotak muzik yang memainkan muzik sekali dibuka (tonton video!). Ini cara yang bagus, istimewa, dan unik untuk membungkus hadiah anda untuk orang istimewa anda! Ia menggunakan sensor kesan ruang untuk memeriksa sama ada penutup dibuka kerana kekurangan medan magnet dan
Muzik Reaktif Cahaya -- Cara Membuat Muzik Reaktif Cahaya Muzik Super Sederhana untuk Membuat Desktop Hebat .: 5 Langkah (dengan Gambar)
Muzik Reaktif Cahaya || Cara Membuat Muzik Reaktif Cahaya Muzik Super Sederhana untuk Membuat Desktop Yang Hebat: Hai apa lagi, Hari ini kita akan membina projek yang sangat menarik. Hari ini kita akan membina cahaya reaktif muzik. Led akan mengubah kecerahannya mengikut bass yang sebenarnya merupakan isyarat audio frekuensi rendah. Ia sangat mudah untuk dibina. Kami akan
Buat Lampu Krismas yang Dikendalikan Muzik: 6 Langkah
Jadikan Lampu Krismas yang Dikendalikan Muzik: Jadikan lampu Krismas yang dikawal muzik dengan harga yang sangat murah. Ini menggunakan bahagian yang sangat asas. Idea ini bukan berasal dari saya. Ini adalah turunan dari reka bentuk Rybitski yang terletak di sini
Kotak Xmas: Lampu Krismas dan Muzik Arduino / ioBridge yang Dikendalikan Internet dan Pertunjukan Muzik: 7 Langkah
Xmas-box: Arduino / ioBridge Internet Controlled Christmas Lights and Music Show: Projek xmas-box saya terdiri daripada lampu Krismas dan pertunjukan muzik yang dikendalikan oleh internet Lagu Krismas boleh diminta secara dalam talian yang kemudian dimasukkan dalam barisan dan dimainkan mengikut urutan yang diminta. Muzik disebarkan pada stat FM