Modifications

Sauter à la navigation Sauter à la recherche
1 237 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}}
 
  −
{{download-box|Téléchargez Raspbian PiTFT 2.8"|https://github.com/mchobby/Mon-Reveil-1/archive/master.zip}}
  −
 
  −
{{ambox | text = N'hésitez pas à [[Mon-Reveil-Tester|tester]] vos connectiques si se n'a pas été encore fait !}}
     −
''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].''
+
Si se n'a pas été encore fait, pensez à [[Mon-Reveil-Tester|tester vos connectiques]] avec le programme de test!
   −
Passons au vif du sujet.
+
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].
   −
* Premièrement, il vous faudra télécharger le projet [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici].
+
Passons au vif du sujet:
* Décompressé le fichier zip téléchargé.
+
* Il faut installer le bibliothèque de [[Mon-Reveil-Lib|l'afficheur 4x7 segments]]
* 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]).
+
* Il faut télécharger les sources du projet [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici].
* Ouvrez le projet sur ArduinoIDE :
+
* 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 :
   −
  Menu -> Ouvrir -> "../Mon-Reveil-1-master/Mon-Reveil/Mon-Reveil.ino"
+
Menu -> Ouvrir -> "../Mon-Reveil-1-master/Mon-Reveil/Mon-Reveil.ino"
   −
[[Fichier:Mon-Reveil-60.jpg|640px]]<small><br />''Contenu du projet - cliquez pour agrandir''</small>
+
[[Fichier:Mon-Reveil-60b.jpg]]<small><br />''Contenu du projet - cliquez pour agrandir''</small>
   −
== Entête ==
+
== L'entête du programme ==
   −
Dans l'entête se trouvent l'ensemble des variables globales.
+
Dans l'entête se trouvent l'ensemble des variables globales et autres éléments utiles.
    
=== Les inclusions de bibliothèques ===  
 
=== Les inclusions de bibliothèques ===  
Ligne 66 : Ligne 67 :  
{{ambox | text = Les boutons d'arcades utilisent les entrées analogiques comme entrées digitales. Pour plus d'informations, voir si dessous.}}
 
{{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]]
 
[[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>
+
<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 84 : 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 quelle broche l'alarme va être activée/désactivée. La variable permet aussi de savoir combien d'alarmes vont être utilisées.
+
* '''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''.
 
* '''MELODIE''' permet de définir la mélodie jouée. L'ensemble des mélodies se trouvent dans le fichier ''melodies.h''.
   −
== Setup ==
+
== setup() ==
 
+
La fonction setup() permet d'initialiser les éléments matériels du réveil.
Dans le setup se trouvent différentes routines :
      
=== 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 110 : 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 de chaques 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 125 : 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 139 : 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 151 : Ligne 153 :     
=== EEPROM-Setup ===
 
=== 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 compatibilité.
+
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é).
    
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
Ligne 157 : Ligne 159 :  
   eepromConfiguration();
 
   eepromConfiguration();
 
</syntaxhighlight>
 
</syntaxhighlight>
{{ambox | text = La valeur du fanion a été choisie aléatoirement.}}
+
{{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 167 : 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 182 : Ligne 184 :     
On commence à la position 3, car les 3 premières valeurs de l'EEPROM sont utilisées pour :
 
On commence à la position 3, car les 3 premières valeurs de l'EEPROM sont utilisées pour :
* Le fanion
+
* Le fanion (Magic Key)
* La version
+
* La version de la structure de donnée stockée dans l'EEPROM.
 
* La luminosité
 
* La luminosité
   −
On utilise des incrémentations par 3 (et non par 1) de manière à lire toutes les 3 lignes.  
+
On utilise des incrémentations par 3 (et non par 1) de manière à lire un enregistrement tous les 3 octets en EEPROM.  
   −
Chaque une de ses 3 lignes contiennent :
+
Chaque enregistrement de 3 octets contient:
 
* Heure
 
* Heure
 
* Minute  
 
* Minute  
* Programmé ?
+
* Alarme activée ?
 
      
Pour plus d'informations logiques, voir [[Mon-Reveil-Programmer#EEPROM|ici]].
 
Pour plus d'informations logiques, voir [[Mon-Reveil-Programmer#EEPROM|ici]].
   −
== Loop ==
+
== 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.
Dans la routine, différentes tâches tournent en boucle pour permettre au code de faire tourner l'ensemble des fonctions nécessaire.
     −
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 242 : 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 298 : 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 338 : 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 356 : 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 379 : 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 397 : 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 435 : 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 457 : 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