IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Arduino menu bouton et LCD


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Arduino menu bouton et LCD
    Bonjour,

    Je viens de finir mon code et l'assemblage d'un rail time-lapse photo.
    Actuellement pour faire les réglages de fonctionnement du rail:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int rpm=0, stepsPerRevolution=200, tempsDePausePhoto=0,
    j'ai besoin de 3 boutons, deux sur la carte arduino et un bouton analogique de rotation en externe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    L'objectif serait d'arrivé à avoir deux boutons en externe du boitier un pour se déplacé dans le menu et l'autre pour changer les valeurs.

    Un pour choisir la valeur à modifier et l'autre pour la modifier.

    Par exemple quant j’appuie sur le btnS1, sur mon écran lcd la valeur RPM clignote. Si je rappuis le btnS1 stepsPerRevolution clignote. Et quant je tourne le btnS3 la valeur stepsPerRevolution et modifier.

    Si je suis pas clair dans mes explications n'hésitez pas à me le dire.
    Bonne journée et merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #include <SerialLCD.h>
    #include <SoftwareSerial.h>
     
    #define valeurMin 0
    #define valeurMax 202
     
    int rpm=0, stepsPerRevolution=200, tempsDePausePhoto=0, compteur;
     
    #include <Stepper.h>
    int enA  = 10;  // Enable pin 10 on Motor Control Shield
    int enB  = 11;  // Enable pin 11 on Motor Control Shield
    int dirA = 12;  // Direction pin dirA on Motor Control Shield
    int dirB = 13;  // Direction pin dirB on Motor Control Shield
     
    Stepper myStepper(stepsPerRevolution, dirA, dirB);
     
    //Commande
    int btnS1 = 7;  // Pin for button S1
    int btnS2 = 6;  // Pin for button S2
    int btnS3 = A0;  // Pin for button S3
    int interupteur = 8;
    int analogValue = A0;
    int relayPin = A2;
    //LCD
     
    SerialLCD slcd(0,1);
     
    void setup(void)
     
    {
     
     
      pinMode(relayPin,OUTPUT);
      pinMode(interupteur, OUTPUT);
      pinMode(btnS1, INPUT);
      pinMode(btnS2, INPUT);
      pinMode(btnS3, INPUT);
      pinMode(7,INPUT);
      digitalWrite(7, HIGH);
      pinMode(6,INPUT);
      digitalWrite(6, HIGH);
     
     
      slcd.begin();// set up :
     
      LCD();
     
     
      //LCD
     
        // set the speed at 60 rpm:
      myStepper.setSpeed(rpm);
      // Enable power to the motor
      pinMode(enA, OUTPUT);
      digitalWrite (enA, HIGH);
      pinMode(enB, OUTPUT);
      digitalWrite (enB, HIGH);
     
     
      //interupteur
     
      //btn1
    }
    void loop()
    {
      while (digitalRead(interupteur)== HIGH){
     
        slcd.noBacklight();
        Moteurar();
     
     
     
     
        slcd.setCursor(8,0);
     
        LCD();
        delay(100);
        digitalWrite(relayPin,HIGH);
        delay (tempsDePausePhoto*1000);
        digitalWrite(relayPin, LOW);
        if (compteur<99999)compteur++,delay(150);
     
     
      }
      while (digitalRead(btnS1)==LOW) {
        Moteurvite();
     
        LCD();
      }
     
      while (digitalRead(btnS2)==LOW) {
        slcd.backlight();
        if (tempsDePausePhoto<valeurMax)tempsDePausePhoto++,delay(50);
        if(tempsDePausePhoto > 201) {
          tempsDePausePhoto = 0;
          slcd.clear();
        }
     
        LCD();
      }
      while (digitalRead(btnS3)==HIGH) {
        slcd.backlight();
        if (stepsPerRevolution<valeurMax)stepsPerRevolution++,delay(50);
        if(stepsPerRevolution> 201) {
          stepsPerRevolution = 0;
          slcd.clear();
        }
     
        LCD();
      }
    }
     
    void LCD(){
     
      slcd.setCursor(0,1);
      slcd.print("Rpm:");
      slcd.print(rpm,DEC);
      slcd.setCursor(8,1);
      slcd.print("PaP:");
      slcd.print(stepsPerRevolution,DEC);
      slcd.setCursor(0,0);
      slcd.print("Tdp:");
      slcd.print(tempsDePausePhoto,DEC);
      slcd.setCursor(8,0);
      slcd.print("Cpt:");
      slcd.print(compteur,DEC);
      delay(100);
     
     
    }
     
     
    void Moteurav()   // Moteur Av
    {
      myStepper.step(stepsPerRevolution);
    }
    void Moteurar()   // Moteur Ar
    {
      myStepper.step(-stepsPerRevolution);
     
    }
     
    void Moteurvite()   // Moteur vite
    {
      myStepper.setSpeed(rpm);
        if (rpm<valeurMax)rpm++,delay(50);
        if(rpm> 200) {
          rpm = 0;
          slcd.clear();
          LCD();
        }
    }

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Comment puis-je intégré MenuBackend à mon code sans tout détruire ?

  3. #3
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Quel est ton problème concernant les trois boutons que tu souhaites rajouter ?

    Sinon, si tu dispose d'une entrée supplémentaire sur ton Arduino, je rajouterai tout simplement un bouton "menu". Ceci te permettrai, plutôt que de faire des boucles while (bloquantes), de déclencher une interruption pour entrer dans un état de configuration dans lequel tu pourras, comme tu nous l'a présenté, implémenter ton menu.

    PS : un code plus commenté serait plus agréable à lire. N'hésites pas également à donner à tes variables des noms plus explicites plutôt que btnS1 etc ..

    Cdlt, deletMe
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    C'est bon je viens de mettre 3 boutons en externes et sa marche.

    Le problème que j'avais était que le nombre de pin disponible était limité sur la carte. Je me suis finalement brancher sur les pins des deux boutons de ma carte Motor shield.

    Actuellement j'ai en externe :

    2 boutons poussoir = rpm et tempsDePausePhoto
    1 bouton rotatif = stepsPerRevolution

    mon objectif serait de pouvoir utilisé le bouton rotatif pour choisir la valeur à modifié, et les boutons poussoir pour augmenté ou diminué ces valeurs.

    auriez vous une méthode pour mettre ça en oeuvre ?

    Cordialement Alex.

  5. #5
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Salut,

    Il te faut réfléchir sur la manière dont tu souhaites rentrer dans ton mode de configuration à moins qu'il soit toujours actif.

    Pour évoluer dans ton menu, il te suffit de lire la valeur analogique du potentiomètre sur ta carte arduino et d'associer une plage de valeur à une entrée de ton menu.

    Par contre, ne possédant pas de bouton "valider", tu seras obliger d'assigner à chaque appui sur un bouton la nouvelle valeur à ta variable paramétrable. Il te faut donc détecter quel bouton a été appuyé.

    Enfin voilà ce qui me passe par la tête en quelques secondes de réflexion. C'est assez dur de t'orienter ne sachant pas ce qui est bloquant pour toi. As tu l'habitude de développer sur ce type de cible ?
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Photographe illustrateur
    Inscrit en
    Mai 2013
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Photographe illustrateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2013
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse. Mon habitude en matière de développement se limite au livre "les bases de la programmation Arduino niveau 1" .

    Bref, je suis se qu'on pourrais appelé un débutant. J'ai finis le livre et il ne m'explique pas grand chose.

    Ma questions sont donc :

    Comment étalonnée un bouton rotatif analogique ?

    Et comment associer une plage de valeur à une entrée dans le menu ?

    N’hésitez pas à coller des liens sur des tutos.

    Merci beaucoup bonne journée

  7. #7
    Membre confirmé
    Avatar de deletme
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 257
    Points : 519
    Points
    519
    Par défaut
    Salut,

    Le mieux reste le site du constructeur :
    http://arduino.cc/fr/Main/AnalogRead

    Une inscription est surement nécessaire pour accéder au reste du contenu. Ton bouton rotatif est il à course finie ou infinie ?

    J'essaye de t'apporter une réponse plus complète ce soir ou ce week end concernant l'association d'une plage de valeur à une entrée du menu.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    - Martin Golding
    Traduction obligatoire : "Toujours écrire du code en gardant en tête que le mec qui en assurera la maintenance est un psychopathe violent qui connait votre adresse"

Discussions similaires

  1. Fenetre + menu + bouton pour un débutant
    Par Yachas dans le forum wxPython
    Réponses: 7
    Dernier message: 28/08/2009, 19h01
  2. menu sur afficheur LCD
    Par nikita_sophie dans le forum Débuter
    Réponses: 5
    Dernier message: 20/08/2008, 09h59
  3. Menu bouton droit de la souris.
    Par chaabane dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/04/2008, 17h49
  4. VCL (menu, boutons,) et DirectX
    Par Maverick357 dans le forum Langage
    Réponses: 4
    Dernier message: 29/02/2008, 12h54
  5. Menu bouton en javascript
    Par cryptoo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/06/2007, 08h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo