Partage
  • Partager sur Facebook
  • Partager sur Twitter

arduino

actionner un moteur en fonction de l'heure

    9 avril 2015 à 14:31:25

    bon j'ai réussi à faire marcher mon moteur sur un autre ordi, ça fais exactement ce que je veux ^^ .

    Mais comment je fais pour récupérer l'heure programmer par l'utilisateur pour la réutiliser pour exécuter l'action du moteur o_O ?

    • Partager sur Facebook
    • Partager sur Twitter
      9 avril 2015 à 14:43:03

      Serial.available te retourne TRUE si le Serial (lien avec le PC) a reçu une donnée.

      Serial.read te retourne la donnée qu'à envoyer le PC.

      A toi de combiner tout ça avec des if pour en faire ce que tu veux :

      -> Soit l'ignorer

      -> Soit faire une action direct sur un caractère précis

      -> Soit le stocker en mémoire pour l'utiliser plus tard (du genre une fois que le PC à envoyé ENTER).

      Un petit exemple de code tout simple qui allumes la LED de l'arduino lorsque le PC envoie un M.

      void loop() {
      
          // Si le PC a envoyé un caractère
          if ( Serial.available() ) {
      
              // Alors on lit récupère ce caractère
              char c = Serial.read();
      
              // Et si c'est un 'M', alors on allume la LED
              if ( c == 'M' ) {
                  digitalWrite(13, HIGH);
              }
      
          }
      
      }
      



      • Partager sur Facebook
      • Partager sur Twitter
        9 avril 2015 à 14:57:11

        d'accord mais dans le programme que tu m'a montré, c'est pas une action que se fait juste en appuyant sur une touche...

        enum eEtat {
            ATTENTE_ETOILE,
            ATTENTE_DIZAINE,
            ATTENTE_UNITE,
            ATTENTE_ETOILE_M,
            ATTENTE_DIZAINE_M,
            ATTENTE_UNITE_M,
        };
        typedef enum eEtat eEtat;
         
         
        eEtat etatActuel = ATTENTE_ETOILE;
         
         
        void loop(void) {
         
            char key = reccupérerTouche();
         
            if ( key != NO_KEY ) {
         
                switch(etatActuel) {
         
                    case ATTENTE_ETOILE:
         
                        if ( key == '*' ) {
                            etatActuel = ATTENTE_DIZAINE;
                        }
         
                    break;
         
                    case ATTENTE_DIZAINE:
         
                        if ( key >= '0' && key <= '2' ) {
                            toucheD = key;
                            etatActuel = ATTENTE_UNITE;
                        }
                        break;
         
                    case ATTENTE_UNITE:
         
                        if (
                            ( key >= '0' && key <= '9' && toucheD >= '0' && toucheD <= '2' )
                                     ||  
                            ( key >= '0' && key <= '3' && toucheD == '2' )
                            ) {
                            toucheU = key;
                            etatActuel = ATTENTE_ETOILE;
                        }
                        break;
         
                     case ATTENTE_ETOILE:
         
                        if ( key == '*' ) {
                            etatActuel = ATTENTE_DIZAINE_M;
                        }
         
                    break;
         
                    case ATTENTE_DIZAINE_M:
         
                        if ( key >= '0' && key < '6' ) {
                            toucheD = key;
                            etatActuel = ATTENTE_UNITE_M;
                        }
                        break;
         
                    case ATTENTE_UNITE_M:
         
                        if ( key >= '0' && key <= '9' ) {
                            toucheU = key;
                            etatActuel = ATTENTE_ETOILE_M;
                        }
                        break;
         
                }
         
            }
         
        }
        

        Et le truc qui m'empêche de pouvoir comprendre, c'est que le terme qui dois déclencher l'action du moteur, c'est une variable et je comprends pas comment je peu réutiliser un variable comme une constante ^^'

        • Partager sur Facebook
        • Partager sur Twitter
          9 avril 2015 à 15:22:56

          Oula, je mélange les projets moi...

          Ton projet consiste à taper des caractères sur un KeyPad et non sur un clavier de PC relié à l'arduino donc Serial n'a strictement rien à voir là dedans.

          Une fois que tu as appuyé sur toutes tes touches et validé avec étoile ou dieze ou ce que tu veux, ton programme est censé avoir mémorisé tout ça :

          - toucheD : retient la touche des dizaines

          - toucheU : retient la touche des unités

          Il ne te reste alors plus qu'à former un nombre avec ces 2 touches :

          int nbD = ( (int)( toucheD - '0' ) ); // Conversion caractère en nombre (pour les dizaines)
          int nbU = ( (int)( toucheU - '0' ) ); // Conversion caractère en nombre (pour les unités)
          
          int nb = ( ( nbD * 10 ) + nbU ); // Concaténation des 2 nombres (dizaines & unités) en un seul

          A partir de là, la variable nb contiendra donc le nombre pressé.

          Si tu as appuyé sur '1' puis '5', alors nb sera égal au nombre 15.

          -
          Edité par lorrio 9 avril 2015 à 15:25:09

          • Partager sur Facebook
          • Partager sur Twitter
            9 avril 2015 à 18:58:59

            est-ce que je dois pas changer les "uniteD" et "uniteU" en "uniteDM" et "uniteUM" (ou autres) dans la partie des minutes ?

            -
            Edité par melanouille 9 avril 2015 à 19:07:27

            • Partager sur Facebook
            • Partager sur Twitter
              9 avril 2015 à 19:06:57

              Pourquoi tu devrais le faire ?

              Après tout, c'est ton code non ?

              Tu es donc libre de faire ce que tu veux avec.

              Si tu as envie de le faire (ou que tu penses qu'il faut le faire pour que ça marche), alors fais le ;)

              -
              Edité par lorrio 9 avril 2015 à 19:07:07

              • Partager sur Facebook
              • Partager sur Twitter
                9 avril 2015 à 21:59:56

                bon, je l'ai fais ^^

                j'ai essayé de tout assembler et ça donne ça :

                #include <Wire.h>
                #include "RTClib.h"
                #include <LiquidCrystal.h>
                #include <Keypad.h>
                const int controlPin1 = 2;
                const int controlPin2 = 3;
                const int enablePin = 9;
                int Motord = 5 ; 
                int Motorg = 6 ; 
                
                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
                   
                  RTC.adjust(DateTime(__DATE__, "21:40:00"));
                  
                  //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=A0; //declaration constante de broche 
                const int L3=A1; //declaration constante de broche 
                const int L2=A2; //declaration constante de broche 
                const int L1=A3; //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 toucheD;
                char toucheU;
                char toucheDM;
                char toucheUM;
                 
                Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                 
                  pinMode (Motord, OUTPUT);
                  pinMode (Motorg, OUTPUT);
                 
                  
                void loop()
                {
                  
                   DateTime now = RTC.now();
                  Serial.print(now.hour(), DEC);
                  Serial.print(':');
                  Serial.print(now.minute(), DEC);
                  Serial.print(':');
                  Serial.print(now.second(), DEC);
                  Serial.println();
                  delay(3000);
                   
                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
                 enum eEtat {
                    ATTENTE_ETOILE,
                    ATTENTE_DIZAINE,
                    ATTENTE_UNITE,
                    ATTENTE_ETOILE_M,
                    ATTENTE_DIZAINE_M,
                    ATTENTE_UNITE_M,
                };
                typedef enum eEtat eEtat;
                 
                 
                eEtat etatActuel = ATTENTE_ETOILE;
                 
                    char key = reccupérerTouche();
                 
                    if ( key != NO_KEY ) {
                 
                        switch(etatActuel) {
                 
                            case ATTENTE_ETOILE:
                 
                                if ( key == '*' ) {
                                    etatActuel = ATTENTE_DIZAINE;
                                }
                 
                            break;
                 
                            case ATTENTE_DIZAINE:
                 
                                if ( key >= '0' && key <= '2' ) {
                                    toucheD = key;
                                    etatActuel = ATTENTE_UNITE;
                                }
                                break;
                 
                            case ATTENTE_UNITE:
                 
                                if (
                                    ( key >= '0' && key <= '9' && toucheD >= '0' && toucheD <= '2' )
                                             ||  
                                    ( key >= '0' && key <= '3' && toucheD == '2' )
                                    ) {
                                    toucheU = key;
                                    etatActuel = ATTENTE_ETOILE;
                                }
                                break;
                 
                             case ATTENTE_ETOILE:
                 
                                if ( key == '*' ) {
                                    etatActuel = ATTENTE_DIZAINE_M;
                                }
                 
                            break;
                 
                            case ATTENTE_DIZAINE_M:
                 
                                if ( key >= '0' && key < '6' ) {
                                    toucheDM = key;
                                    etatActuel = ATTENTE_UNITE_M;
                                }
                                break;
                 
                            case ATTENTE_UNITE_M:
                 
                                if ( key >= '0' && key <= '9' ) {
                                    toucheUM = key;
                                    etatActuel = ATTENTE_ETOILE_M;
                                }
                                break;
                 
                        }
                        int nbD = ( (int)( toucheD - '0' ) );
                        int nbU = ( (int)( toucheU - '0' ) );
                        
                        int nbH = ( ( nbD * 10 ) + nbU );
                        
                        int nbDM = ( (int)( toucheDM - '0' ) );
                        int nbUM = ( (int)( toucheUM - '0' ) );
                        
                        int nbM = ( ( nbDM * 10 ) + nbUM );
                        
                        if (now.hour() == nbH && now.minute() == nbM) {
                          digitalWrite (Motord, LOW);
                          digitalWrite (Motorg, HIGH);
                          delay (3000);                 
                          digitalWrite (Motorg, LOW);
                          delay (1000);
                          digitalWrite (Motorg, LOW);
                          digitalWrite (Motord, HIGH);  
                          delay (3000);
                          digitalWrite (Motord, LOW);
                          delay (1000); 
                        }
                    }
                 
                }

                est-ce que tu pense qu'y pourrais marcher ? y risque de manquer des choses pour qu'il fonctionne ?

                • Partager sur Facebook
                • Partager sur Twitter
                  10 avril 2015 à 8:21:03

                  Cela devrait marché.

                  Par contre, il serait bien que tes variables touche soit initialisé au début de ton programme parce que sinon, tu risque d'avoir un comportement indéterminé entre le moment où tu lances ton programme et le moment où tu paramètre ta première heure.

                  ======

                  EDIT:

                  Ligne 141 : ce case ligne 141 existe déjà ligne 113 donc ça ne marchera probablement pas.

                  Tu voulais peut-être mettre ATTENTE_ETOILE_M à la place ?

                  -
                  Edité par lorrio 10 avril 2015 à 8:22:57

                  • Partager sur Facebook
                  • Partager sur Twitter
                    10 avril 2015 à 17:06:20

                    voila ^^

                    #include <Wire.h>
                    #include "RTClib.h"
                    #include <LiquidCrystal.h>
                    #include <Keypad.h>
                    const int controlPin1 = 2;
                    const int controlPin2 = 3;
                    const int enablePin = 9;
                    int Motord = 5 ; 
                    int Motorg = 6 ; 
                    
                    char toucheD;
                    char toucheU;
                    char toucheDM;
                    char toucheUM;
                    
                    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
                       
                      RTC.adjust(DateTime(__DATE__, "21:40:00"));
                      
                      //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=A0; //declaration constante de broche 
                    const int L3=A1; //declaration constante de broche 
                    const int L2=A2; //declaration constante de broche 
                    const int L1=A3; //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
                     
                    
                    Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                     
                      pinMode (Motord, OUTPUT);
                      pinMode (Motorg, OUTPUT);
                     
                      
                    void loop()
                    {
                      
                       DateTime now = RTC.now();
                      Serial.print(now.hour(), DEC);
                      Serial.print(':');
                      Serial.print(now.minute(), DEC);
                      Serial.print(':');
                      Serial.print(now.second(), DEC);
                      Serial.println();
                      delay(3000);
                       
                    toucheH = clavier.getKey(); // lecture de la touche appuyée
                     
                    if (toucheD != NO_KEY)
                    { // si une touche a été frappée -- gestion de la touche appuyée
                     enum eEtat {
                        ATTENTE_ETOILE,
                        ATTENTE_DIZAINE,
                        ATTENTE_UNITE,
                        ATTENTE_ETOILE_M,
                        ATTENTE_DIZAINE_M,
                        ATTENTE_UNITE_M,
                        ATTENTE_ETOILE_F,
                    };
                    typedef enum eEtat eEtat;
                     
                     
                    eEtat etatActuel = ATTENTE_ETOILE;
                     
                        char key = reccupérerTouche();
                     
                        if ( key != NO_KEY ) {
                     
                            switch(etatActuel) {
                     
                                case ATTENTE_ETOILE:
                     
                                    if ( key == '*' ) {
                                        etatActuel = ATTENTE_DIZAINE;
                                    }
                     
                                break;
                     
                                case ATTENTE_DIZAINE:
                     
                                    if ( key >= '0' && key <= '2' ) {
                                        toucheD = key;
                                        etatActuel = ATTENTE_UNITE;
                                    }
                                    break;
                     
                                case ATTENTE_UNITE:
                     
                                    if (
                                        ( key >= '0' && key <= '9' && toucheD >= '0' && toucheD <= '2' )
                                                 ||  
                                        ( key >= '0' && key <= '3' && toucheD == '2' )
                                        ) {
                                        toucheU = key;
                                        etatActuel = ATTENTE_ETOILE_M;
                                    }
                                    break;
                     
                                 case ATTENTE_ETOILE_M:
                     
                                    if ( key == '*' ) {
                                        etatActuel = ATTENTE_DIZAINE_M;
                                    }
                     
                                break;
                     
                                case ATTENTE_DIZAINE_M:
                     
                                    if ( key >= '0' && key < '6' ) {
                                        toucheDM = key;
                                        etatActuel = ATTENTE_UNITE_M;
                                    }
                                    break;
                     
                                case ATTENTE_UNITE_M:
                     
                                    if ( key >= '0' && key <= '9' ) {
                                        toucheUM = key;
                                        etatActuel = ATTENTE_ETOILE_H;
                                    }
                                    break;
                     
                            }
                            int nbD = ( (int)( toucheD - '0' ) );
                            int nbU = ( (int)( toucheU - '0' ) );
                            
                            int nbH = ( ( nbD * 10 ) + nbU );
                            
                            int nbDM = ( (int)( toucheDM - '0' ) );
                            int nbUM = ( (int)( toucheUM - '0' ) );
                            
                            int nbM = ( ( nbDM * 10 ) + nbUM );
                            
                            if (now.hour() == nbH && now.minute() == nbM) {
                              digitalWrite (Motord, LOW);
                              digitalWrite (Motorg, HIGH);
                              delay (3000);                 
                              digitalWrite (Motorg, LOW);
                              delay (1000);
                              digitalWrite (Motorg, LOW);
                              digitalWrite (Motord, HIGH);  
                              delay (3000);
                              digitalWrite (Motord, LOW);
                              delay (1000); 
                            }
                        }
                     
                    }
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 avril 2015 à 17:51:59

                      J'aime bien cette ligne moi (surtout le commentaire qui va avec) :

                      const byte COLONNES = 3; //4 colonnes

                      -
                      Edité par lorrio 10 avril 2015 à 17:52:21

                      • Partager sur Facebook
                      • Partager sur Twitter
                        10 avril 2015 à 20:17:23

                        En fait je m'étais aidé d'un programme déjà fait pour cette partie et j'avais oublié de changé le commentaire ^^'
                        • Partager sur Facebook
                        • Partager sur Twitter
                          10 avril 2015 à 22:01:55

                          Est-ce que tu sais comment on programme un flexiforce ? J'ai beau cherché sur Internet des explications, tout est en anglais et je comprends pas tout même avec la traduction ^^‘
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 avril 2015 à 22:10:27

                            D'après google : flexiforce est une marque de capteur de force et/ou pression.

                            Alors soit google dit n'importe quel, soit il va falloir qu'on m'explique quelque chose parce qu'un capteur, ça ne se programme pas...

                            En tout cas pour moi, un capteur ne se programme pas mais s'exploite avec des opérations du genre :
                            1/ Lire une tension analogique que le capteur fournie
                            2/ En déduire la valeur de la grandeur physique mesurée

                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 avril 2015 à 23:05:55

                              C'est ça que je veux faire ! Pouvoir lire des tensions et réutiliser les valeurs. 

                              Ce que je voulais dire c'est que je voudrais faire un programme qui utilise le flexiforce

                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 avril 2015 à 11:36:15

                                Là, il te faudrait faire des recherches sur comment utiliser ce genre de capteur.

                                Généralement, la plupart des capteurs de force (espérons que ce soit le cas de ton flexiforce) sont des jauges de contraintes.

                                Le capteur est en réalité une résistance qui varie très faiblement en fonction des déformations.

                                Il existe plusieurs types : http://www2.ac-lyon.fr/etab/lycees/lyc-69/descartes/IMG/pdf/Dylan_Lea_3_-_jauge.pdf

                                Suivant le type du capteur, il faut donc ajouter d'autres résistances ou non.

                                La mesure du capteur se fait ensuite en mesurant une tension très faible (quelques mV) que l'arduino ne peut pas mesurer directement.

                                Il faut donc forcément un AOP pour amplifier et un minimum de composants autours.

                                Vient ensuite l'étape de la linéarisation car la mesure n'est généralement pas proportionnelle à l'effort que subit le capteur.

                                Bref, bon courage.

                                Un cours ultra complet qui explique tout en détaille (mais niveau BAC+2) : http://perso.esiee.fr/~poulichp/Conditionnmentdesignal/cours_conditionnement.pdf

                                -
                                Edité par lorrio 11 avril 2015 à 11:36:28

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 avril 2015 à 21:29:55

                                  j'ai fais ça pour le flexiforce, est-ce que ça peut marcher ?

                                  void setup() 
                                  {
                                    // Start serial at 9600 baud
                                    Serial.begin(9600); 
                                  }
                                  
                                      void loop() 
                                  {
                                    // Read the input on analog pin 0:
                                    int sensorValue = analogRead(A0);
                                    
                                    // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
                                    
                                    float voltage = sensorValue * (5.0 / 1023.0);
                                      
                                          if (now.hour() == nbH && now.minute() == nbM) {
                                            if (float voltage >= 1.36){
                                              delay(300)
                                            }
                                            else {
                                            digitalWrite (Motord, LOW);
                                            digitalWrite (Motorg, HIGH);
                                            delay (3000);                
                                            digitalWrite (Motorg, LOW);
                                            delay (1000);
                                            digitalWrite (Motorg, LOW);
                                            digitalWrite (Motord, HIGH); 
                                            delay (3000);
                                            digitalWrite (Motord, LOW);
                                            delay (1000);
                                            }
                                            
                                    delay(100);
                                  }



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 avril 2015 à 21:38:34

                                    Tout dépend de comment tu raccordes le capteur à ton arduino.

                                    Là, tu fais simplement une mesure de tension sur la pin analogique A0.

                                    - Si la tension est supérieure à 1.36V : le moteur ne tourne pas

                                    - Si la tension est inférieur à 1.36V (et que le RTC donne une heure précise), alors on peut supposer que le moteur tourne.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 avril 2015 à 16:44:21

                                      c'est exactement ce que je veux faire ^^

                                      merci beaucoup, je vais essayer de tout faire marcher maintenant ^^

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 avril 2015 à 16:50:24

                                        Sauf que j'ai bien insisté sur le fait que ça dépend comment tu as fais ton câblage.

                                        Si tu t'es simplement contenté de brancher directement ton capteur et ton moteur à l'arduino, sans mettre aucun autres composants, ça ne marchera pas.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          17 avril 2015 à 16:58:01

                                          oui mais là je te montre seulement une partie du programme, comme tu m'as dis au début, je fait morceau par morceau ^^

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            23 avril 2015 à 19:20:12

                                            bon bah ça marche pas en fait, j'ai tout ça comme message d'erreur mais je comprends pas pck certaines erreurs sont pas sur mon programme du moteur alors que c'est sur ces parties du programme qui a des erreurs...

                                            Programme_complet:77: error: expected constructor, destructor, or type conversion before '(' token
                                            Programme_complet:78: error: expected constructor, destructor, or type conversion before '(' token
                                            Programme_complet.ino: In function 'void loop()':
                                            Programme_complet:111: error: 'reccupererTouche' was not declared in this scope
                                            Programme_complet:145: error: duplicate case value
                                            Programme_complet:117: error: previously used here
                                            Programme_complet:185: error: expected primary-expression before 'float'
                                            Programme_complet:185: error: expected `)' before 'float'
                                            Programme_complet:187: error: expected `;' before '}' token
                                            Programme_complet:203: error: expected `}' at end of input
                                            Programme_complet:203: error: expected `}' at end of input
                                            



                                            -
                                            Edité par melanouille 23 avril 2015 à 19:30:38

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              23 avril 2015 à 20:18:36

                                              Sans le code associé, je crois que ça va être compliqué d'expliquer l'origine de ces erreurs ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                25 avril 2015 à 13:50:11

                                                désolé ^^'
                                                #include <Wire.h>
                                                #include "RTClib.h"
                                                #include <LiquidCrystal.h>
                                                #include <Keypad.h>
                                                
                                                const int controlPin1 = 2;
                                                const int controlPin2 = 3;
                                                const int enablePin = 9;
                                                
                                                int Motord = 5 ; 
                                                int Motorg = 6 ; 
                                                
                                                char toucheD;
                                                char toucheU;
                                                char toucheDM;
                                                char toucheUM;
                                                
                                                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
                                                   
                                                  RTC.adjust(DateTime(__DATE__, "21:40:00"));
                                                  
                                                  //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=7; //declaration constante de broche 
                                                const int L3=A1; //declaration constante de broche 
                                                const int L2=A2; //declaration constante de broche 
                                                const int L1=A3; //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
                                                 
                                                
                                                Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                 
                                                  pinMode (Motord, OUTPUT);
                                                  pinMode (Motorg, OUTPUT);
                                                
                                                  
                                                void loop()
                                                {
                                                  
                                                   DateTime now = RTC.now();
                                                  Serial.print(now.hour(), DEC);
                                                  Serial.print(':');
                                                  Serial.print(now.minute(), DEC);
                                                  Serial.print(':');
                                                  Serial.print(now.second(), DEC);
                                                  Serial.println();
                                                  delay(3000);
                                                   
                                                toucheD = clavier.getKey(); // lecture de la touche appuyée
                                                 
                                                if (toucheD != NO_KEY)
                                                { // si une touche a été frappée -- gestion de la touche appuyée
                                                 enum eEtat {
                                                    ATTENTE_ETOILE,
                                                    ATTENTE_DIZAINE,
                                                    ATTENTE_UNITE,
                                                    ATTENTE_ETOILE_M,
                                                    ATTENTE_DIZAINE_M,
                                                    ATTENTE_UNITE_M,
                                                    ATTENTE_ETOILE_F,
                                                };
                                                typedef enum eEtat eEtat;
                                                 
                                                 
                                                eEtat etatActuel = ATTENTE_ETOILE;
                                                 
                                                    char key = reccupererTouche();
                                                 
                                                    if ( key != NO_KEY ) {
                                                 
                                                        switch(etatActuel) {
                                                 
                                                            case ATTENTE_ETOILE:
                                                 
                                                                if ( key == '*' ) {
                                                                    etatActuel = ATTENTE_DIZAINE;
                                                                }
                                                 
                                                            break;
                                                 
                                                            case ATTENTE_DIZAINE:
                                                 
                                                                if ( key >= '0' && key <= '2' ) {
                                                                    toucheD = key;
                                                                    etatActuel = ATTENTE_UNITE;
                                                                }
                                                                break;
                                                 
                                                            case ATTENTE_UNITE:
                                                 
                                                                if (
                                                                    ( key >= '0' && key <= '9' && toucheD >= '0' && toucheD <= '2' )
                                                                             ||  
                                                                    ( key >= '0' && key <= '3' && toucheD == '2' )
                                                                    ) {
                                                                    toucheU = key;
                                                                    etatActuel = ATTENTE_ETOILE;
                                                                }
                                                                break;
                                                 
                                                             case ATTENTE_ETOILE:
                                                 
                                                                if ( key == '*' ) {
                                                                    etatActuel = ATTENTE_DIZAINE_M;
                                                                }
                                                 
                                                            break;
                                                 
                                                            case ATTENTE_DIZAINE_M:
                                                 
                                                                if ( key >= '0' && key < '6' ) {
                                                                    toucheDM = key;
                                                                    etatActuel = ATTENTE_UNITE_M;
                                                                }
                                                                break;
                                                 
                                                            case ATTENTE_UNITE_M:
                                                 
                                                                if ( key >= '0' && key <= '9' ) {
                                                                    toucheUM = key;
                                                                    etatActuel = ATTENTE_ETOILE_M;
                                                                }
                                                                break;
                                                 
                                                        }
                                                        int nbD = ( (int)( toucheD - '0' ) );
                                                        int nbU = ( (int)( toucheU - '0' ) );
                                                        
                                                        int nbH = ( ( nbD * 10 ) + nbU );
                                                        
                                                        int nbDM = ( (int)( toucheDM - '0' ) );
                                                        int nbUM = ( (int)( toucheUM - '0' ) );
                                                        
                                                        int nbM = ( ( nbDM * 10 ) + nbUM );
                                                        
                                                        int sensorValue = analogRead(A0);
                                                        
                                                        float voltage = sensorValue * (5.0 / 1023.0);
                                                        
                                                        if (now.hour() == nbH && now.minute() == nbM) {
                                                          if (float voltage >= 1.36){
                                                            delay(300)
                                                          }
                                                          else {          
                                                          digitalWrite (Motord, LOW);
                                                          digitalWrite (Motorg, HIGH);
                                                          delay (3000);                 
                                                          digitalWrite (Motorg, LOW);
                                                          delay (1000);
                                                          digitalWrite (Motorg, LOW);
                                                          digitalWrite (Motord, HIGH);  
                                                          delay (3000);
                                                          digitalWrite (Motord, LOW);
                                                          delay (1000); 
                                                        }
                                                      delay(100);
                                                    }
                                                 
                                                }

                                                -
                                                Edité par melanouille 25 avril 2015 à 13:51:02

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  25 avril 2015 à 16:57:21

                                                  Alors, faisons ces erreurs dans l'ordre.


                                                  Ligne 77 et 78 : ces 2 lignes n'ont strictement rien à faire là.

                                                  Un code à exécuter doit se trouver à l’intérieur d'une fonction et non dans l'espace global.

                                                  Étant donné que ces 2 lignes sont des initialisations, elles devraient être dans la fonction setup.


                                                  Ligne 111 : tu appel une fonction reccupererTouche qui n'existe pas alors forcément, le compilateur gueule un peu.

                                                  Pour récupérer l'état d'une touche d'un keypad, il me semble que c'est keypad.getKey() ou un truc du genre.


                                                  Ligne 145 : cette case ATTENTION_ETOILE a déjà été définie (ligne 117) donc là encore, le compilateur n'aime pas trop.


                                                  Ligne 185 : ce mot clef "float" n'a rien à faire là.


                                                  -
                                                  Edité par lorrio 25 avril 2015 à 16:58:36

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    25 avril 2015 à 21:42:58

                                                    j'ai tout corrigé mais je sais pas du tout pour le récupererTouche parce que j'ai essayé ça mais ça marche pas... 

                                                    char key = keypad.getKey();



                                                    -
                                                    Edité par melanouille 25 avril 2015 à 21:44:21

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      25 avril 2015 à 23:06:50

                                                      Tu devrais prendre le temps de relire et comprendre ton codes.

                                                      Récupérer une touche sur le keypad, tu l'as déjà fais ;)

                                                      melanouille a écrit:

                                                      [...]
                                                      
                                                      Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                      
                                                      [...]
                                                      
                                                      toucheH = clavier.getKey(); // lecture de la touche appuyée
                                                      
                                                      [...]
                                                      
                                                      
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        26 avril 2015 à 13:17:05

                                                        ça y est j'ai plus aucune erreur !!! merci beaucouuuuup ^^
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          12 mai 2015 à 12:31:40

                                                          bon, j'ai enfin réussi a rentrer le programme dans l'arduino, mais ça ne marche pas, j''ai vérifié si le clavier et le lcd marchais avec un autre programme et ils fonctionnent alors que dans mon programme final, ils ne marchent pas lorsque l'on essaye décrire l'heure a laquelle on veut que la litière de mette en marche. Jai essayer de rajouter des choses pour vérifier a quel moment plus rien ne marche :

                                                          #include <Wire.h>
                                                          #include "RTClib.h"
                                                          #include <LiquidCrystal.h>
                                                          #include <Keypad.h>
                                                          
                                                          const int controlPin1 = 2;
                                                          const int controlPin2 = 3;
                                                          const int enablePin = 9;
                                                          
                                                          int Motord = 5 ; 
                                                          int Motorg = 6 ; 
                                                          
                                                          char toucheD;
                                                          char toucheU;
                                                          char toucheDM;
                                                          char toucheUM;
                                                          char touche;
                                                          char key;
                                                          
                                                          
                                                          RTC_DS1307 RTC;
                                                          
                                                            
                                                          const byte LIGNES = 4; // 4 lignes
                                                          const byte COLONNES = 3; //4 colonnes
                                                           
                                                           
                                                          // --- constantes des broches ---
                                                           
                                                          const int C3=2; //declaration constante de broche
                                                          const int C2=3; //declaration constante de broche
                                                          const int C1=4; //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=7; //declaration constante de broche 
                                                          const int L3=A1; //declaration constante de broche 
                                                          const int L2=A2; //declaration constante de broche 
                                                          const int L1=A3; //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
                                                           
                                                          LiquidCrystal lcd(8,9,10,11,12,13);
                                                          
                                                          Keypad clavier = Keypad( makeKeymap(touches), BrochesLignes, BrochesColonnes, LIGNES, COLONNES );
                                                          
                                                          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
                                                             
                                                                lcd.begin(16,2); // Initialise le LCD avec 16 colonnes x 2 lignes
                                                                delay(10);
                                                                
                                                                lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
                                                                delay(2000); // pause de 2 secondes
                                                          
                                                                lcd.clear(); // // efface écran et met le curseur en haut à gauche
                                                                delay(10); // pour laisser temps effacer écran
                                                                
                                                                while(touche != '5'){
                                                                  touche = clavier.getKey();
                                                                  if (touche != NO_KEY){
                                                                  lcd.print(touche);}
                                                                }
                                                             lcd.clear();
                                                             lcd.print("touche appuye");
                                                             delay(2000); // pause de 2 secondes
                                                          
                                                                lcd.clear(); // // efface écran et met le curseur en haut à gauche
                                                                delay(10); // pour laisser temps effacer écran
                                                                
                                                            RTC.adjust(DateTime("Mai 11 2015", "15:20:00"));
                                                           
                                                           
                                                          
                                                            //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);
                                                                
                                                                lcd.print("LCD OK") ; // affiche la chaîne texte - message de test
                                                                delay(2000); // pause de 2 secondes
                                                          
                                                                lcd.clear(); // // efface écran et met le curseur en haut à gauche
                                                                delay(10); // pour laisser temps effacer écran
                                                          
                                                                  pinMode (Motord, OUTPUT);
                                                                  pinMode (Motorg, OUTPUT);
                                                            }
                                                          
                                                            
                                                          void loop()
                                                          {
                                                            
                                                            DateTime now = RTC.now();
                                                            Serial.print(now.hour(), DEC);
                                                            Serial.print(':');
                                                            Serial.print(now.minute(), DEC);
                                                            Serial.print(':');
                                                            Serial.print(now.second(), DEC);
                                                            Serial.println();
                                                            delay(3000);
                                                             
                                                          toucheD = clavier.getKey(); // lecture de la touche appuyée
                                                           
                                                          if (toucheD != NO_KEY)
                                                          { // si une touche a été frappée -- gestion de la touche appuyée
                                                           enum eEtat {
                                                              ATTENTE_ETOILE,
                                                              ATTENTE_DIZAINE,
                                                              ATTENTE_UNITE,
                                                              ATTENTE_ETOILE_M,
                                                              ATTENTE_DIZAINE_M,
                                                              ATTENTE_UNITE_M,
                                                              ATTENTE_ETOILE_F,
                                                          };
                                                          typedef enum eEtat eEtat;
                                                           
                                                           
                                                          eEtat etatActuel = ATTENTE_ETOILE;
                                                           
                                                              key = clavier.getKey();
                                                           
                                                              if ( key != NO_KEY ) {
                                                           
                                                                  switch(etatActuel) {
                                                           
                                                                      case ATTENTE_ETOILE:
                                                           
                                                                          if ( key == '*' ) {
                                                                              etatActuel = ATTENTE_DIZAINE;
                                                                          }
                                                           
                                                                      break;
                                                           
                                                                      case ATTENTE_DIZAINE:
                                                           
                                                                          if ( key >= '0' && key <= '2' ) {
                                                                              toucheD = key;
                                                                              etatActuel = ATTENTE_UNITE;
                                                                          }
                                                                          break;
                                                           
                                                                      case ATTENTE_UNITE:
                                                           
                                                                          if (
                                                                              ( key >= '0' && key <= '9' && toucheD >= '0' && toucheD <= '2' )
                                                                                       ||  
                                                                              ( key >= '0' && key <= '3' && toucheD == '2' )
                                                                              ) {
                                                                              toucheU = key;
                                                                              etatActuel = ATTENTE_ETOILE;
                                                                          }
                                                                          break;
                                                           
                                                                       case ATTENTE_ETOILE_M:
                                                           
                                                                          if ( key == '*' ) {
                                                                              etatActuel = ATTENTE_DIZAINE_M;
                                                                          }
                                                           
                                                                      break;
                                                           
                                                                      case ATTENTE_DIZAINE_M:
                                                           
                                                                          if ( key >= '0' && key < '6' ) {
                                                                              toucheDM = key;
                                                                              etatActuel = ATTENTE_UNITE_M;
                                                                          }
                                                                          break;
                                                           
                                                                      case ATTENTE_UNITE_M:
                                                           
                                                                          if ( key >= '0' && key <= '9' ) {
                                                                              toucheUM = key;
                                                                              etatActuel = ATTENTE_ETOILE_F;
                                                                          }
                                                                          break;
                                                           
                                                                  }
                                                                  int nbD = ( (int)( toucheD - '0' ) );
                                                                  int nbU = ( (int)( toucheU - '0' ) );
                                                                  
                                                                  int nbH = ( ( nbD * 10 ) + nbU );
                                                                  
                                                                  int nbDM = ( (int)( toucheDM - '0' ) );
                                                                  int nbUM = ( (int)( toucheUM - '0' ) );
                                                                  
                                                                  int nbM = ( ( nbDM * 10 ) + nbUM );
                                                                  
                                                                  int sensorValue = analogRead(A0);
                                                                  
                                                                  float voltage = sensorValue * (5.0 / 1023.0);
                                                                  
                                                                  if (now.hour() == nbH && now.minute() == nbM) {
                                                                    if (voltage >= 1.36){
                                                                      delay(300);
                                                                    }
                                                                    else {          
                                                                    digitalWrite (Motord, LOW);
                                                                    digitalWrite (Motorg, HIGH);
                                                                    delay (3000);                 
                                                                    digitalWrite (Motorg, LOW);
                                                                    delay (1000);
                                                                    digitalWrite (Motorg, LOW);
                                                                    digitalWrite (Motord, HIGH);  
                                                                    delay (3000);
                                                                    digitalWrite (Motord, LOW);
                                                                    delay (1000); 
                                                                  }
                                                                delay(100);
                                                              }
                                                           
                                                          }
                                                          }
                                                          }



                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            12 mai 2015 à 13:28:47

                                                            Est-ce vraiment voulu de lire 2 fois la touche appuyée ? (une fois ligne 125, une autre fois ligne 143)

                                                            Faire des copié/collé, c'est pratique mais ça crée aussi de nombreux problèmes.

                                                            -
                                                            Edité par lorrio 12 mai 2015 à 13:29:28

                                                            • 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