Modifications

Sauter à la navigation Sauter à la recherche
4 990 octets ajoutés ,  13 mars 2018 à 23:23
aucun résumé de modification
Ligne 2 : Ligne 2 :     
{{traduction}}
 
{{traduction}}
 +
 +
== Introduction ==
 +
 +
== Hacks possibles ==
 +
 +
== Mélodies ==
 +
 +
=== Changer de mélodie ===
 +
Il est possible de changer simplement de mélodie en changant le nom de celle-ci dant la variable '''MELODIE'''.
 +
 +
L'ensemble des mélodies se trouvent dans le fichier '''melodie.h'''.
 +
 +
<syntaxhighlight lang="c">
 +
// --- Exemple ---
 +
// Changer MARIO
 +
const int MELODIE[][ 2 ] = MARIO;
 +
// Par AXEL_F
 +
const int MELODIE[][ 2 ] = AXEL_F;
 +
</syntaxhighlight>
 +
 +
=== Créer une mélodie ===
 +
 +
Il est possible d'ajouter facilement une mélodie à la bibliothèque '''melodie.h'''.
 +
 +
Je vous invite à lire la bibliothèque de manière à comprendre son fonctionnement et si vous ne comprenez pas tout, je vous invite à lire le contenu suivant.
 +
 +
==== A quoi sert l'antislash ? ====
 +
 +
Comme vous pouvez voir dans la bibliothèque, chacune des mélodies contiennent un antislash à la fin de chaques lignes de code (excepté la dernière) :
 +
 +
<syntaxhighlight lang="c">
 +
#define ALARM1{  \
 +
  {NOTE_A4,  20},\
 +
  {NOTE_C4,  20}}
 +
</syntaxhighlight>
 +
 +
L'antislash ('''\''') sert de remise à la ligne pour le define et son contenu. Si cet antislash n'est pas mit, il sera impossible de compiler le code.
 +
 +
Si vous ne désirez pas mettre d'antislash, il vous sera obligatoire d'écrire tout le contenu du define en une ligne de code.
 +
 +
Pour des raisons de mise en page, nous avons préféré mettre l'antislash à fin de chaques lignes de façon à rendre le code plus lisible.
 +
 +
==== Que contiennent les define ? ====
 +
 +
Le define est un tableau 2 dimensions contenant des nombres entiers (int).
 +
 +
<syntaxhighlight lang="c">
 +
#define ALARM1{  \
 +
  {NOTE_A4,  20},\
 +
  {NOTE_C4,  20}}
 +
</syntaxhighlight>
 +
 +
* La première colonne contient les notes a jouer
 +
** La note (exemple: NOTE_A4) fait référence à un nombre entier se trouvant dans la bibliothèque ''pitches.h''. Cette bibliothèque provient du [https://github.com/nseidle/AxelF_DoorBell/blob/master/pitches.h GitHub de nseidle].
 +
{{ambox | text = Pour plus de précisons sur le fonctionnement de ''pitches.h'', visitez le [https://github.com/nseidle/AxelF_DoorBell/wiki/How-to-convert-sheet-music-into-an-Arduino-Sketch wiki de nseidle] (en anglais).}}
 +
* La deuxièmre colonne contient la durée de chaques notes en milisecondes
 +
 +
==== Comment convertir une musique en mélodie ? ====
 +
 +
Malheureusement, nous avons pas trouvé un outil capable de convertir une musique (en entière) en mélodie polyphonique.
 +
 +
 +
 +
=== Faire sonner un GONG ===
 +
 +
Je vais vous montrer comment ajouter une fonctionnalité facilement à vos alarmes.
 +
 +
Comme exemple, je vais faire sonner un gong toutes les 10 secondes.
 +
 +
Mais premièrement, il est nécessaire de comprendre les 3 fonctions principale. Chacune de ses fonctions sont appelées à chacune des phases des alarmes.
 +
 +
Chaque fois qu'une alarme change de phase, elle envoie comme argument la position de l'alarme (dans notre cas 0 à 3). Il est donc facile de personnaliser chacunes des alarmes.
 +
 +
Voici les 3 fonctions:
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Alarme qui commence à sonner
 +
*/
 +
void alarmeStart( int alarmePos ){
 +
  activerMelodie();
 +
}
 +
 +
/*
 +
* Pendant que l'alarme sonne, répéter une étape
 +
*/
 +
void alarmePulse( int alarmePos ){
 +
  jouerMelodie();
 +
}
 +
 +
/*
 +
* Alarme qui cesse de sonner
 +
*/
 +
void alarmeStop( int alarmePos ){
 +
  arreterMelodie();
 +
}
 +
</syntaxhighlight>
 +
 +
* '''alarmeStart''' est appelée quand une alarme se met en route.
 +
* '''alarmePulse''' est appelée durant le moment où elle est active.
 +
* '''alarmeStop''' est appelée quand une alarme s'arrête.
 +
 +
Il suffit donc d'appeler une autre fonction dans chaqu'une des phases.
 +
 +
Dans notre cas, on veut faire sonner un gong uniquement sur la première alarme (position 0).
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Alarme qui commence à sonner
 +
*/
 +
void alarmeStart( int alarmePos ){
 +
  // Hack moteur
 +
  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 serait nécessaire de définir la position du servo à 0
 +
* '''jouerMoteur();'''
 +
* '''stopMoteur();'''
 +
 +
<syntaxhighlight lang="c">
 +
/*
 +
* Exemple servo moteur
 +
*/
 +
void activerMoteur(){
 +
    // Remise à zéro du moteur
 +
    moteurTempsAvant = 0;
 +
    monServo.write( 0 );
 +
}
 +
void jouerMoteur(){
 +
  unsigned estIlTemps = effectuerAction( moteurTempsAvant, 1500 );
 +
 
 +
  if( estIlTemps != 0 ){
 +
    // Changer quand l'action précédente a été effectuée
 +
    moteurTempsAvant = estIlTemps;
 +
   
 +
    // Bouger le servo de 90°
 +
    monServo.write( 90 );
 +
  }
 +
  else
 +
    monServo.write( 0 );
 +
}
 +
void stopMoteur(){
 +
  monServo.write( 0 );
 +
}
 +
</syntaxhighlight>
 +
 +
    
Plusieurs exemples de hacking:
 
Plusieurs exemples de hacking:
Ligne 10 : Ligne 185 :  
== Idées de hacks possibles ==
 
== Idées de hacks possibles ==
   −
Couper l'écran après un certains temps et le rallumer avec le bouton snooze
+
* Couper l'écran après un certains temps et le rallumer avec le bouton snooze
   −
Faire sonner un GONG (contrôler un servo moteur)
+
* Faire sonner un GONG (contrôler un servo moteur)
   −
Faire tourner une main en mousse de façon à se giffler
+
* Faire tourner une main en mousse de façon à se giffler
    
{{Mon-Reveil-TRAILER}}
 
{{Mon-Reveil-TRAILER}}

Menu de navigation