| 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. |