Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino

actionner un moteur en fonction de l'heure

    29 mars 2015 à 17:41:21

    mais si je supprime le 2nd setup, j'en fait quoi de ça :

    lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 
    
    delay(10);  

    ?

    • Partager sur Facebook
    • Partager sur Twitter
      29 mars 2015 à 17:44:24

      Eh oui, un programme arduino, cela se compose :

      - d'une fonction setup qui sera appelée au tout début => c'est là dedans que l'on place les initialisations

      - d'une fonction loop qui sera appelée en boucle => c'est là dedans que l'on place le programme


      Donc si tu ne dois en garder qu'une des deux, le plus logique sera de placer le contenu de celle que tu supprimes à la suite de celle que tu ne supprimes pas

      -
      Edité par lorrio 29 mars 2015 à 17:45:37

      • Partager sur Facebook
      • Partager sur Twitter
        29 mars 2015 à 17:46:54

        donc je supprime le 2nd setup et je met ce qui était a l’intérieure dans le 1er setup, c'est ça ?
        • Partager sur Facebook
        • Partager sur Twitter
          29 mars 2015 à 17:48:00

          ok et je la met a la fin de la première ou je dois faire attention à l'endroit où je la place ?

          • Partager sur Facebook
          • Partager sur Twitter
            29 mars 2015 à 17:58:10

            Bien sûre que la place est importante !

            L'arduino va exécuter ton programme ligne par ligne.

            Du coup, tout dépend dans quel ordre tu veux initialiser tes composants.

            Si tu veux initialiser ton écran en premier, ces lignes sont donc à placer au tout début de la fonction setup.

            A l'inverse, si tu veux initialiser ton écran en dernier, ces lignes sont à placer à la fin.

            -
            Edité par lorrio 29 mars 2015 à 17:59:52

            • Partager sur Facebook
            • Partager sur Twitter
              29 mars 2015 à 18:01:12

              donc je dois les mettre a la fin
              • Partager sur Facebook
              • Partager sur Twitter
                29 mars 2015 à 18:04:37

                au fait, tu m'as pas dis si tu savais pourquoi aucune des bibliothèques qui sont sensé faire marcher le RTC ne marche pas, donc est-ce que tu sais ? ^^'

                • Partager sur Facebook
                • Partager sur Twitter
                  29 mars 2015 à 18:13:38

                  et donc la fonction setup doit être comme ça ?

                  void setup () {
                    Serial.begin(57600); //Démarrage de la communication
                    Wire.begin(); //Démarrage de la librairie wire.h
                    RTC.begin(); //Démarrage de la librairie RTClib.h
                    LiquidCrystal.begin(); //Démarrage de la librairie LiquidCrystal.h
                    Keypad.begin(); //Démarrage de la librairie Keypad.h
                    
                    
                    //Si RTC ne fonctionne pas
                    if (! RTC.isrunning()) {
                      Serial.println("RTC ne fonctionne pas !");
                      
                      }
                        lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 
                        delay(10); 
                    }



                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 mars 2015 à 18:17:20

                    Essayes, tu verras bien ;)

                    En tout cas, je pense que tu vas avoir une erreur sur ces 2 lignes :

                    LiquidCrystal.begin(); //Démarrage de la librairie LiquidCrystal.h
                    Keypad.begin(); //Démarrage de la librairie Keypad.h

                     Je ne sais pas d'où tu les sors mais je n'ai jamais vu l’initialisation de ces lib se faire de cette sorte.



                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 mars 2015 à 18:29:00

                      mais je te dis que je peux pas les tester... >.< y reconnais pas le RTC donc y a tout qui bug
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 mars 2015 à 18:31:20

                        voila les bugs qui me sont afficher :
                        Test_alarme_clavier_lcd:6: error: 'RTC_DS1307' does not name a type
                        Test_alarme_clavier_lcd.ino: In function 'void setup()':
                        Test_alarme_clavier_lcd:11: error: 'RTC' was not declared in this scope
                        Test_alarme_clavier_lcd:12: error: expected unqualified-id before '.' token
                        Test_alarme_clavier_lcd:13: error: expected unqualified-id before '.' token
                        Test_alarme_clavier_lcd:23: error: 'lcd' was not declared in this scope
                        Test_alarme_clavier_lcd.ino: In function 'void loop()':
                        Test_alarme_clavier_lcd:77: error: 'DateTime' was not declared in this scope
                        Test_alarme_clavier_lcd:77: error: expected `;' before 'now'
                        Test_alarme_clavier_lcd:79: error: 'toucheH' was not declared in this scope
                        Test_alarme_clavier_lcd:87: error: 'toucheM' was not declared in this scope
                        Test_alarme_clavier_lcd:98: error: 'now' was not declared in this scope
                        
                        

                        -
                        Edité par melanouille 29 mars 2015 à 18:34:53

                        • Partager sur Facebook
                        • Partager sur Twitter
                          29 mars 2015 à 18:50:58

                          J'ai essayer de changer des choses :

                          #include <Wire.h>
                          #include <RTC.h>
                          #include <LiquidCrystal.h>
                          #include <Keypad.h>
                          
                          RTC_DS1307 RTC;
                          LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
                          
                          void setup () {
                            Serial.begin(57600); //Démarrage de la communication
                            Wire.begin(); //Démarrage de la librairie wire.h
                            RTC.begin(); //Démarrage de la librairie RTClib.h
                            LiquidCrystal.begin(); //Démarrage de la librairie LiquidCrystal.h
                            Keypad.begin(); //Démarrage de la librairie Keypad.h
                            
                            
                            //Si RTC ne fonctionne pas
                            if (! RTC.isrunning()) {
                              Serial.println("RTC ne fonctionne pas !");
                              
                              //Met à l'heure à date à laquelle le sketch est compilé
                              //RTC.adjust(DateTime(__DATE__, __TIME__));
                              }
                                lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 
                                delay(10); 
                            }
                           
                           const byte LIGNES = 4; // 4 lignes
                          const byte COLONNES = 3; //4 colonnes
                          
                          
                          // --- constantes des broches ---
                          
                          const int C3=3; //declaration constante de broche 
                          const int C2=4; //declaration constante de broche 
                          const int C1=5; //declaration constante de broche 
                          const int RS=8; //declaration constante de broche 
                          const int E=9; //declaration constante de broche 
                          const int D4=10; //declaration constante de broche 
                          const int D5=11; //declaration constante de broche 
                          const int D6=12; //declaration constante de broche 
                          const int D7=13; //declaration constante de broche 
                          const int L4=16; //declaration constante de broche 
                          const int L3=17; //declaration constante de broche 
                          const int L2=18; //declaration constante de broche 
                          const int L1=19; //declaration constante de broche 
                          
                          // --- Déclaration des variables globales ---
                          
                          //--- Définition des touches 
                          char touches[LIGNES][COLONNES] = {
                            {'1','2','3'},
                            {'4','5','6'},
                            {'7','8','9'},
                            {'*','0','#'}
                          };
                          
                          // tableaux de lignes et colonnes
                          byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
                          byte BrochesColonnes[COLONNES] = {C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
                          
                          char toucheH; 
                          char toucheM; 
                          
                          Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                          
                            
                          
                           
                          void loop()
                          {
                            
                            //Heure actuel
                            DateTime now = RTC.now();
                            
                          toucheH = clavier.getKey(); // lecture de la touche appuyée
                          
                          if (toucheH != NO_KEY)
                          { // si une touche a été frappée -- gestion de la touche appuyée 
                          
                            if (toucheH=='*')
                           {
                             lcd.print (toucheH, ":");
                             toucheM = clavier.getKey();
                             
                              if (toucheH=='#') lcd.clear(); else lcd.print(toucheH); // efface écran si appui # sinon  affiche touche
                          
                              delay(100);
                            
                              if (toucheM != NO_KEY)
                              {
                                if (toucheM=='*')
                                {
                                    
                                    if(now.hour() == toucheH && now.minute() == toucheM)
                                    {
                          
                                      Serial.println("Declenchement de l'alarme");
                                    //Pas d'alarme
                                    }
                                 
                                    else
                                    {
                                      Serial.println("Pas d'alarme");
                                    }
                                   
                                    delay(1000);
                                }
                              
                                if (touche=='#') lcd.clear(); else lcd.print(touche); // efface écran si appui # sinon  affiche touche
                              
                                delay(100);
                              }
                            }
                          }
                          
                          }

                          et y me donne ces erreurs :

                          Test_alarme_clavier_lcd:6: error: 'RTC_DS1307' does not name a type
                          Test_alarme_clavier_lcd.ino: In function 'void setup()':
                          Test_alarme_clavier_lcd:12: error: 'RTC' was not declared in this scope
                          Test_alarme_clavier_lcd:13: error: expected unqualified-id before '.' token
                          Test_alarme_clavier_lcd:14: error: expected unqualified-id before '.' token
                          Test_alarme_clavier_lcd.ino: In function 'void loop()':
                          Test_alarme_clavier_lcd:74: error: 'DateTime' was not declared in this scope
                          Test_alarme_clavier_lcd:74: error: expected `;' before 'now'
                          Test_alarme_clavier_lcd:95: error: 'now' was not declared in this scope




                          -
                          Edité par melanouille 30 mars 2015 à 14:38:56

                          • Partager sur Facebook
                          • Partager sur Twitter
                            29 mars 2015 à 19:15:51

                            Test_alarme_clavier_lcd:6: error: 'RTC_DS1307' does not name a type

                            Ici, le compilateur t'informe qu'il ne connait pas le type RTC_DS1307.

                            Deux solution possible :

                            - Soit tu as fais une faute d'orthographe dans le nom (ce que je doute)

                            - Soit tu as mal installé la lib ou tu as installé la mauvaise lib

                            Je pencherais plus pour l'option 2, surtout quand je vois #include "RTC.h" alors que les examples sur internet à propos du DS1307 mettent #include "RTClib.h"

                            => Téléchargement de la lib : https://github.com/adafruit/RTClib

                            Toutes les autres erreurs un rapport avec le RTC, elles sont probablement liées.

                            -
                            Edité par lorrio 29 mars 2015 à 19:18:18

                            • Partager sur Facebook
                            • Partager sur Twitter
                              29 mars 2015 à 22:28:51

                              j'ai installé celle que tu as dis, je l'ai renommé RTClib et j'ai mis #include "RTClib.h"  mais ça marche toujours pas, j'ai les même erreurs qui apparaissent :/
                              • Partager sur Facebook
                              • Partager sur Twitter
                                29 mars 2015 à 22:43:26

                                Renommé RTC lib ?

                                Essayes de mettre directement le fichier .cpp et le fichier .h de la lib dans le dossier ton projet.

                                -
                                Edité par lorrio 29 mars 2015 à 22:44:19

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  29 mars 2015 à 22:52:18

                                  j'ai mis tout le dossier RTClib dans le dossier de mon programme

                                  mais ça fonctionne toujours pas :euh:

                                  -
                                  Edité par melanouille 30 mars 2015 à 13:51:27

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    30 mars 2015 à 18:52:49

                                    bon bah même les programmes fournis dans le dossier de RTClib ne fonctionnent pas... c'est vraiment embêtant... :(
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      30 mars 2015 à 19:13:19

                                      Ils ne fonctionnent pas ou ils ne compilent pas ? (ce n'est pas la même chose).

                                      Si ne compilent pas => une copie de l'erreur serait bienvenue (avec le code que tu tests)

                                      Si ne fonctionnent pas => cela vient probablement de ton câblage, quel est-il ?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        30 mars 2015 à 20:19:11

                                        c'est bien la compilation qui ne fonctionne pas...

                                        #include <Wire.h>
                                        #include <RTClib.h>
                                        #include <LiquidCrystal.h>
                                        #include <Keypad.h>
                                        const int controlPin1 = 2;
                                        const int controlPin2 = 3;
                                        const int enablePin = 9;
                                        
                                        RTC_DS1307 RTC;
                                        LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
                                        
                                        void setup () {
                                          Serial.begin(57600); //Démarrage de la communication
                                          Wire.begin(); //Démarrage de la librairie wire.h
                                          RTClib.begin(); //Démarrage de la librairie RTClib.h
                                          LiquidCrystal.begin(); //Démarrage de la librairie LiquidCrystal.h
                                          Keypad.begin(); //Démarrage de la librairie Keypad.h
                                          
                                          
                                          //Si RTC ne fonctionne pas
                                          if (! RTC.isrunning()) {
                                            Serial.println("RTC ne fonctionne pas !");
                                            
                                            //Met à l'heure à date à laquelle le sketch est compilé
                                            //RTC.adjust(DateTime(__DATE__, __TIME__));
                                            }
                                              lcd.begin(20,4); // Initialise le LCD avec 20 colonnes x 4 lignes 
                                              delay(10); 
                                          }
                                         
                                         const byte LIGNES = 4; // 4 lignes
                                        const byte COLONNES = 3; //4 colonnes
                                        
                                        
                                        // --- constantes des broches ---
                                        
                                        const int C3=3; //declaration constante de broche 
                                        const int C2=4; //declaration constante de broche 
                                        const int C1=5; //declaration constante de broche 
                                        const int RS=8; //declaration constante de broche 
                                        const int E=9; //declaration constante de broche 
                                        const int D4=10; //declaration constante de broche 
                                        const int D5=11; //declaration constante de broche 
                                        const int D6=12; //declaration constante de broche 
                                        const int D7=13; //declaration constante de broche 
                                        const int L4=16; //declaration constante de broche 
                                        const int L3=17; //declaration constante de broche 
                                        const int L2=18; //declaration constante de broche 
                                        const int L1=19; //declaration constante de broche 
                                        
                                        // --- Déclaration des variables globales ---
                                        
                                        //--- Définition des touches 
                                        char touches[LIGNES][COLONNES] = {
                                          {'1','2','3'},
                                          {'4','5','6'},
                                          {'7','8','9'},
                                          {'*','0','#'}
                                        };
                                        
                                        // tableaux de lignes et colonnes
                                        byte BrochesLignes[LIGNES] = {L1, L2, L3, L4}; //connexions utilisées pour les broches de lignes du clavier
                                        byte BrochesColonnes[COLONNES] = {C1, C2, C3}; //connexions utilisées pour les broches de colonnes du clavier
                                        
                                        char toucheH; 
                                        char toucheM; 
                                        
                                        Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                        
                                          
                                        
                                         
                                        void loop()
                                        {
                                          
                                          //Heure actuel
                                          DateTime now = RTC.now();
                                          
                                        toucheH = clavier.getKey(); // lecture de la touche appuyée
                                        
                                        if (toucheH != NO_KEY)
                                        { // si une touche a été frappée -- gestion de la touche appuyée 
                                        
                                          if (toucheH=='*')
                                         {
                                           lcd.print (toucheH, ":");
                                           toucheM = clavier.getKey();
                                           
                                            if (toucheH=='#') lcd.clear(); else lcd.print(toucheH); // efface écran si appui # sinon  affiche touche
                                        
                                            delay(100);
                                          
                                            if (toucheM != NO_KEY)
                                            {
                                              if (toucheM=='*')
                                              {
                                                  
                                                  if(now.hour() == toucheH && now.minute() == toucheM)
                                                  {
                                        
                                                    Serial.println("Declenchement de l'alarme");
                                                    digitalWrite(controlPin1, HIGH);
                                                    digitalWrite(controlPin1, LOW);
                                                  //Pas d'alarme
                                                  }
                                               
                                                  else
                                                  {
                                                    Serial.println("Pas d'alarme");
                                                  }
                                                 
                                                  delay(1000);
                                              }
                                            
                                              if (touche=='#') lcd.clear(); else lcd.print(touche); // efface écran si appui # sinon  affiche touche
                                            
                                              delay(100);
                                           }
                                         }
                                        }
                                        
                                        }
                                        Test_alarme_clavier_lcd:9: error: 'RTC_DS1307' does not name a type
                                        Test_alarme_clavier_lcd.ino: In function 'void setup()':
                                        Test_alarme_clavier_lcd:15: error: 'RTClib' was not declared in this scope
                                        Test_alarme_clavier_lcd:16: error: expected unqualified-id before '.' token
                                        Test_alarme_clavier_lcd:17: error: expected unqualified-id before '.' token
                                        Test_alarme_clavier_lcd:21: error: 'RTC' was not declared in this scope
                                        Test_alarme_clavier_lcd.ino: In function 'void loop()':
                                        Test_alarme_clavier_lcd:77: error: 'DateTime' was not declared in this scope
                                        Test_alarme_clavier_lcd:77: error: expected `;' before 'now'
                                        Test_alarme_clavier_lcd:86: error: invalid conversion from 'const char*' to 'int'
                                        Test_alarme_clavier_lcd:86: error: initializing argument 2 of 'size_t Print::print(int, int)'
                                        Test_alarme_clavier_lcd:98: error: 'now' was not declared in this scope
                                        Test_alarme_clavier_lcd:115: error: 'touche' was not declared in this scope
                                        



                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          30 mars 2015 à 21:05:17

                                          Bonsoir,

                                          Visiblement la librairie RTCLib est mal installée, le dossier librairie RTCLib-master a-t'il été renommé en RTCLib ?  comme c'est écrit sur le site  https://github.com/adafruit/RTClib

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            30 mars 2015 à 21:21:59

                                            J'ai fais ce que lorrio ma dis aussi et pourtant rien ne marche...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              30 mars 2015 à 21:47:52

                                              melanouille a écrit:

                                              J'ai fais ce que lorrio ma dis aussi et pourtant rien ne marche...

                                              Je t'ai dis d'essayer de placer directement la lib dans le dossier de ton projet, chose qui marche à tous les coups.

                                              D'ailleurs, je peux t'affirmer que ça marche : voici ton projet qui compile correctement : http://lorrio.fr/sdz/MyTest.zip

                                              Je n'ai pas fais grand chose en plus de ton code ;) :

                                              1/ Mettre le .h et le .cpp de la lib dans le dossier de ton projet (permet de ne pas avoir à installer la lib quand on a la flemme de le faire, ce qui est mon cas pour ce test)

                                              2/ Changer la ligne 2 en : #include "RTClib.h" (quand on n'installe pas une lib, il faut mettre des "" et non des <> pour l'inclucde)

                                              3/ Changer la ligne 15 en : RTC.begin(); (c'est comme ceci qu'il faut initialiser ton RTC)

                                              4/ Supprimer la ligne 16 (ton init de la lib LCD se fait ligne 27 avec lcd.begin(...))

                                              5/ Supprimer la ligne 17 (la lib keypad n'a pas besoin d'être initialisée avec un begin)

                                              6/ Encore une petite retouche ligne 86 et 115 pour corriger les dernières erreurs du compilo qui n'ont rien à voir avec les lib

                                              Au final, cela donne :

                                              Le croquis utilise 7 240 octets (22%) de l'espace de stockage de programmes. Le maximum est de 32 256 octets.
                                              Les variables globales utilisent 630 octets (30%) de mémoire dynamique, ce qui laisse 1 418 octets pour les variables locales. Le maximum est de 2 048 octets.
                                              




                                              -
                                              Edité par lorrio 30 mars 2015 à 21:56:32

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                30 mars 2015 à 22:58:21

                                                Je t'assure que j'ai fais ce que tu as dis... j'ai essayé les 2 manières... mais ça ne fonctionne pas...
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  30 mars 2015 à 23:11:18

                                                  Je t'ai donné le code, tu n'as qu'à le télécharger.

                                                  Si il compile chez moi, il n'y a aucune raison qu'il ne compile pas chez toi.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    31 mars 2015 à 18:38:45

                                                    tu es génial :D !!!

                                                    (même si je comprends pas la différence au niveau de la lib qui fait que ça marchais pas pour mais pour toi si... mais bon )

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      31 mars 2015 à 19:02:08

                                                      maintenant j'ai un problème avec les branchement... apparemment le RTC dois être brancher sur "A4" et "A5" mais mon clavier doit aussi être brancher sur cette partie de l'arduino... j'ai eu une idée mais j'ai peur que ça face tout griller ou quoi...

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        31 mars 2015 à 19:13:54

                                                        Les pins A4/A5 ont plusieurs fonctions :
                                                        - soit en mode I/O
                                                        - soit en mode ANA
                                                        - soit en mode I2C

                                                        Le DS1307 communiquent en I2C donc il est obligé d'utilisé A4/A5 car il n'y a que ces pins qui gèrent le mode I2C.

                                                        Quand à la lib KeyPad (pour clavier), elle utilise les pins en mode I/O.

                                                        Sachant que toutes les pins de l'arduino sont compatible I/O, pourquoi aller s'amuser à connecter le clavier là bas ???


                                                        D'ailleurs, je ne vois même pas pourquoi tu parles de ce conflit alors que ton code nous montre le contraire :

                                                        const byte LIGNES = 4;
                                                        const byte COLONNES = 3;
                                                         
                                                        const int C3=3;
                                                        const int C2=4;
                                                        const int C1=5;
                                                        const int L4=16;
                                                        const int L3=17;
                                                        const int L2=18;
                                                        const int L1=19;
                                                        
                                                        char touches[LIGNES][COLONNES] = {
                                                          {'1','2','3'},
                                                          {'4','5','6'},
                                                          {'7','8','9'},
                                                          {'*','0','#'}
                                                        };
                                                        
                                                        byte BrochesLignes[LIGNES] = {L1, L2, L3, L4};
                                                        byte BrochesColonnes[COLONNES] = {C1, C2, C3};
                                                        
                                                        Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                        

                                                        Avec ce code, tu annonces clairement que le clavier est connecté aux pin 3,4,5,16,17,18 et 19 donc il n'y a pas de conflit avec A4 et A5.

                                                        Regarde bien ton arduino, tu verras qu'il y a une pin 4 ET une pin A4 qui sont totalement indépendante (idem pour la pin 5 qui n'a aucun lien avec la pin A5).

                                                        -
                                                        Edité par lorrio 31 mars 2015 à 19:22:55

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 mars 2015 à 20:28:14

                                                          C’était pas vraiment ça mon problème mais j'ai réussi a le résoudre. 

                                                          Par contre, j'ai tester mon programme sur l'arduino et je me suis rendu compte que ça ne fais pas du tout ceux a quoi je m'attendais... je voulais qu'en tapant 12* 45* il comprenne que l'alarme dois se déclencher a 12H45 (même si, n'ayant pas programmé le RTC, je sais qu'elle ne se déclenchera pas), je pensais que je pourrais au moins taper l'heure voulu...

                                                          -
                                                          Edité par melanouille 31 mars 2015 à 20:29:42

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            31 mars 2015 à 20:58:19

                                                            J'ai presque envie de dire que c'est logique.

                                                            Encore une fois, tu essayes de faire le programme final sans prendre le temps d'analyser comment fonctionne tes composants.

                                                            Je te répète encore une fois : il te faut faire des étapes !


                                                            Mais sinon, voici comment expliquer ton problème :

                                                            Ton code est celui-ci :

                                                            void loop() {
                                                            
                                                                //Heure actuel
                                                                DateTime now = RTC.now();
                                                            
                                                                toucheH = clavier.getKey(); // lecture de la touche appuyée
                                                            
                                                                if (toucheH != NO_KEY) { // si une touche a été frappée -- gestion de la touche appuyée
                                                            
                                                                    if (toucheH == '*') {
                                                                        lcd.print(toucheH, ":");
                                                                        toucheM = clavier.getKey();
                                                            
                                                                        if (toucheH == '#') lcd.clear();
                                                                        else lcd.print(toucheH); // efface écran si appui # sinon  affiche touche
                                                            
                                                                        delay(100);
                                                            
                                                                        if (toucheM != NO_KEY) {
                                                                            if (toucheM == '*') {
                                                            
                                                                                if (now.hour() == toucheH && now.minute() == toucheM) {
                                                            
                                                                                    Serial.println("Declenchement de l'alarme");
                                                                                    digitalWrite(controlPin1, HIGH);
                                                                                    digitalWrite(controlPin1, LOW);
                                                                                    //Pas d'alarme
                                                                                } else {
                                                                                    Serial.println("Pas d'alarme");
                                                                                }
                                                            
                                                                                delay(1000);
                                                                            }
                                                            
                                                                            if (touche == '#') lcd.clear();
                                                                            else lcd.print(touche); // efface écran si appui # sinon  affiche touche
                                                            
                                                                            delay(100);
                                                                        }
                                                                    }
                                                                }
                                                            
                                                            }

                                                            Que je vais simplifier en celui-ci (pour pas avoir trop de ligne) :

                                                            void loop() {
                                                            
                                                                //Heure actuel
                                                                DateTime now = RTC.now();
                                                            
                                                                toucheH = clavier.getKey(); // lecture de la touche appuyée
                                                            
                                                                if (toucheH != NO_KEY) { // si une touche a été frappée -- gestion de la touche appuyée
                                                            
                                                                    if (toucheH == '*') {
                                                                        lcd.print(toucheH, ":");
                                                                        toucheM = clavier.getKey();
                                                            
                                                                        if (toucheH == '#') lcd.clear();
                                                                        else lcd.print(toucheH); // efface écran si appui # sinon  affiche touche
                                                            
                                                                        delay(100);
                                                            
                                                                        if (toucheM != NO_KEY) {
                                                                            [...]
                                                                        }
                                                                    }
                                                                }
                                                            
                                                            }

                                                            Et voici ce qu'il se passe :

                                                            Ton programme tourne en boucle en en scannant toucheH = clavier.getKey();
                                                            A un moment, tu vas appuyer sur une touche donc tu vas entré dans le if (toucheH != NO_KEY) {
                                                            Juste après ce if, on a if (toucheH == '*') { donc pas de chance, si tu as appuyé sur autre chose qu'étoile, il ne se passera rien.
                                                            Disons donc que tu as appuyé sur étoile histoire de continuer les explications.
                                                            Là, tu fais un toucheM = clavier.getKey(); mais quelle est la probabilité que tu ai réussi à appuyé sur une touche de ton clavier à ce moment ?
                                                            Rappelons que l'arduino tourne à 8MHz donc passer un if ne lui prend qu'une fraction de milli secondes.
                                                            Bref, quelle est la probabilité que tu arrives à appuyer sur étoile puis sur une autre touche en si peu de temps ?
                                                            Très certainement une chance sur un milliard donc toucheM = NO_KEY
                                                            Vient ensuite if (toucheH == '#') qui ne sert strictement à rien car pour être à cet endroit, il a fallut passer le if (toucheH == '*') donc toucheH vaut forcément étoile et non dieze
                                                            Du coup, c'est le else qui est exécuté avec lcd.print(toucheH);
                                                            Un petit delay(100), pourquoi pas, ça va faire patienté l'utilisateur
                                                            Et l'on arrive sur if (toucheM != NO_KEY) dans lequel on n'entrera pas car comme dit précédemment, toucheH = NO_KEY
                                                            Fin des if, retour au début du loop, avec toucheH = clavier.getKey();
                                                            Et à partir de là, tu peux relire mon explication depuis le début pour te rendre compte que même si à ce moment là tu appuis sur un chiffre, tu ne repasseras pas le if (toucheH == '*') { donc il ne se passera rien


                                                            -
                                                            Edité par lorrio 31 mars 2015 à 21:01:13

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            arduino

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown