Modifications

Sauter à la navigation Sauter à la recherche
1 557 octets supprimés ,  29 mars 2018 à 09:27
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>
  

Menu de navigation