Ligne 1 : |
Ligne 1 : |
| {{Mon-Reveil-NAV}} | | {{Mon-Reveil-NAV}} |
| | | |
− | Si vous désirez obtenir le code complet directement, cliquez [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici]
| + | == Introduction == |
| + | Cette partie du tutoriel reprend le chargement du code du réveil... et s'attarde sur les éléments principaux du code. |
| | | |
− | {{ambox | text = N'hésitez pas à [[Mon-Reveil-Tester|tester]] vos connectiques si ce n'a pas été encore réalisé !}}
| + | == Environnement de travail == |
| + | Vous pouvez obtenir la totalité du code sur le lien suivant: |
| | | |
− | == Environnement de travail ==
| + | {{download-box|Télécharger l'intégralité du code|https://github.com/mchobby/Mon-Reveil-1/archive/master.zip}} |
| | | |
− | ''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 télécharger le fichier compressé du réveil, se trouvant [https://github.com/mchobby/Mon-Reveil-1/archive/master.zip ici]. | + | Passons au vif du sujet: |
− | * Décompressé le fichier zip. | + | * 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 -> "où_le_fichier_décompressé_est/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> |
| | | |
− | == Explication du code == | + | == L'entête du programme == |
| | | |
− | Pour mieux comprendre le code, je vais vous expliquez chaque parties du code ainsi que les différentes procédures à suivre.
| + | 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 === |
| + | |
| + | Il est nécessaire d'ajouter ces bibliothèques pour le bon fonctionnement du code. |
| + | |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
| #include "Adafruit_LEDBackpack.h" // Afficheurs | | #include "Adafruit_LEDBackpack.h" // Afficheurs |
Ligne 33 : |
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 la position des boutons, des leds et du buzzer === | + | === Définir les broches utilisés === |
| | | |
− | Ci-dessous, se trouve l'ensemble des entrées des boutons et piezzo buzzer. | + | Ci-dessous, se trouve l'ensemble des entrées des boutons et du piezzo buzzer. |
| + | |
| + | Vous pouvez les modifier si vous n'uilisez pas les mêmes entrées que dans l'assemblage. |
| | | |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
Ligne 57 : |
Ligne 65 : |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | {{ambox | text =Les boutons 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 par défaut 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 75 : |
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. |
| | | |
− | * Ouverture du port série et définition du débit de données à 9600 bps pour permettre la communication de l'arduino à un ordinateur via usb.
| + | === Port série === |
| + | 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> |
| | | |
− | * Configuration des broches des boutons pour qu'elles se comportent comme des entrées.
| + | === Les entrées === |
| + | Configuration des broches en entrées (pour les boutons). |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
| // Initialisation des boutons | | // Initialisation des boutons |
Ligne 99 : |
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 | 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.}} |
| | | |
− | * Configuration des broches des leds des boutons et du piezo buzzer pour qu'elles se comportent comme des sorties.
| + | === Les 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 113 : |
Ligne 128 : |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | * Démarrer la connection I2C avec l'afficheur en lui insérant une adresse (0x70 par défaut).
| + | === Initialiser l'afficheur === |
| + | 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> |
| | | |
− | * Démarrer la connection I2C avec l'RTC
| + | === RTC === |
| + | Initialisation de l'horloge RTC I2C. |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
− | // Démarrer le lien avec l'RTC en I2C | + | // Démarrer le lien avec le RTC en I2C |
| rtc.begin(); | | rtc.begin(); |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | * Réglage de l'heure si elle n'a pas encore été initialisé dans l'RTC ou si elle n'est plus présente dans l'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 132 : |
Ligne 148 : |
| int m = 0; | | int m = 0; |
| changerHeureVisuel( &h, &m ); | | changerHeureVisuel( &h, &m ); |
− | rtc.adjust( DateTime(2018, 2, 20, h, m, 0) ); // Change l'heure de l'RTC | + | rtc.adjust( DateTime(2018, 2, 20, h, m, 0) ); // Change l'heure de le RTC |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | * Formattage de l'EEPROM si rien dedans (vérification si fanion égale à 255) et si la version est égale à ce qu'il y a dans l'EEPROM.
| + | === EEPROM-Setup === |
| + | 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"> |
| 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.}} |
| | | |
− | * Définir la luminosité par rapport à la luminosité enregistré dans l'EEPROM.
| + | === Luminosité === |
| + | 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 148 : |
Ligne 168 : |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
− | * Copier les alarmes enregistré dans l'EEPROM dans la structure du programme.
| + | === Initialisation des variables des alarmes === |
− | <syntaxhighlight lang="c"> | + | Copier les heures des alarmes enregistrées dans l'EEPROM vers la structure de données des alarmes en mémoire. |
| + | <syntaxhighlight lang="c"> |
| // Configuration des dates/heures sur les alarmes | | // Configuration des dates/heures sur les alarmes |
| DateTime maintenant = rtc.now(); | | DateTime maintenant = rtc.now(); |
| + | |
| int j = 0; | | int j = 0; |
| + | |
| for( int i=3 ; i< ( NBRALARMES*2 )+6 ; i+=3 ){ | | for( int i=3 ; i< ( NBRALARMES*2 )+6 ; i+=3 ){ |
| alarme[j].heureSonne = DateTime( maintenant.year(), maintenant.month(), maintenant.day(), EEPROM.read(i), EEPROM.read(i+1), 0); | | alarme[j].heureSonne = DateTime( maintenant.year(), maintenant.month(), maintenant.day(), EEPROM.read(i), EEPROM.read(i+1), 0); |
Ligne 160 : |
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"> |
| /* | | /* |
| * Routine du code | | * Routine du code |
Ligne 199 : |
Ligne 235 : |
| alarmeGestionAutomatique(); | | alarmeGestionAutomatique(); |
| } | | } |
| + | </syntaxhighlight> |
| + | |
| + | == Affichage == |
| + | === Comment afficher des valeurs ? === |
| + | |
| + | Voir un [[ADF-LED-BACKPACK-I2C-Adresse|ancien wiki]]. |
| + | |
| + | Ci-dessous, nous vous proposons un petit exemple démontrant l'usage de l'afficheur 4x7 segments. |
| + | <syntaxhighlight lang="c"> |
| + | #include "Adafruit_LEDBackpack.h" |
| + | |
| + | // Initialisation de l'afficheur 7 segments |
| + | Adafruit_7segment afficheurs = Adafruit_7segment(); |
| + | |
| + | boolean separateur = false; |
| + | |
| + | void setup() { |
| + | |
| + | // Adresse I2C des afficheurs |
| + | afficheurs.begin( 0x70 ); |
| + | |
| + | // Changer la luminosité des afficheurs |
| + | // 0 à 15 |
| + | afficheurs.setBrightness( 13 ); |
| + | |
| + | // Afficher 1 2 3 4 |
| + | afficher1234(); |
| + | |
| + | delay( 1000 ); |
| + | } |
| + | |
| + | void loop() { |
| + | // Changer l'état des 2 points |
| + | separateur = !separateur; |
| + | // Afficher les 2 points |
| + | afficheurs.drawColon( separateur ); |
| + | // Envoyer les modifications aux afficheurs |
| + | afficheurs.writeDisplay(); |
| + | delay( 500 ); |
| + | |
| + | // Afficher directement sur les 4 afficheurs (4321) |
| + | afficheurs.print(4321, DEC); |
| + | // Envoyer les modifications aux afficheurs |
| + | afficheurs.writeDisplay(); |
| + | |
| + | delay( 500 ); |
| + | } |
| + | |
| + | void afficher1234(){ |
| + | // Afficheur 1 (droite à gauche) (point éteind) |
| + | afficheurs.writeDigitNum( 0, 1, false ); |
| + | // Afficheur 2 (droite à gauche) (point éteind) |
| + | afficheurs.writeDigitNum( 1, 2, false ); |
| + | // Afficheur 3 (droite à gauche) (point éteind) |
| + | afficheurs.writeDigitNum( 3, 3, false ); |
| + | // Afficheur 4 (droite à gauche) (point allumé) |
| + | afficheurs.writeDigitNum( 4, 4, true ); |
| + | |
| + | // Envoyer les modifications aux afficheurs |
| + | afficheurs.writeDisplay(); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | === Fonctions utilitaires d'affichage === |
| + | Les 2 fonctions ci-dessous permettent d'afficher facilement l'heure et les minutes. |
| + | |
| + | Elles permettent aussi de ne rien afficher (affichageNombre = false). |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | /* |
| + | * Afficher les minutes |
| + | */ |
| + | void affichageMinutes( int minutesT, boolean affichageNombre ){ |
| + | if( affichageNombre ){ |
| + | afficheurs.writeDigitNum( 3, minutesT/10, false ); |
| + | afficheurs.writeDigitNum( 4, minutesT - ((int)(minutesT/10))*10, false ); |
| + | } |
| + | else{ |
| + | afficheurs.writeDigitNum( 3, 16, false ); |
| + | afficheurs.writeDigitNum( 4, 16, false ); |
| + | } |
| + | // Change les afficheurs |
| + | afficheurs.writeDisplay(); |
| + | } |
| + | |
| + | /* |
| + | * Afficher les heures |
| + | */ |
| + | void affichageHeures( int heuresT, boolean affichageNombre ){ |
| + | // On affiche les heures |
| + | if( affichageNombre ){ |
| + | afficheurs.writeDigitNum( 0, heuresT/10, false ); |
| + | afficheurs.writeDigitNum( 1, heuresT - ((int)(heuresT/10))*10, false ); |
| + | } |
| + | // On cache les heures |
| + | else{ |
| + | afficheurs.writeDigitNum( 0, 16, false ); |
| + | afficheurs.writeDigitNum( 1, 16, false ); |
| + | } |
| + | // Change les afficheurs |
| + | afficheurs.writeDisplay(); |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | == Fonctions utilitaires générales == |
| + | |
| + | '''Fonction qui vérifie si un bouton est appuyé.''' |
| + | |
| + | Elle compare si la première fois le bouton est appuyé et si la deuxième fois il l'est aussi. |
| + | Si ils sont tout 2 appuyé alors on renvoie vrai, au sinon false. |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | boolean estAppuye( int pinAppuye ){ |
| + | int val1 = digitalRead( pinAppuye ); |
| + | delay( 10 ); |
| + | int val2 = digitalRead( pinAppuye ); |
| + | if ( val1 == val2 && val1 == 0 ) // 0 pour GND |
| + | return true; |
| + | else |
| + | return false; |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | '''Fonction qui vérfie si la seconde est passée.''' |
| + | |
| + | 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. |
| + | |
| + | Passer uniquement false comme argument quand vous faites appel à cette fonction (sauf dans le cas des 2 points au milieu de l'afficheur). |
| + | <syntaxhighlight lang="c"> |
| + | boolean clignote( boolean changerPeriode ){ |
| + | unsigned long maintenant = millis(); |
| + | |
| + | if( maintenant - avantClignote >= 1000 ){ |
| + | if( changerPeriode ) |
| + | avantClignote = maintenant; |
| + | return true; |
| + | } |
| + | return false; |
| + | } |
| </syntaxhighlight> | | </syntaxhighlight> |
| | | |
| == 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 ses donner 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 donner 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 220 : |
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 239 : |
Ligne 414 : |
| |- style="font-size: 90%" | | |- style="font-size: 90%" |
| | align="center" | 5 | | | align="center" | 5 |
| + | | align="center" | 0 |
| + | | align="center" | Programmé Alarme 1 |
| + | |- style="font-size: 90%" |
| + | | align="center" | 6 |
| | align="center" | 0 | | | align="center" | 0 |
| | align="center" | Heure Alarme 2 | | | align="center" | Heure Alarme 2 |
| |- style="font-size: 90%" | | |- style="font-size: 90%" |
− | | align="center" | 6 | + | | align="center" | 7 |
| | align="center" | 0 | | | align="center" | 0 |
| | align="center" | Minute Alarme 2 | | | align="center" | Minute Alarme 2 |
| + | |- style="font-size: 90%" |
| + | | align="center" | 8 |
| + | | align="center" | 0 |
| + | | align="center" | Programmé Alarme 2 |
| |- style="font-size: 90%" | | |- style="font-size: 90%" |
| | align="center" | ... | | | align="center" | ... |
Ligne 250 : |
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 255 : |
Ligne 442 : |
| Premièrement, il est nécessaire d'ajouter la bibliothèque nécessaire au fonctionnement de l'EEPOM. | | Premièrement, il est nécessaire d'ajouter la bibliothèque nécessaire au fonctionnement de l'EEPOM. |
| | | |
− | <syntaxhighlight lang="c"> | + | <syntaxhighlight lang="c"> |
| #include <EEPROM.h> | | #include <EEPROM.h> |
| </syntaxhighlight> | | </syntaxhighlight> |
Ligne 261 : |
Ligne 448 : |
| Pour écrire une donnée dans l'EEPROM, il suffit de définir une position et un nombre entier | | Pour écrire une donnée dans l'EEPROM, il suffit de définir une position et un nombre entier |
| | | |
− | <syntaxhighlight lang="c"> | + | <syntaxhighlight lang="c"> |
| // On écrit à la première position, la valeur 255 | | // On écrit à la première position, la valeur 255 |
| EEPROM.write( 0 , 255 ); | | EEPROM.write( 0 , 255 ); |
Ligne 267 : |
Ligne 454 : |
| Pour lire une donnée dans l'EEPROM, il suffit de définir une position où se trouve une information | | Pour lire une donnée dans l'EEPROM, il suffit de définir une position où se trouve une information |
| | | |
− | <syntaxhighlight lang="c"> | + | <syntaxhighlight lang="c"> |
| // On lit la première entrée de 8 bits se trouvant dans la première position | | // On lit la première entrée de 8 bits se trouvant dans la première position |
− | EEPROM.read(0); | + | EEPROM.read( 0 ); |
| </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"> |
| #include <EEPROM.h> | | #include <EEPROM.h> |
| | | |
Ligne 287 : |
Ligne 477 : |
| | | |
| void loop() { | | void loop() { |
− | delay(10000); // Attendre 10 secondes | + | delay( 10000 ); // Attendre 10 secondes |
| } | | } |
| | | |
Ligne 297 : |
Ligne 487 : |
| // Formatter l'EEPROM | | // Formatter l'EEPROM |
| for (int i = 0 ; i < EEPROM.length() ; i++) | | for (int i = 0 ; i < EEPROM.length() ; i++) |
− | EEPROM.write(i, 0); | + | EEPROM.write( i, 0 ); |
− | Serial.println("EEPROM formatté !"); | + | Serial.println( "EEPROM formatté !" ); |
| | | |
| // Valeur par défaut pour savoir si l'EEPROM est formatté | | // Valeur par défaut pour savoir si l'EEPROM est formatté |
− | EEPROM.write(0, 255); | + | EEPROM.write( 0, 255 ); |
− | Serial.println("Valeur par défaut définie !"); | + | Serial.println( "Valeur par défaut définie !" ); |
| | | |
| // Définir une version | | // Définir une version |
− | EEPROM.write(1, 10); | + | EEPROM.write( 1, 10 ); |
− | Serial.println("Version définie !"); | + | Serial.println( "Version définie !" ); |
| | | |
| // Définir une luminosité | | // Définir une luminosité |
− | EEPROM.write(2, 15); | + | EEPROM.write( 2, 15 ); |
− | Serial.println("Valeur par défaut pour la luminosité est définie !"); | + | Serial.println( "Valeur par défaut pour la luminosité est définie !" ); |
| } | | } |
| </syntaxhighlight> | | </syntaxhighlight> |
Ligne 316 : |
Ligne 506 : |
| == Faire sonner le piezo buzzer == | | == Faire sonner le piezo buzzer == |
| | | |
− | Pour produire un son avec un piezo buzzer, c'est assez simple avec l'outil tone. | + | Pour produire un son avec un piezo buzzer, c'est assez simple avec l'outil '''tone'''. |
− | | |
− | <syntaxhighlight lang="c">
| |
− | | |
− | </syntaxhighlight>
| |
− | | |
− | == Créer votre 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) :
| |
| | | |
| + | * Emettre un son : '''tone( PIN_BUZZER, FREQUENCE );''' |
| + | * Arrêter le son : '''noTone( PIN_BUZZER );''' |
| <syntaxhighlight lang="c"> | | <syntaxhighlight lang="c"> |
− | #define ALARM1{ \ | + | #define PIEZO_BUZZER 13 |
− | {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.
| + | void setup() { |
| + | pinMode( PIEZO_BUZZER, OUTPUT ); |
| + | } |
| | | |
− | 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.
| + | void loop() { |
| + | // Emettre un son de fréquence 2000 |
| + | tone( PIEZO_BUZZER, 2000 ); |
| + | delay( 1000 ); // Atendre 1 secondes |
| + | |
| + | // Emettre un son de fréquence 2000 |
| + | tone( PIEZO_BUZZER, 1000 ); |
| + | delay( 1000 ); |
| | | |
− | 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.
| + | // Ne plus émettre de son |
− | | + | noTone( PIEZO_BUZZER ); |
− | === Que contiennent les define ? ===
| + | delay( 3000 ); |
− | | + | } |
− | Le define est un tableau 2 dimensions contenant des nombres entiers (int).
| + | </syntaxhighlight> |
− | | |
− | <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.
| |
− | | |
− |
| |
| | | |
| {{Mon-Reveil-TRAILER}} | | {{Mon-Reveil-TRAILER}} |