İçindekiler:
- Adım 1: Bu Projede Kullanılanlar
- 2. Adım: Donanım Bağlantısı
- Adım 3: Yazılım Programlama
- Adım 4: Çalıştırma
Video: Noel Müziği Tezahürat Işığı: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
Mutlu Noeller! Sizinle etkileşime girebilecek bir Noel ağacına sahip olmak ister misiniz?
Adım 1: Bu Projede Kullanılanlar
Donanım bileşenleri
- Seeduino V4.2
- Temel Kalkan V2
- Grove - Ayarlanabilir PIR Hareket Sensörü
- Grove - Ses Yüksekliği Sensörü
- Grove - WS2813 RGB LED Şerit Su Geçirmez - 60 LED/m - 1m
Yazılım uygulamaları ve çevrimiçi hizmetler
Arduino IDE'si
2. Adım: Donanım Bağlantısı
PIR Sensörü, Ses Yüksekliği Sensörü ve LED şeridi Base Shield'in D2, A0 ve D6 bağlantı noktalarına ayrı ayrı bağlayın. Base Shield'ı Seeduino'ya takın, hepsi bitti.
Adım 3: Yazılım Programlama
Aşağıdaki kitaplıkların programlamadan önce yüklenmesi gerekir, lütfen bunları manuel olarak indirin ve Arduino IDE'nize aktarın:
- LED şerit
- MsTimer2
- Arduino_Vektör
Kodu daha özlü hale getirmek için paketledik. CheerLight sınıfı bu projenin uygulama sınıfıdır.
sınıf uygulaması::CheerLight
: public application::interface::IApplication { public: void setup(void); boşluk döngüsü(boşluk); geçersiz setPIRSensorPin(uint8_t pin); geçersiz setLoudnessSensorPin(uint8_t pin); void MeasureSensors(void); void changeAnimation(void * argümanlar); void changeSpeed(void * argümanlar); geçersiz changeColor(void * argümanlar); statik uygulama::CheerLight * getInstance(void); korumalı: sürücü::LEDStrip _ledStrip; sürücü::PIRSensor _pirSensor; sürücü::LoudnessSensor _loudnessSensor; uint8_t _animasyon; ara katman yazılımı::Delegate _detectedDelegate; ara katman yazılımı::Delegate _absoluteLoudnessDelegate; ara katman yazılımı::Delegate _relativeLoudnessDelegate; CheerLight(boş); statik uygulama::CheerLight _instance; };
CheerLight sınıfı Singleton Patterns tarafından tasarlanmıştır, bu onun için yalnızca bir örnek olduğu anlamına gelir, o örneğe CheerLight::getInstance() öğesini çağırabilirsiniz. Sensörlerinizin bağlantısı Donanım Bağlantısından farklıysa, bunları setPIRSensorPin() ve setLoudnessSensorPin() yöntemlerini çağırarak değiştirebilirsiniz.
Sensörlerin zamanında ölçülmesini sağlamak için zamanlayıcı kesmesinde MeasureSensors() yöntemini çağırmanızı öneririz, ancak changeAnimation(), changeSpeed() veya changeColor() yöntemlerini manuel olarak çağırmak gerekli değildir. Sensörler ölçüldüğünde Delegeler aracılığıyla çağrılacaklardır.
Delege nedir?
Hepimizin bildiği gibi, bir işlev işaretçisi bildirebilir ve C'deki bir işlevi işaret etmesini sağlayabiliriz:
void func1(void);
void (*pFunc)(void) = func1;
ve işaret ettiği işlevi çağırmak için kullanın
pFunc();
Ancak aşağıdaki kodu derlemeye çalışırsanız, C++'da farklılıklar vardır:
a sınıfı {
public: void func1(void); }; void (*pFunc)(void) = &A::func1;
derleyici bir tür dönüştürme hatası bildirir, işte doğru örnek:
void (A::*pFunc)(void) = &A::func1;
Bu yöntemi çağırmak için kullanmayı denediğimizde tekrar hata veriyor. Bu hatanın nedeni, bir nesne yönteminin bir nesne tarafından çağrılması gerektiğidir. Böylece onu çağırmak için bir nesne yaratıyoruz:
bir;
a.*pFunc();
Bu sefer sorun yok. Yani Delegate.h'de Delegate sınıfı var.
şablon
class ara katman yazılımı::Delegate: public ara katman yazılımı::interface::IDelegate { public: Delege(T * nesne, void (T::*method)(void *)); void invoke(void * argümanlar); korumalı: T * _object; void (T::*_method)(void *); }; şablon satır içi ara katman yazılımı:: Temsilci:: Temsilci(T * nesne, geçersiz (T::*yöntem)(geçersiz *)): _nesne(nesne), _method(yöntem) { } şablon satır içi geçersiz ara katman yazılımı::Delegate::invoke(void * argümanlar) { (_object->*_method)(args); }
Delege sınıfı bir şablon sınıfı olduğundan, bu, Delegenin Delegeden farkı olduğu anlamına gelir, aynı tipte işaretçi tarafından işaret edilmeleri nasıl sağlanır? Cevap arayüzdür, yani IDelegate.h'de IDelegate arayüzü vardır.
sınıf ara katman yazılımı::interface::IDelegate {
public: virtual void invoke(void * args) = 0; };
PIR Sensor ve Loudness Sensor'ın sınıfında, Delegelerin işaretçisini depolamak için kullanılan _delegates adında bir değişken ve _delegates içindeki tüm Delegeleri çağırmak için kullanılan invokeAllDelegates() adında bir yöntemi var, Measure() yönteminde çağrılacak.
NOT: changeAnimation(), changeSpeed() ve changeColor() gibi temsilci yöntemleri timer2 kesmesinde çağrılır, bu nedenle içinde delay() veya diğer kesme tabanlı işlevleri KULLANMAYIN.
Önerilen:
Noel Ağacı Nefes Alma - Arduino Noel Işık Denetleyicisi: 4 Adım
Noel Ağacı Nefes Alma - Arduino Noel Işık Denetleyicisi: 9 fitlik önceden aydınlatılmış yapay Noel ağacımın kontrol kutusunun Noel'den önce kırılması iyi bir haber değil, ve üretici yedek parça sağlamıyor. Bu esrarengiz tablo, kendi LED ışık sürücünüzün ve denetleyicinizin Ar'ı nasıl kullanacağını gösterir
Noel Işığı: 4 Adım
Noel Işığı: Noel benim en sevdiğim tatillerden biridir, kar, ışıklar, Noel Baba, hediyeler! Bu sadece harika. Hayalim, karda tüm renkli ışıklarla Noel'de kar görmek. Bu projede size LED ışıkların nasıl ekleneceğini göstereceğim
LED Noel Işığı (Açık/Kapalı): 3 Adım
LED Noel Işığı (Açık/Kapalı): Bu proje https://www.instructables.com/id/Arduino-Christma… ışık açık
20 Dolarlık Tatil Tezahürat Kutusu: 5 Adım (Resimlerle)
$20 Holiday Cheer Box: Bu proje, düğmeye basıldığında rastgele bir ses çıkaran bir kutunun nasıl oluşturulacağını gösterecek. Bu durumda, tatillerde ofisin etrafına stratejik olarak yerleştirebileceğim bir kutu yapmak için kullandım. İnsanlar düğmeye bastıklarında bir ses duyarlar
Noel Kutusu: Arduino/ioBridge İnternet Kontrollü Noel Işıkları ve Müzik Gösterisi: 7 Adım
Noel kutusu: Arduino/ioBridge İnternet Kontrollü Noel Işıkları ve Müzik Şovu: Noel kutusu projem internet kontrollü Noel ışıkları ve müzik şovundan oluşuyor. Çevrimiçi olarak bir Noel şarkı istenebilir, bu şarkı daha sonra kuyruğa alınır ve istendiği sırayla çalınır. Müzik bir FM istasyonunda iletilir