Modifications

Sauter à la navigation Sauter à la recherche
939 octets ajoutés ,  7 avril 2018 à 20:40
aucun résumé de modification
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:
 
Vous pouvez obtenir la totalité du code sur le lien suivant:
    
{{download-box|Téléchargez Raspbian PiTFT 2.8"|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}}
   −
 
+
Si se n'a pas été encore fait, pensez à [[Mon-Reveil-Tester|tester vos connectiques]] avec le programme de test!
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 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].
 
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].
Ligne 22 : Ligne 23 :  
[[Fichier:Mon-Reveil-60b.jpg]]<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 "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 fonction complète, les commentaires décrivent le fonctionnement.
 
  −
Voici la routine au complet, les commentaires sont explicite à la compréhension.
      
<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 pour l'afficheur ===
 +
Les 2 fonctions ci-dessous permettent d'afficher facilement l'heure et minute.
   −
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 361 : Ligne 362 :  
'''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 380 :     
== 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"
29 910

modifications

Menu de navigation