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