Modifications

Sauter à la navigation Sauter à la recherche
2 022 octets ajoutés ,  9 avril 2018 à 15:58
Ligne 1 : Ligne 1 :  
{{Mon-Reveil-NAV}}
 
{{Mon-Reveil-NAV}}
 +
 +
== Introduction ==
 +
Cette partie du tutoriel reprend le chargement du code du réveil... et s'attarde sur les éléments principaux du code.
    
== Environnement de travail ==
 
== Environnement de travail ==
 +
Vous pouvez obtenir la totalité du code sur le lien suivant:
   −
'''Si vous désirez obtenir le code complet, cliquez [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici]'''
+
{{download-box|Télécharger l'intégralité du code|https://github.com/mchobby/Mon-Reveil-1/archive/master.zip}}
   −
{{ambox | text = N'hésitez pas à [[Mon-Reveil-Tester|tester]] vos connectiques si ce n'a pas été encore fait !}}
+
Si se n'a pas été encore fait, pensez à [[Mon-Reveil-Tester|tester vos connectiques]] avec le programme de test!
   −
''Dans ce tutoriel, nous travaillons sur l'environnement d'ArduinoIDE. Si vous ne l'avez pas encore installé, vous pouvez le télécharger [https://www.arduino.cc/en/Main/Software ici].''
+
Dans ce tutoriel, nous travaillons Avec l'environnement d'ArduinoIDE. Si vous ne l'avez pas encore installé, vous pouvez le télécharger [https://www.arduino.cc/en/Main/Software ici].
   −
Passon au vif du sujet.
+
Passons au vif du sujet:
 +
* Il faut installer le bibliothèque de [[Mon-Reveil-Lib|l'afficheur 4x7 segments]]
 +
* Il faut télécharger les sources du projet [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici].
 +
* Décompresser le fichier zip téléchargé.
 +
* Vous trouverez les sources du projet dans le dossier "'''Mon-Reveil'''".<br />Ouvrez le projet sur ArduinoIDE :
   −
* Premièrement télécharger le projet [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici].
+
Menu -> Ouvrir -> "../Mon-Reveil-1-master/Mon-Reveil/Mon-Reveil.ino"
* Décompressé le fichier zip.
  −
* Dans le dossier ''"Mon Reveil"'', ajoutez-y les fichiers '''Adafruit_LEDBackpack.h''' et '''Adafruit_LEDBackpack.cpp''' (disponible [https://github.com/adafruit/Adafruit_LED_Backpack ici]).
  −
* Ouvrez le projet sur ArduinoIDE :
     −
  Menu -> Ouvrir -> "../Mon-Reveil-1-master/Mon-Reveil/Mon-Reveil.ino"
+
[[Fichier:Mon-Reveil-60b.jpg]]<small><br />''Contenu du projet - cliquez pour agrandir''</small>
   −
[[Fichier:Mon-Reveil-60.jpg|640px]]<small><br />''Contenu du projet - cliquez pour agrandir''</small>
+
== L'entête du programme ==
   −
== Entête ==
+
Dans l'entête se trouvent l'ensemble des variables globales et autres éléments utiles.
 
  −
Dans l'entête se trouvent l'ensemble des variables globales.
      
=== Les inclusions de bibliothèques ===  
 
=== Les inclusions de bibliothèques ===  
   −
Il est nécessaire d'ajouter ces bibliothèques pour le bon fonctionnement du code
+
Il est nécessaire d'ajouter ces bibliothèques pour le bon fonctionnement du code.
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 36 : Ligne 39 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
* Le fichiers pitches.h contient les notes sous forme d'impulsions
+
* Le fichiers '''pitches.h''' contient les notes sous forme d'impulsions.
* Le fichier melodies.h contient plusieurs mélodies que vous pouvez définir comme sonnerie d'alarmes
+
* Le fichier '''melodies.h''' contient plusieurs mélodies que vous pouvez définir comme sonneries d'alarmes.
    
=== Définir les broches utilisés ===
 
=== Définir les broches utilisés ===
Ligne 62 : Ligne 65 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
{{ambox | text = Les boutons d'arcades utilisent les entrées analogiques comme entrées digitales.}}
+
{{ambox | text = Les boutons d'arcades utilisent les entrées analogiques comme entrées digitales. Pour plus d'informations, voir si dessous.}}
 +
[[Fichier:Mon-Reveil-65.png|640px]]
 +
<small><br />''Connectiques de l'Arduino UNO - cliquez pour agrandir''<br />Source: [http://www.pighixxx.com/test/wp-content/uploads/2017/05/uno.png Pighixxx]</small>
   −
=== Personnaliser les paramètres par défaut ===
+
=== Personnaliser les paramètres ===
 +
Il est possible de personnaliser les paramètres par défaut du projet (ex: les alarmes).
   −
Il est possible de personnaliser les paramètres des alarmes.
+
{{ambox|text=Nous recommandons de tester le projet avec ses paramètres par défaut avant de les modifiers}}
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 80 : Ligne 86 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
* '''SNOOZE_ATTENTE''' permet de définir combien de secondes le snooze va encore attendre avant de se remettre à sonner.
+
* '''SNOOZE_ATTENTE''' permet de définir combien de secondes le "bouton snooze" va mettre l'alarme en veille avant de se remettre à sonner. <font color="red">La valeur par défaut est de 10 secondes. '''Nous recommandons 5 minutes, soit 300 secondes'''.</font>
* '''DUREE_ALARME''' permet de définir combien de secondes les alarmes vont sonner.
+
* '''DUREE_ALARME''' permet de définir combien de secondes MAX les alarmes vont sonner si le bouton d'arrêt n'est pas pressé. <font color="red">La valeur par défaut est de 20 secondes. '''Nous recommandons 60 minutes, soit 3600 secondes'''.</font>
* '''BOUTON_ALARM''' permet de définir sur quel broche l'alarme va être activer/désactiver. Il permet aussi de savoir combien d'alarmes vont être utilisés.
+
* '''BOUTON_ALARM''' permet de définir sur quelles broches les boutons d'alarme 1 à 4 sont branchés. Presser un bouton permet d'activer l'alarme correspondante. Re-presser le bouton une seconde fois permet de désactive l'alarme. Cette constante permet aussi de savoir combien d'alarmes doit être géré par le croquis.
 
* '''VITESSE_LECTURE''' permet de définir a quelle vitesse la mélodie va être jouée.
 
* '''VITESSE_LECTURE''' permet de définir a quelle vitesse la mélodie va être jouée.
* '''MELODIE''' permet de définir la mélodie jouée. L'ensemble des mélodies se trouvent dans le fichier ''melodies.h'' qui doit se trouver dans la racine de votre projet.
+
* '''MELODIE''' permet de définir la mélodie jouée. L'ensemble des mélodies se trouvent dans le fichier ''melodies.h''.
 
  −
== Setup ==
     −
Dans le setup se trouvent différentes routines :
+
== setup() ==
 +
La fonction setup() permet d'initialiser les éléments matériels du réveil.
    
=== Port série ===
 
=== Port série ===
Ouverture du port série et définition du débit de données à 9600 bps pour permettre la communication entre un arduino et un ordinateur via usb.
+
Ouverture du port série au débit de données de 9600 bauds, pour permettre la communication entre un arduino et un ordinateur via usb à des fins de débogages.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
Serial.begin( 9600 );
 
Serial.begin( 9600 );
 
</syntaxhighlight>
 
</syntaxhighlight>
   −
=== Entrées ===
+
=== Les entrées ===
Configuration des broches des boutons pour qu'elles se comportent comme des entrées.
+
Configuration des broches en entrées (pour les boutons).
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Initialisation des boutons
 
// Initialisation des boutons
Ligne 106 : Ligne 111 :  
pinMode( BOUTON_ALARME_CONTROLE, INPUT_PULLUP );
 
pinMode( BOUTON_ALARME_CONTROLE, INPUT_PULLUP );
 
pinMode( BOUTON_SNOOZE, INPUT_PULLUP );
 
pinMode( BOUTON_SNOOZE, INPUT_PULLUP );
// Boucles pour les broches utilisées pour activer/désactiver les alarmes
+
// Boucle pour les broches utilisées pour activer/désactiver les alarmes
 
for( int i=0 ; i<NBRALARMES ; i++ )
 
for( int i=0 ; i<NBRALARMES ; i++ )
 
   pinMode( BOUTON_ALARME[i], INPUT_PULLUP );
 
   pinMode( BOUTON_ALARME[i], INPUT_PULLUP );
 
</syntaxhighlight>
 
</syntaxhighlight>
{{ambox-stop | text = Il est important d'activer la résistance PULLUP sur le microcontrôlleur pour éviter de le sur alimenter.}}
+
{{ambox-stop | text = Il est important d'activer la résistance PULLUP sur le microcontrôleur pour éviter de le sur alimenter.}}
   −
=== Sorties ===
+
=== Les sorties ===
Configuration des broches des leds des boutons et du piezo buzzer pour qu'elles se comportent comme des sorties.
+
Configuration des broches en sortie pour:
 +
* Les leds des boutons "snooze" et "OK" (Alarme Stop)
 +
* Le piezo buzzer
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Initialisation des leds et du piezo
 
// Initialisation des leds et du piezo
Ligne 121 : Ligne 128 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
=== Afficheur ===
+
=== Initialiser l'afficheur ===
Démarrer la connection I2C avec l'afficheur en lui insérant une adresse (0x70 par défaut).
+
Initialisation de l'afficheur I2C (sur son adresse I2C par défaut, 0x70).
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
// Adresse I2C des afficheurs
   
afficheurs.begin( 0x70 );
 
afficheurs.begin( 0x70 );
 
</syntaxhighlight>
 
</syntaxhighlight>
    
=== RTC ===
 
=== RTC ===
Démarrer la connection I2C avec le RTC
+
Initialisation de l'horloge RTC I2C.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Démarrer le lien avec le RTC en I2C
 
// Démarrer le lien avec le RTC en I2C
Ligne 135 : Ligne 141 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
Réglage de l'heure si elle n'a pas encore été initialisé dans le RTC ou si elle n'est plus présente dans le RTC.
+
Réglage d'une heure par défaut si elle n'a pas encore été initialisé dans le RTC ou si elle n'est plus présente dans le RTC.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Configuration de l'heure par l'utilisateur si ce n'a pas été encore fait
 
// Configuration de l'heure par l'utilisateur si ce n'a pas été encore fait
Ligne 146 : Ligne 152 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
=== EEPROM ===
+
=== EEPROM-Setup ===
L'EEPROM est formatté automatiquement si le fanion n'est pas égale à 255 ou si la version dans l'EEPROM n'est pas égale à la version du code pour éviter tout soucis de comptabilité.
+
L'EEPROM est formattée automatiquement si le fanion (magic key) n'est pas égale à 255 ou si la version dans l'EEPROM n'est pas égale à la version attendue par le croquis (ps: permet d'éviter tout soucis de compatibilité).
   −
''La valeur du fanion a été choisie aléatoirement.''
   
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
if( EEPROM.read(0) != 255 || EEPROM.read(1) != VERSION )
 
if( EEPROM.read(0) != 255 || EEPROM.read(1) != VERSION )
 
   eepromConfiguration();
 
   eepromConfiguration();
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
{{ambox | text = La valeur du fanion (magic key) à été choisie par le développer.}}
    
=== Luminosité ===
 
=== Luminosité ===
Changer la luminosité des afficheurs par rapport à la luminosité enregistré dans l'EEPROM.
+
Changer la luminosité des afficheurs avec celle enregistrée enregistré dans l'EEPROM.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Définir la luminosité des afficheurs
 
// Définir la luminosité des afficheurs
Ligne 163 : Ligne 169 :     
=== Initialisation des variables des alarmes ===
 
=== Initialisation des variables des alarmes ===
Copier les données des alarmes enregistrées venant de l'EEPROM vers la structure des alarmes se trouvant dans le programme.
+
Copier les heures des alarmes enregistrées dans l'EEPROM vers la structure de données des alarmes en mémoire.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
// Configuration des dates/heures sur les alarmes
 
// Configuration des dates/heures sur les alarmes
Ligne 177 : Ligne 183 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
== Loop ==
+
On commence à la position 3, car les 3 premières valeurs de l'EEPROM sont utilisées pour :
 +
* Le fanion (Magic Key)
 +
* La version de la structure de donnée stockée dans l'EEPROM.
 +
* La luminosité
 +
 
 +
On utilise des incrémentations par 3 (et non par 1) de manière à lire un enregistrement tous les 3 octets en EEPROM.
 +
 
 +
Chaque enregistrement de 3 octets contient:
 +
* Heure
 +
* Minute
 +
* Alarme activée ?
 +
 
 +
Pour plus d'informations logiques, voir [[Mon-Reveil-Programmer#EEPROM|ici]].
   −
Dans la routine, différentes tâches tournent en boucle pour permettre au code de faire tourner l'ensemble des fonctions nécessaire.
+
== loop() ==
 +
La fonction loop() exécutée régulièrement par Arduino Uno prend en charge les différentes tâches au fonctionnement du réveil.
   −
Voici la routine au complet, les commentaires sont explicite à la compréhension.
+
Voici la fonction complète, les commentaires décrivent le fonctionnement.
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 223 : Ligne 242 :  
Voir un [[ADF-LED-BACKPACK-I2C-Adresse|ancien wiki]].
 
Voir un [[ADF-LED-BACKPACK-I2C-Adresse|ancien wiki]].
   −
Ci-dessous, je vous propose une démo.
+
Ci-dessous, nous vous proposons un petit exemple démontrant l'usage de l'afficheur 4x7 segments.
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
#include "Adafruit_LEDBackpack.h"
 
#include "Adafruit_LEDBackpack.h"
Ligne 279 : Ligne 298 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
=== Fonctions utiles pour l'afficheur ===
+
=== Fonctions utilitaires d'affichage ===
 +
Les 2 fonctions ci-dessous permettent d'afficher facilement l'heure et les minutes.
   −
Ces 2 fonctions permettent d'afficher facilement les heures et les minutes. Elles permettent aussi de ne rien afficher (affichageNombre = false).
+
Elles permettent aussi de ne rien afficher (affichageNombre = false).
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 319 : Ligne 339 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
== Fonctions utiles ==
+
== Fonctions utilitaires générales ==
    
'''Fonction qui vérifie si un bouton est appuyé.'''
 
'''Fonction qui vérifie si un bouton est appuyé.'''
Ligne 337 : Ligne 357 :  
}   
 
}   
 
</syntaxhighlight>
 
</syntaxhighlight>
  −
<syntaxhighlight lang="c">
      
'''Fonction qui vérfie si la seconde est passée.'''
 
'''Fonction qui vérfie si la seconde est passée.'''
   −
Elle compare le temps précédent (ms) et le temps maintenant.  
+
Elle compare le temps précédent (ms) et le temps ''maintenant''.  
 
Si ok, on vérifie si on peut changer la valeur précédente à maintenant.  
 
Si ok, on vérifie si on peut changer la valeur précédente à maintenant.  
   Ligne 360 : Ligne 378 :     
== EEPROM ==
 
== EEPROM ==
 +
La mémoire EEPROM (Electrically-Erasable Programmable Read-Only Memory) est une mémoire permanente de type ROM (Read-Only Memory: une mémoire qui ne perd pas ces données lors d'une mise hors tension) que l'on peut modifier via des impulsions électriques.
   −
La mémoire EEPROM (Electrically-Erasable Programmable Read-Only Memory) est une mémoire ROM (Read-Only Memory : une mémoire qui ne perd pas ces données lors d'une mise hors tension) que l'on peut modifier via des impulsions électriques.
+
Cette mémoire permet de stocker des données même lorsque l'Arduino n'est plus alimenté.
 
  −
Cette mémoire a pour potentiel, de stocker des données même lorsque l'Arduino n'est plus alimenté.
      
=== Contenu de l'EEPROM ===
 
=== Contenu de l'EEPROM ===
L'EEPROM de l'arduino UNO est capable d'enregistrer 1024 octets, ce qui offre 1024 entrées de données en 8bits !
+
L'EEPROM de l'arduino UNO est capable d'enregistrer 1024 octets!
   −
Pour rendre plus compréhensible l'organisation de l'EEPROM, voici l'EEPROM sous forme de tableau :
+
Les enregistrements contenu dans l'EEPROM sont représentés dans le tableau ci-dessous pour faciliter la compréhension:
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Ligne 378 : Ligne 395 :  
| align="center" | 0
 
| align="center" | 0
 
| align="center" | 255
 
| align="center" | 255
| align="center" | Fanion
+
| align="center" | Fanion (Magic Key)
 
|- style="font-size: 90%"
 
|- style="font-size: 90%"
 
| align="center" | 1
 
| align="center" | 1
Ligne 416 : Ligne 433 :  
| align="center" | ...
 
| align="center" | ...
 
|}
 
|}
 +
 +
Le fanion (ou Magic Key) est une valeur arbitraire choisie par le développeur et écrite dans le premier octet de l'EEPROM par le croquis Arduino.
 +
 +
En lisant le premier octet de l'EEPROM et en vérifiant s'il contient le fanion (Magic Key) il est possible de savoir si l'EEPROM à déjà initialisée par le croquis Arduino.
    
=== Lecture / Ecriture dans l'EEPROM ===
 
=== Lecture / Ecriture dans l'EEPROM ===
Ligne 438 : Ligne 459 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
=== Fromattage de l'EEPROM ===
+
=== Formater de l'EEPROM ===
 +
Il est important que cette EEPROM soit formatée et initialisé avec des valeurs par défaut avant toute utilisation.
 +
 
 +
Pour se faire, une fonction existe dans le croquis de "Test" (celui qui teste les boutons).
   −
Il est important que cette EEPROM soit formattée avant toute utilisation. Pour se faire, une fonction existe dans la version test. Normalement, si vous avez effectué le [[Mon-Reveil-Tester|test des boutons]], l'EEPROM doit être déjà pré-formatté.  
+
Normalement, si vous avez exécutez le [[Mon-Reveil-Tester|test des boutons]] alors l'EEPROM est déjà pré-formatté.  
   −
Si le formattage de l'EEPROM n'a pas été effectué, téléversez ce code :
+
Si l'EEPROM n'est pas encore formatée et initialisée alors saisissez le code suivant:
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">

Menu de navigation