[Arduino] Question d'un debutant.
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 41

[Arduino] Question d'un debutant.



  1. #1
    naudnaud

    [Arduino] Question d'un debutant.


    ------

    Coucou à tous !

    Je me lance dans la programmation arduino.
    J'ai donc un arduino uno R3, avec une shield lcd + boutons.

    J'ai juste un petit problème que je n'arrive pas à comprendre.

    La fonction void loop, et-elle bien toujours exécuter ? on dirait qu'elle arrête de marcher dès que je suis dans le void menu.
    Voila mon code, pour le moment je cherche a crée un menu simple.


    Code:
    // include the library code:
    #include <LiquidCrystal.h>
    
    // Lcd + pinout
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    
    #define  AnalogBtnPin A0
    int AnalogBtn =0;
    int ButtonUP =0;
    int ButtonDOWN =0;
    int ButtonLEFT =0;
    int ButtonRIGHT =0;
    int ButtonSELECT =0;
    
    
    void setup() {
    
      lcd.begin(16, 2);
      lcd.setCursor(4, 0);
      lcd.print("Bienvenue");
      lcd.setCursor(5, 1);
      lcd.print("Welcome");
      delay(2000);
      lcd.clear();
      
      menu(); // renvoie vers menu
    }
      
    
    
    void loop() {
      // Lectur boutons
       AnalogBtn = analogRead(AnalogBtnPin);
     
      if(AnalogBtn >= 90 &&  AnalogBtn <= 110)
      { ButtonUP +=1;}
      if(AnalogBtn >= 247 &&  AnalogBtn <= 267)
      {ButtonDOWN +=1;}
      if(AnalogBtn >= 399 &&  AnalogBtn <= 419)
      {ButtonLEFT +=1;}
      if(AnalogBtn >= 0 &&  AnalogBtn <= 10)
      { ButtonRIGHT +=1;}
      if(AnalogBtn >= 630 &&  AnalogBtn <= 650)
      { ButtonSELECT +=1;}
    
    if (AnalogBtn == 1023)
       {lcd.clear();
      AnalogBtn =0;
      ButtonUP =0;
      ButtonDOWN =0;
      ButtonLEFT =0;
      ButtonRIGHT =0;
      ButtonSELECT =0;}
       
       
    /*  
    // Test boutons
    if (ButtonUP == 1 )
    {lcd.setCursor(5,1);
    lcd.print("UP");}
    
    if (ButtonDOWN == 1 )
    {lcd.setCursor(5,1);
    lcd.print("DOWN");}
    
    if (ButtonLEFT == 1 )
    {lcd.setCursor(5,1);
    lcd.print("LEFT");}
    
    if (ButtonRIGHT == 1 )
    {lcd.setCursor(5,1);
    lcd.print("RIGHT");}
    
    if (ButtonSELECT == 1 )
    {menu();}
    */
    }  //fin loop
    
    
    void menu(){
    lcd.clear();
      lcd.setCursor(6, 0 );
      lcd.write("MENU");
      delay (1500);
      lcd.clear();
      while (1) {
          lcd.setCursor(0, 0 );lcd.write("Choix 1 --> UP");
          lcd.setCursor(0, 1 );lcd.write("Choix 2 --> Down");
          if (ButtonUP == 1 )  {choix1();}      //renvoie vers choix1 si boutons UP appuyé
          if (ButtonDOWN == 1 ){choix2();}  //renvoie vers choix2 si boutons DOWN appuyé
      }
        lcd.clear();
    }
    
    
    void choix1(){
    lcd.clear();
      lcd.setCursor(6, 0 );
      lcd.write("Choix 1");
      }
    
    void choix2(){
    lcd.clear();
      lcd.setCursor(6, 0 );
      lcd.write("Choix 2");
      }
    Merci de votre aide !!!!!

    -----

  2. #2
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    étant donné le "while(1) dans la fonction menu, je ne vois pas comment tu vas pouvoir terminer cette fonction et du coup la fonction setup ne se terminera jamais non plus.
    En conséquence, tu n'exécuteras jamais la fonction loop.

    A+

  3. #3
    naudnaud

    Re : [Arduino] Question d'un debutant.

    Il faut donc que j’appelle ma fonction menu dans la fonction loop ? et que je remplace le while(1) ?
    Dernière modification par naudnaud ; 05/08/2014 à 16h15.

  4. #4
    azad

    Re : [Arduino] Question d'un debutant.

    Salut
    Pas tout à fait d'accord : la boucle while (1) n'est pas gênante puisque l'on y teste l'état des bouton Up et Down, ce qui permet de sortir de la boucle. Le problème est qu'en sortir conduit à l'une des routines choix1 ou choix2 et qu'une fois ces routines achevées, on retourne à la fonction appelante, c'est à dire dans le fameux while(1).
    C'est donc dans ces routines choix1 ou choix2 qu'il faut agir pour accéder à la convoitée loop()

  5. A voir en vidéo sur Futura
  6. #5
    naudnaud

    Re : [Arduino] Question d'un debutant.

    le seul problème est que ma gestion des boutons (5 boutons sur une entrée A0) et gérer dans la loop.
    Si la Loop ne tourne pas, mes boutons ne marche pas, et si mes boutons ne marche pas, le while(1) ne sera jamais bon.

    En gros, je souhaite juste crée un message d'accueille, déboucher sur un menu choix (choix 1 et choix 2 )
    Et chaque choix et sont propre programme.

    Si je fait mon appelle menu dans la loop, sa marchera ?

    J'ai pour habitude de programmer en ladder, du coup le langage arduino me parait un peu bizarre pour moi ^^

    Merci de votre aide !

  7. #6
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    Citation Envoyé par azad Voir le message
    Salut
    Pas tout à fait d'accord : la boucle while (1) n'est pas gênante puisque l'on y teste l'état des bouton Up et Down, ce qui permet de sortir de la boucle.
    Je n'ai pas dit qu'il n'y avait pas de solution, j'ai juste pointé d'où venait le problème.

    Si je fait mon appelle menu dans la loop, sa marchera ?
    Tout dépend de ce que tu y mets.
    Il y a un truc qui me semble bizarre dans ta fonction menu:
    Code:
      while (1) {
          lcd.setCursor(0, 0 );lcd.write("Choix 1 --> UP");
          lcd.setCursor(0, 1 );lcd.write("Choix 2 --> Down");
          if (ButtonUP == 1 )
               {choix1();}      //renvoie vers choix1 si boutons UP appuyé
          if (ButtonDOWN == 1 )
               {choix2();}  //renvoie vers choix2 si boutons DOWN appuyé
      }
    Comment veux-tu sortir de la boucle puisque les variables ButtonUP et ButtonDOWN ne sont jamais modifiées? Le minimum est d'effectuer une nouvelle lecture des entrées à chaque tour de la boucle
    Ensuite, pour sortir de la boucle une fois un bouton appuyé, il suffit de sortir directement de la fonction en ajoutant un return. Exemple:
    Code:
    if (ButtonUP == 1 )
    {
        choix1();
        return;
    }

  8. #7
    naudnaud

    Re : [Arduino] Question d'un debutant.

    les variables ButtonUP et ButtonDOWN sont lu et modifié dans la loop.
    Et je croit que mon problème et la, ma lecture des boutons se fait par le programme dans la loop:
    Si la loop et pas chargé, les valeurs des boutons ne seront jamais faite.

    Code:
    // Lectur boutons
       AnalogBtn = analogRead(AnalogBtnPin);
     
      if(AnalogBtn >= 90 &&  AnalogBtn <= 110)
      { ButtonUP +=1;}
      if(AnalogBtn >= 247 &&  AnalogBtn <= 267)
      {ButtonDOWN +=1;}
      if(AnalogBtn >= 399 &&  AnalogBtn <= 419)
      {ButtonLEFT +=1;}
      if(AnalogBtn >= 0 &&  AnalogBtn <= 10)
      { ButtonRIGHT +=1;}
      if(AnalogBtn >= 630 &&  AnalogBtn <= 650)
      { ButtonSELECT +=1;}
    
    if (AnalogBtn == 1023)
       {lcd.clear();
      AnalogBtn =0;
      ButtonUP =0;
      ButtonDOWN =0;
      ButtonLEFT =0;
      ButtonRIGHT =0;
      ButtonSELECT =0;}
    Pour le return, je connaissais pas, merci je le note !

  9. #8
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    les variables ButtonUP et ButtonDOWN sont lu et modifié dans la loop.
    Et je croit que mon problème et la, ma lecture des boutons se fait par le programme dans la loop:
    Si la loop et pas chargé, les valeurs des boutons ne seront jamais faite.
    Tu as tout compris

  10. #9
    naudnaud

    Re : [Arduino] Question d'un debutant.

    cool, je comprend petit à petit.

    Du coup une idée de comment faire mon menu avec mes boutons sur l’entrée A0 ?
    Je sort la programme qui gère mes boutons en dehors de la loop ?

  11. #10
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    le programme "normal" doit se trouver dans la fonction loop.
    La fonction setup, comme son nom l'indique, est faite pour les initialisations, donc une fois pour toutes.

  12. #11
    naudnaud

    Re : [Arduino] Question d'un debutant.

    coucou

    J'ai compris, j'ai réussi a faire mon menu.
    Il marche parfaitement.

    Ma deuxième étape, et de faire un décompte de temps (type timer de cuisine), mais avec la possibilité de choisir le nombre de min.

    J'ai compris de prend un int minutes , et de l’incrémenter de 1 à chaque appuie sur un de mes boutons.
    Problème: minutes++ sa incrémente a chaque loop de l'arduino, du coup sa marche pas comme je veut.
    J'ai tester un minutes + 1 mais sa ne marche pas non plus -_-


    Merci de votre aide

  13. #12
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    J'ai compris de prend un int minutes , et de l’incrémenter de 1 à chaque appuie sur un de mes boutons.
    Problème: minutes++ sa incrémente a chaque loop de l'arduino, du coup sa marche pas comme je veut.
    J'ai tester un minutes + 1 mais sa ne marche pas non plus -_-
    Je ne comprends rien. Quelle idée d'incrémenter des minutes en appuyant sur un bouton? Les minutes doivent s'incrémenter à chaque fois qu'il se passe une minute. Il faut donc gérer le temps et pas l'appui sur un bouton.

  14. #13
    naudnaud

    Re : [Arduino] Question d'un debutant.

    c'est pour régler mon compte à rebours
    Un boutons pour incrémenter mes minutes, et un pour lancer le compte à rebours.

  15. #14
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    Un boutons pour incrémenter mes minutes
    Ah oui, pour préparer la valeur initiale du compte à rebour.

    Il faudrait voir comment tu gères ton BP, mais je crois que ton problème est un grand classisue: il ne faut pas détecter uniquement l'état appuyé du BP, mais le changement d'état. En effet la boucle s'exécute très rapidement et lorsque tu appuies sur le BP, la boucle a le temps de faire plusieurs tours.

    Il faut donc détecter l'appui, puis le relâchement du BP avant d'incrémenter les minutes

  16. #15
    naudnaud

    Re : [Arduino] Question d'un debutant.

    dac, il me faut un front montant donc.

    Je vais me renseigner dessus, je reviens ici si je comprend pas tout

    merci

  17. #16
    naudnaud

    Re : [Arduino] Question d'un debutant.

    Coucou

    J'ai réussi à créer mon front montant.
    A écrire/lire ma valeur Minutes dans l'eeprom de la carte et à créer mon décompte.

    Me reste un petit problème:
    Lorsque les seconde décompte, une fois arrivés à moins de 10, sa affiche les seconde dans l'ordre ci dessous:

    12
    11
    10
    90
    80
    70
    60
    etc...

    Comment lui faire bien afficher mes secondes ?

    Sa me le fait aussi pour les minutes, arrivés en dessous de 10, sa affiche comme ça:
    11
    10
    9
    8
    7
    etc...

    Du coup mon affichage du décompte et pas très beau quand les valeurs passe à un chiffre, Ex:
    2 :5 (reste deux minute et cinq seconde)

    et je voudrait plutot afficher ça:
    02:01 (reste deux min et cinq seconde)


    Les valeur seconde et minutes sont des INT.


    Merci de votre aide !!
    Dernière modification par naudnaud ; 15/08/2014 à 12h06.

  18. #17
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    Si tu ne veux pas donner ton code, je pense qu'il va te falloir contacter une voyante

  19. #18
    naudnaud

    Re : [Arduino] Question d'un debutant.

    ha bha oui, j'ai oublier de le mettre -_-

    Code:
    void timer() {
    
      lcd.clear();
      lcd.setCursor(4,0);
      lcd.print("Decompte");
      
      
     while(1) {  
    
    //affiche info tempo
      lcd.setCursor(5,1);
      lcd.print(Counterminute, DEC);
      lcd.setCursor(7,1);
      lcd.print(":");
      lcd.setCursor(8,1);
      lcd.print(Counterseconde, DEC);
    
    //Decompte seconde
      delay(1000);
      Counterseconde--;
    
    
    // gestion minutes/seconde  
      if (Counterseconde < 0) 
        {Counterseconde = 59;
         Counterminute--;} 
    
    //Fin decompte, appelle fin
      if (Counterminute == 0 && Counterseconde == 0)
         {fin(); } 
      
      
    } //fin while  
    } //fin Timer
    
    
    void fin(){
      
      while (1) {
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("c'est cuit ^^");
      delay(5000);
      }// fin while
      }// fin fin
    Dernière modification par Jack ; 15/08/2014 à 16h09. Motif: Remplacement balises QUOTE par balises CODE

  20. #19
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    il affiche 90 au lieu de 9 parce que tu n'as pas effacé le 0 du 10

  21. #20
    naudnaud

    Re : [Arduino] Question d'un debutant.

    Dac, j'ai crée un bout de programme qui efface les zéro inutile.

  22. #21
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    et ca donne quoi?

  23. #22
    naudnaud

    Re : [Arduino] Question d'un debutant.

    c'est tout bon.

    J'ai réussi a finir mon bout de programme.
    Les pas forcement très propre, mais il marche bien !!

    merci de ton aide !

  24. #23
    naudnaud

    Re : [Arduino] Question d'un debutant.

    Bonjour

    Me revoilà avec quelque petite question.

    J'avance bien dans mes projet, mais quelque petit truc me bloque.
    Je tente de commander l'état de mon arduino avec la com's série du PC.

    ça fonctionne, mais pas exactement comme je veut:

    Code:
     if (Serial.available()>0) {          // Si des données sont disponibles
        received = Serial.read();          // On les récupère
        if(received == 'B') {Drap_Bleu();}
        if(received == 'R') {Drap_Rouge();} 
     }
    Ce code marche très bien, mais...
    Je voudrait que à la place de B et R, l'arduino réagisse avec 101 et 102


    Sauf que sa ne marche pas.
    savez vous pourquoi ?

    Merci de votre aide!!!!!

  25. #24
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    C'est quoi received?

  26. #25
    naudnaud

    Re : [Arduino] Question d'un debutant.

    Ma variable pour recevoir les information du port serie (INT)

  27. #26
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    Et quelles sont les données qui sont envoyées sur le port série du PC?
    Avec quel programme les envoies-tu?

  28. #27
    naudnaud

    Re : [Arduino] Question d'un debutant.

    J'utilise le moniteur série intégré au logiciel Arduino.

    Dans le moniteur série, j'envoie directement 101.
    J'ai tenter d'envoyer: serial.print(101) mais sa ne marche pas non plus.

    (je test ainsi en vue de faire une communications sans fils entre plusieurs arduino)

  29. #28
    Jack
    Modérateur

    Re : [Arduino] Question d'un debutant.

    je ne connais pas bien le logiciel arduino, et encore moins comment fonctionne le moniteur série. Cependant, si ce moniteur fonctionne à la manière d'un terminal série, ce que tu tapes est envoyé sous forme de code ASCII, donc dans cette hypothèse si tu tapes 101, ce sont les caractères '1', '0' et '1' qui sont envoyés, de codes ASCII respectifs 48, 49 et 48.
    Çà expliquerait pourquoi tu ne reçois pas 101.
    Dernière modification par Jack ; 18/09/2014 à 13h56. Motif: Orthographe

  30. #29
    JPL
    Responsable des forums

    Re : [Arduino] Question d'un debutant.

    Arrivé à ce stade la discussion semble plutôt relever du forum Électronique. Je la déplace.
    Rien ne sert de penser, il faut réfléchir avant - Pierre Dac

  31. #30
    Yoruk

    Re : [Arduino] Question d'un debutant.

    Citation Envoyé par Jack Voir le message
    je ne connais pas bien le logiciel arduino, et encore moins comment fonctionne le moniteur série. Cependant, si ce moniteur fonctionne à la manière d'un terminal série, ce que tu tapes est envoyé sous forme de code ASCII, donc dans cette hypothèse si tu tapes 101, ce sont les caractères '1', '0' et '1' qui sont envoyés, de codes ASCII respectifs 48, 49 et 48.
    Çà expliquerait pourquoi tu ne reçois pas 101.
    Oui, je te conseille plutôt de faire serial.print("101"). Si tu veux transmettre du binaire, tu peux, avec la syntaxe serial.print(data, BIN).
    La robotique, c'est fantastique !

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. [Programmation] Arduino-débutant
    Par Lycaon dans le forum Électronique
    Réponses: 12
    Dernier message: 16/12/2015, 10h02
  2. Question d'Arduino
    Par MRTgang dans le forum Électronique
    Réponses: 3
    Dernier message: 03/07/2013, 14h12
  3. Débutant ARDUINO et électronique
    Par quanta62 dans le forum Électronique
    Réponses: 8
    Dernier message: 14/02/2013, 20h39
  4. Débutant Arduino, question de choix
    Par Forhorse dans le forum Électronique
    Réponses: 2
    Dernier message: 30/04/2012, 08h45
  5. Débutant - Choix composant premier robot Arduino
    Par shiva31 dans le forum Électronique
    Réponses: 15
    Dernier message: 15/04/2012, 16h36
Découvrez nos comparatifs produits sur l'informatique et les technologies.