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