Ligne 101 : |
Ligne 101 : |
| | | |
| === Faire sonner une clochette === | | === Faire sonner une clochette === |
| + | |
| + | Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied. |
| + | |
| + | Choix du matériel : |
| + | |
| + | * Pour la clochette, nous avons choisi une clochette pour chats. |
| + | * Pour le servo moteur, nous avons pris un micro servo tower (disponible sur le [https://shop.mchobby.be/servo-moteurs/64-micro-servo-tower-pro-sg90-3232100000643.html shop]) |
| + | * Pour le support, nous avons utilisé des pièces du kit MakerBeam (disponible sur le [https://shop.mchobby.be/makerbeam/328-makerbeam-kit-de-demarrage-noir-anodise-3232100003286-makerbeam.html shop]) |
| + | |
| + | Premièrement, il sera nécessaire d'ajouter dans l'entête : |
| + | <syntaxhighlight lang="c"> |
| + | ... |
| + | |
| + | // ### ZONE HACK ### |
| + | |
| + | // -- Clochette -- |
| + | #include <Servo.h> // Ajouter la bibliothèque |
| + | #define SERVO_MOTEUR 6 // Définit la broche du servo moteur du gong |
| + | Servo monServo; // Initialisation du servo |
| + | unsigned long moteurTempsAvant = 0 ; // Délai |
| + | int sens = -1; // Sens de rotation |
| + | |
| + | ... |
| + | </syntaxhighlight> |
| + | |
| + | Dans la fonction setup : |
| + | <syntaxhighlight lang="c"> |
| + | void setup() { |
| + | ... |
| + | |
| + | // ### ZONE HACK ### |
| + | // Activer le servo |
| + | monServo.attach( SERVO_MOTEUR ); |
| + | |
| + | // Position du servo de base |
| + | monServo.write( 1 ); |
| + | delay( 500 ); |
| + | |
| + | // Désactiver le servo |
| + | monServo.detach(); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | Dans les différentes phases, on va définir que uniquement l'alarme 1 possède le réveil sonnette et les autres possèdent la mélodie. |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | /* |
| + | * Alarme qui commence à sonner |
| + | */ |
| + | void alarmeStart( int alarmePos ){ |
| + | // Hack |
| + | if( alarmePos == 0) |
| + | activerMoteur(); |
| + | // Sonnerie |
| + | else |
| + | activerMelodie(); |
| + | } |
| + | |
| + | /* |
| + | * Pendant que l'alarme sonne, répéter une étape |
| + | */ |
| + | void alarmePulse( int alarmePos ){ |
| + | // Hack moteur |
| + | if( alarmePos == 0) |
| + | jouerMoteur(); |
| + | // Sonnerie |
| + | else |
| + | jouerMelodie(); |
| + | } |
| + | |
| + | /* |
| + | * Alarme qui cesse de sonner |
| + | */ |
| + | void alarmeStop( int alarmePos ){ |
| + | // Hack moteur |
| + | if( alarmePos == 0) |
| + | stopMoteur(); |
| + | // Sonnerie |
| + | else |
| + | arreterMelodie(); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | * '''activerMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro, au cas ou il n'est pas encore définit à cette position. |
| + | * '''jouerMoteur();''' dans cette fonction, il faudrait changer la position du servo moteur de façon à faire sonner le gong. |
| + | * '''stopMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro. |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | /* |
| + | * Exemple servo moteur |
| + | */ |
| + | void activerMoteur(){ |
| + | // Remise à zéro du moteur |
| + | moteurTempsAvant = 0; |
| + | // Activation du servo |
| + | monServo.attach( SERVO_MOTEUR ); |
| + | } |
| + | void jouerMoteur(){ |
| + | // Tous les 0.1 secondes effectuer |
| + | unsigned estIlTemps = effectuerAction( moteurTempsAvant, 10 ); |
| + | |
| + | if( estIlTemps != 0 ){ |
| + | // Changer quand a été effectué l'action précédente |
| + | moteurTempsAvant = estIlTemps; |
| + | |
| + | // Inverser le sens |
| + | sens *= -1; |
| + | // Bouger le servo de 1° à 46° |
| + | monServo.write( 31 + (sens*30) ); |
| + | } |
| + | } |
| + | void stopMoteur(){ |
| + | monServo.write( 1 ); |
| + | delay( 300 ); |
| + | monServo.detach(); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | La fonction '''effectuerAction''', ci dessous, permet de répéter une tâche tous les x temps. |
| + | |
| + | Cette fonction peut être réutiliser dans d'autres cas. |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | /* |
| + | * Vérifier si c'est le moment d'effectuer l'action |
| + | * |
| + | * ARGUMENTS |
| + | * tempsAvant est temps précédent en millisecondes |
| + | * dureeAttente est le temps avant de relancer l'exécution |
| + | * |
| + | * RETURN |
| + | * 0 Signifie pas maintenant |
| + | * x valeur (unsigned long) : effectuer l'action + changer le tempsAvant (définie dans l'entête du code) |
| + | */ |
| + | unsigned long effectuerAction( unsigned long tempsAvant, int dureeAttente ){ |
| + | unsigned long maintenant = millis(); |
| + | |
| + | if( maintenant - tempsAvant >= dureeAttente ) |
| + | return maintenant; |
| + | |
| + | return 0; |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | === Activer une peluche qui dance et chante === |
| | | |
| Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied. | | Pour faire sonner une clochette, il sera nécessaire d'utiliser un servo moteur, une clochette et un support/pied. |