Différences entre versions de « Mon-Reveil-Hack »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
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}}

Version du 13 mars 2018 à 23:23


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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.

// --- Exemple ---
// Changer MARIO
const int MELODIE[][ 2 ] = MARIO;
// Par AXEL_F
const int MELODIE[][ 2 ] = AXEL_F;

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) :

#define ALARM1{  \
  {NOTE_A4,  20},\
  {NOTE_C4,  20}}

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

#define ALARM1{  \
  {NOTE_A4,  20},\
  {NOTE_C4,  20}}
  • 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 GitHub de nseidle.
  • 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:

/*
 * 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();
}
  • 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).

/*
 * 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();
}
  • activerMoteur(); dans cette fonction, il serait nécessaire de définir la position du servo à 0
  • jouerMoteur();
  • stopMoteur();
/*
 * 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 );
}


Plusieurs exemples de hacking:

  • changer la pseudo mélodie de l'alarme.
  • Utiliser un audio FX
  • Utiliser un gong + gyrophare.

Idées de hacks possibles

  • 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 tourner une main en mousse de façon à se giffler

Créé par Stefan pour MCHobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.