Mündəricat:
- Addım 1: Bu Layihədə İstifadə Edilən Şeylər
- Addım 2: Avadanlıq Bağlantısı
- Addım 3: Proqramlaşdırma
- Addım 4: Əməliyyat
Video: Milad Musiqisi Cheer Light: 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
Milad bayramınız mübarək! Sizinlə ünsiyyət qura biləcək bir Milad ağacına sahib olmaq istəyirsinizmi?
Addım 1: Bu Layihədə İstifadə Edilən Şeylər
Avadanlıq komponentləri
- Seeeduino V4.2
- Əsas qalxan V2
- Grove - Ayarlanabilir PIR Hərəkət Sensoru
- Grove - Səs Sensoru
- Grove - Suya davamlı WS2813 RGB LED Şeridi - 60 LED/m - 1m
Proqram proqramları və onlayn xidmətlər
Arduino IDE
Addım 2: Avadanlıq Bağlantısı
PIR Sensor, Loudness Sensor və LED şeridi ayrı olaraq Base Shield -in D2, A0 və D6 portuna qoşun. Seeduino'ya Baza Qalxanı bağlayın, hamısı hazırdır.
Addım 3: Proqramlaşdırma
Aşağıdakı kitabxanaların proqramlaşdırmadan əvvəl yükləməsi lazımdır, zəhmət olmasa onları Arduino IDE -yə əl ilə yükləyin və idxal edin:
- Led_Strip
- MsTimer2
- Arduino_Vector
Kodu daha qısa etmək üçün onu qablaşdırdıq. CheerLight sinfi bu layihənin tətbiq sinifidir.
sinif tətbiqi:: CheerLight
: ictimai tətbiq:: interfeys:: IApplication {public: void setup (void); boşluq döngəsi (boşluq); boşluq setPIRSensorPin (uint8_t pin); boşluq setLoudnessSensorPin (uint8_t pin); boşluq ölçüsüSensorlar (boş); void changeAnimation (void * args); void changeSpeed (void * args); void changeColor (void * args); statik tətbiq:: CheerLight * getInstance (etibarsız); qorunan: sürücü:: LEDStrip _ledStrip; sürücü:: PIRSensor _pirSensor; sürücü:: LoudnessSensor _loudnessSensor; uint8_t _ canlandırma; ara proqram:: Delegate _detectedDelegate; ara proqram:: Delegate _absoluteLoudnessDelegate; ara proqram:: Delegate _relationLoudnessDelegate; CheerLight (boş); statik tətbiq:: CheerLight _instance; };
CheerLight sinfi Singleton Patterns tərəfindən hazırlanmışdır, yəni bunun üçün yalnız bir nümunə var, o nümunəyə CheerLight:: getInstance () deyə bilərsiniz. Sensorlarınızın bağlantısı Hardware Connection -dan fərqlənirsə, onları setPIRSensorPin () və setLoudnessSensorPin () metodlarına zəng edərək dəyişə bilərsiniz.
Sensorların vaxtında ölçülməsi üçün ölçmə fasiləsində ölçmə sensoru () metoduna zəng etməyi məsləhət görürük, lakin changeAnimation (), changeSpeed () və ya changeColor () metodlarını əl ilə çağırmaq lazım deyil. Sensorlar ölçüləndə nümayəndələr vasitəsilə çağırılacaqlar.
Nümayəndə nədir?
Hamımızın bildiyimiz kimi, bir funksiya göstəricisi elan edə bilərik və onu C -də bir funksiyaya işarə edə bilərik:
void func1 (boş);
void (*pFunc) (void) = func1;
və göstərdiyi funksiyanı çağırmaq üçün istifadə edin
pFunc ();
Aşağıdakı kodu tərtib etməyə çalışarsanız, C ++ da fərqlər var:
sinif A {
ictimai: void func1 (void); }; void (*pFunc) (void) = & A:: func1;
tərtibçi bir növ dönüşüm səhvini bildirəcək, burada doğru nümunədir:
void (A::*pFunc) (void) = & A:: func1;
Bu metodu çağırmaq üçün istifadə etməyə çalışdığımız zaman yenidən səhv edirik. Bu səhvin səbəbi, bir obyekt metodunun bir obyekt tərəfindən çağrılmasıdır. Buna görə zəng etmək üçün bir obyekt yaradırıq:
A a;
a.*pFunc ();
Bu dəfə heç bir problem yoxdur. Beləliklə Delegate.h -də Delegate sinfi var.
şablon
sinif ara proqramı:: Delege: ümumi ara proqram:: interfeys:: IDelegate {public: Delegate (T *object, void (T:: *method) (void *)); void invoke (void * args); qorunan: T * _object; void (T:: *_ metodu) (boş *); }; şablon inline ara proqram:: Delegate:: Delegate (T *obyekt, void (T:: *metodu) (void *)): _object (obyekt), _method (metod) {} şablon daxili boşluq ara proqramı:: Delegate:: invoke (void * args) {(_object-> * _ metodu) (args); }
Delegate sinfi bir şablon sinif olduğu üçün Delegenin Delegenin fərqi olduğu üçün eyni tipli göstərici ilə necə göstərilməsini təmin etmək olar? Cavab interfeysdir, buna görə IDelegate.h -də IDelegate interfeysi var.
sinif orta proqram:: interfeys:: IDelegate {
public: virtual void invoke (void * args) = 0; };
PIR Sensor və Loudness Sensor sinifində, Delegatların göstəricisini saxlamaq üçün istifadə olunan _delegates adlı bir dəyişən var və bütün Delegeleri _delegates -ə çağırmaq üçün istifadə olunan invokeAllDelegates () adlı bir metod var, buna tədbir () metodu deyilir.
Qeyd: changeAnimation (), changeSpeed () və changeColor () kimi səlahiyyətli metodlar timer2 ara verilişində çağırılacaq, buna görə də gecikmə () və ya digər kəsilməyə əsaslanan funksiyanı QULLANMAYIN.
Tövsiyə:
Cib musiqisi oyunçusu: 6 addım
Cib Musiqisi Oynatıcısı: Bu təlimatda arduino pro mini və ya arduino nanodan istifadə edərək öz əlinizlə cib musiqi pleyerinizi fasilə ilə atlamağı və digər xüsusiyyətlərdən istifadə etməyi öyrənəcəksiniz
Arduino istifadə edərək tabut rəqs musiqisi: 6 addım
Arduino istifadə edərək tabut rəqs musiqisi: Bu dərslikdə yalnız bir dinamiklə (MP3 modulu tələb olunmur) musiqi istifadə etmək üçün bir Arduino istifadə edə bilərsiniz. Əvvəlcə bu video dərsinə baxın
Sadə Buzzer Musiqisi: 6 addım
Sadə Buzzer Musiqisi: Arduino ilə öz mahnılarınızı səs siqnalı və ya dinamik vasitəsilə çıxarmaq üçün sadə bir kitabxana. Mahnının kiçik bir nümunəsi " praeludium " tərəfindən Johann Sebastian Bach daxildir
Milad Ağacından Nəfəs Almaq - Arduino Milad İşıq İdarəçisi: 4 addım
Milad Ağacından Nəfəs Almaq-Arduino Milad İşıq Nəzarətçisi: 9 metrlik əvvəlcədən yandırılmış süni Milad ağacımın idarəetmə qutusunun Miladdan əvvəl qırılması və istehsalçının əvəzedici hissələr təqdim etməməsi yaxşı xəbər deyil. Bu özünəməxsus LED işıq sürücünüzü və idarəedicinizi Ar
Milad qutusu: Arduino/ioBridge İnternet İdarə olunan Milad İşıqları və Musiqi Şousu: 7 addım
Xmas qutusu: Arduino/ioBridge İnternet İdarəli Milad İşıqları və Musiqi Şousu: Mənim xmas qutusu layihəm internetlə idarə olunan Milad işıqları və musiqi şousundan ibarətdir. Bir Milad mahnı onlayn olaraq istənə bilər, sonra növbəyə qoyulur və istədiyi qaydada səsləndirilir. Musiqi FM statusu ilə ötürülür