Table des matières:
- Étape 1: Éléments utilisés dans ce projet
- Étape 2: connexion matérielle
- Étape 3: Programmation du logiciel
- Étape 4: Opération
Vidéo: Musique de Noël Cheer Light : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:08
Joyeux Noël! Vous souhaitez avoir un sapin de Noël qui puisse interagir avec vous ?
Étape 1: Éléments utilisés dans ce projet
Composants matériels
- Seeduino V4.2
- Bouclier de base V2
- Grove - Détecteur de mouvement PIR réglable
- Grove - Capteur d'intensité sonore
- Grove - Bande LED RGB WS2813 Etanche - 60 LED/m - 1m
Applications logicielles et services en ligne
IDE Arduino
Étape 2: connexion matérielle
Connectez le capteur PIR, le capteur de volume et la bande LED aux ports D2, A0 et D6 de la protection de base séparément. Branchez Base Shield à Seeduino, tout est fait.
Étape 3: Programmation du logiciel
Les bibliothèques suivantes doivent être installées avant la programmation, veuillez les télécharger et les importer manuellement dans votre IDE Arduino:
- Led_Strip
- MsTimer2
- Arduino_Vector
Afin de rendre le code plus concis, nous l'avons empaqueté. La classe CheerLight est la classe d'application de ce projet.
application de classe::CheerLight
: application publique::interface::IApplication { public: void setup(void); boucle vide (vide); void setPIRSensorPin (pin uint8_t); void setLoudnessSensorPin (pin uint8_t); void mesureCapteurs (void); void changeAnimation(void * args); void changeSpeed(void * args); void changeColor(void * args); application statique::CheerLight * getInstance(void); protected: driver::LEDStrip _ledStrip; pilote::PIRSensor _pirSensor; pilote::LoudnessSensor _loudnessSensor; uint8_t _animation; middleware::Delegate _detectedDelegate; middleware::Delegate _absoluteLoudnessDelegate; middleware::Delegate _relativeLoudnessDelegate; CheerLight(vide); application statique::CheerLight _instance; };
La classe CheerLight a été conçue par Singleton Patterns, ce qui signifie qu'il n'y a qu'une seule instance pour elle, vous pouvez appeler CheerLight::getInstance() pour cette instance. Si la connexion de vos capteurs est différente de la connexion matérielle, vous pouvez les modifier en appelant les méthodes setPIRSensorPin() et setLoudnessSensorPin().
Nous recommandons d'appeler la méthode measureSensors() dans l'interruption de la minuterie pour que les capteurs soient mesurés à temps, mais l'appel manuel des méthodes changeAnimation(), changeSpeed() ou changeColor() n'est pas nécessaire. Ils seront appelés via les Délégués lors de la mesure des capteurs.
Qu'est-ce qu'un délégué ?
Comme nous le savons tous, nous pouvons déclarer un pointeur de fonction et le faire pointer vers une fonction en C:
void func1(void);
void (*pFunc)(void) = func1;
et l'utiliser pour appeler la fonction qu'il a pointée
pFunc();
Mais il existe des différences en C++, si vous essayez de compiler le code suivant:
Classe A {
public: void func1(void); }; void (*pFunc)(void) = &A::func1;
le compilateur rapportera une erreur de conversion de type, voici le bon exemple:
void (A::*pFunc)(void) = &A::func1;
Lorsque nous essayons de l'utiliser pour appeler cette méthode, erreur à nouveau. La raison de cette erreur est qu'une méthode objet doit être appelée par un objet. Nous créons donc un objet pour l'appeler:
Un un;
a.*pFunc();
Cette fois pas de problème. Il y a donc la classe Delegate dans Delegate.h.
modèle
class middleware::Delegate: public middleware::interface::IDelegate { public: Delegate(T * object, void (T::*method)(void *)); void invoquer (void * args); protégé: T * _objet; void (T::*_method)(void *); }; template inline middleware::Delegate::Delegate(T * object, void (T::*method)(void *)): _object(object), _method(method) { } template inline void middleware::Delegate::invoke(void * args) { (_object->*_method)(args); }
Étant donné que la classe Delegate est une classe de modèle, ce qui signifie que Delegate est différent de Delegate, comment les faire pointer par un pointeur ayant le même type? La réponse est interface, il y a donc une interface IDelegate dans IDelegate.h.
middleware de classe::interface::IDelegate {
public: virtual void invoke(void * args) = 0; };
Dans la classe PIR Sensor et Loudness Sensor, il y a une variable nommée _delegates utilisée pour stocker le pointeur des délégués, et il y a une méthode nommée invokeAllDelegates() utilisée pour appeler tous les délégués dans _delegates, elle sera appelée dans la méthode measure().
REMARQUE: les méthodes déléguées, telles que changeAnimation(), changeSpeed() et changeColor() seront appelées dans l'interruption timer2, donc n'utilisez PAS delay() ou une autre fonction basée sur une interruption.
Conseillé:
Spectacle de lumière de Noël synchronisé à la musique ! : 4 étapes
Spectacle de lumière de Noël synchronisé à la musique ! : dans cette instructable, je vais vous montrer comment faire un spectacle de lumière de Noël synchronisé à la musique de Noël à l'aide de pixels RVB. Ne laissez pas ce nom vous effrayer ! Il n'est pas trop difficile d'apprendre à faire cela. Je vous préviens cependant que cela peut être assez
Assembleur de musique : Instrument de musique virtuel intégré avec capteur tactile de type bloc : 4 étapes
Assembleur de musique : Instrument de musique virtuel intégré avec capteur tactile de type bloc : De nombreuses personnes souhaitent apprendre à jouer d'un instrument de musique. Malheureusement, certains d'entre eux ne le démarrent pas en raison du prix élevé des instruments. Sur cette base, nous avons décidé de créer un système d'instruments de musique virtuel intégré pour réduire le budget de démarrage
Capteur à effet Hall : Boîte à musique de Noël : 4 étapes
Capteur à effet Hall : Boîte à musique de Noël : Il s'agit d'une boîte à musique qui joue de la musique une fois ouverte (regardez la vidéo !). C'est une façon géniale, spéciale et unique d'emballer vos cadeaux pour quelqu'un de spécial ! Il utilise un capteur à effet Hall pour vérifier si le couvercle a été ouvert par l'absence de champ magnétique a
Créez des lumières de Noël contrôlées par la musique : 6 étapes
Créez des lumières de Noël contrôlées par la musique : Créez des lumières de Noël contrôlées par la musique pour très bon marché. Cela utilise des pièces très basiques. Cette idée ne vient pas de moi. C'est un dérivé du design de Rybitski situé ici
Boîte de Noël : Lumières de Noël et spectacle de musique contrôlés par Internet Arduino/ioBridge : 7 étapes
Xmas-box : Spectacle de lumières de Noël et de musique contrôlés par Internet Arduino/ioBridge : Mon projet de boîte de Noël consiste en un spectacle de lumières de Noël et de musique contrôlé par Internet. Une chanson de Noël peut être demandée en ligne, puis placée dans une file d'attente et jouée dans l'ordre dans lequel elle a été demandée. La musique est transmise sur une stat FM