Ligne 337 : |
Ligne 337 : |
| // ### ZONE HACK ### | | // ### ZONE HACK ### |
| | | |
− | // -- Clochette -- | + | // -- Renard -- |
− | #include <Servo.h> // Ajouter la bibliothèque
| + | // Pin 6 |
− | #define SERVO_MOTEUR 6 // Définit la broche du servo moteur du gong | + | #define RENARD_ACTIVE 6 |
− | Servo monServo; // Initialisation du servo
| + | // Pin 12 |
− | unsigned long moteurTempsAvant = 0 ; // Délai
| + | #define RENARD_JOUE 12 |
− | int sens = -1; // Sens de rotation
| |
| | | |
| ... | | ... |
Ligne 349 : |
Ligne 348 : |
| Dans la fonction setup : | | Dans la fonction setup : |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
− | void setup() {
| + | ... |
− | ... | + | |
− | | |
| // ### ZONE HACK ### | | // ### ZONE HACK ### |
− | // Activer le servo | + | // Initialisation des entrées des relais |
− | monServo.attach( SERVO_MOTEUR ); | + | pinMode( RENARD_ACTIVE, OUTPUT ); |
− |
| + | pinMode( RENARD_JOUE, OUTPUT ); |
− | // Position du servo de base
| |
− | monServo.write( 1 );
| |
− | delay( 500 );
| |
− | | |
− | // Désactiver le servo
| |
− | monServo.detach();
| |
− | }
| |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
Ligne 368 : |
Ligne 359 : |
| | | |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
− | /* | + | ... |
− | * Alarme qui commence à sonner
| + | |
− | */
| + | /* |
− | void alarmeStart( int alarmePos ){ | + | * Alarme qui commence à sonner |
− | // Hack
| + | */ |
− | if( alarmePos == 0)
| + | void alarmeStart( int alarmePos ){ |
− | activerMoteur(); | + | if( alarmePos == 0 ) |
− | // Sonnerie | + | activerRenard(); |
− | else | + | else |
− | activerMelodie();
| + | activerMelodie(); |
− | } | + | } |
| + | |
| + | /* |
| + | * Pendant que l'alarme sonne, répéter une étape |
| + | */ |
| + | void alarmePulse( int alarmePos ){ |
| + | // Renard |
| + | if( alarmePos == 0 ){} |
| + | // Mélodie |
| + | else |
| + | jouerMelodie(); |
| + | } |
| | | |
− | /* | + | /* |
− | * Pendant que l'alarme sonne, répéter une étape
| + | * Alarme qui cesse de sonner |
− | */
| + | */ |
− | void alarmePulse( int alarmePos ){ | + | void alarmeStop(int alarmePos){ |
− | // Hack moteur
| + | arreterMelodie(); |
− | if( alarmePos == 0)
| + | stopRenard(); |
− | jouerMoteur();
| + | } |
− | // Sonnerie | |
− | else
| |
− | jouerMelodie();
| |
− | } | |
| | | |
− | /*
| + | ... |
− | * Alarme qui cesse de sonner
| |
− | */
| |
− | void alarmeStop( int alarmePos ){
| |
− | // Hack moteur | |
− | if( alarmePos == 0)
| |
− | stopMoteur();
| |
− | // Sonnerie
| |
− | else
| |
− | arreterMelodie();
| |
− | }
| |
| </syntaxhighlight> | | </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. | + | * '''activerRenard();''' dans cette fonction, il faudrait activer le relais RENARD_ACTIVE et simuler la pression d'un bouton en laissant pendant 1 seconde le relais RENARD_JOUE actif. |
− | * '''jouerMoteur();''' dans cette fonction, il faudrait changer la position du servo moteur de façon à faire sonner le gong.
| + | * '''stopRenard();''' dans cette fonction, il faudrait arrêter le relais RENARD_ACTIVE. |
− | * '''stopMoteur();''' dans cette fonction, il faudrait remettre le servo à l'angle zéro. | |
| | | |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
− | /*
| + | void activerRenard(){ |
− | * Exemple servo moteur
| + | // Activer le renard |
− | */
| + | digitalWrite( RENARD_ACTIVE, HIGH ); |
− | void activerMoteur(){ | + | |
− | // Remise à zéro du moteur
| + | // Faire jouer le renard |
− | moteurTempsAvant = 0;
| + | digitalWrite( RENARD_JOUE, HIGH ); |
− | // Activation du servo
| + | delay( 1000 ); |
− | monServo.attach( SERVO_MOTEUR );
| + | digitalWrite( RENARD_JOUE, LOW ); |
| } | | } |
− | 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
| + | void stopRenard(){ |
− | sens *= -1;
| + | digitalWrite( RENARD_ACTIVE, LOW ); |
− | // 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> | | </syntaxhighlight> |
| | | |