Bouton poussoir - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 45 sur 45

Bouton poussoir



  1. #31
    Tranber72

    Re : Bouton poussoir


    ------

    Merci forcerouge !

    tu as compris c'est exactement ça

    -----

  2. #32
    Yvan_Delaserge

    Re : Bouton poussoir

    C'est pas que ce soit compliqué, c'est juste que c'est pas ce qui était dit dans le message #27:
    "e souhaite que le moteur reparte dans l'autre sens même si le bouton reste enclenché plus de trois secondes"
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  3. #33
    Tranber72

    Re : Bouton poussoir

    encore une fois l'objet de cette discussion était un programme simplifié pour tester les interrupteurs de fin de course sans le joystick et uniquement avec un moteur

  4. #34
    Forcerouge

    Re : Bouton poussoir

    Bon, j'ai essaye de te coder le truc (en reprenant ce qui avait ete deja fait par Ysan Delaverge) mais:
    1) je suis debutant en programmation donc il y a surement de bien meilleures methodes, plus propres et plus efficientes.
    2) je n'ai pas l'environnement Arduino installe sur ce PC donc je n'ai pas pu tester les eventuelles erreurs/fautes de frappe/manques de parentheses, etc qu'il pourrait avoir, a toi donc de corriger si necessaire.

    En principe ca devrait marcher je pense.
    L'idee c'est de faire tourner la boucle principale loop uniquement pour checker l'etat des butees. Si une des butees est activee, alors le programme switchera immediatement vers la fonction correspondante, chaque fonction permettant des deplacements dans toutes les directions, sauf une: celle de la butee (a regler individuellement pour chaque butee).
    Si aucune butee n'est active, alors le programme switchera vers la fonction autorisant tous les deplacements.

    Seul souci c'est que ca risque de moins bien marcher si deux butees sont actives en meme temps. A toi de voir comment regler le souci mais nul doute que c'est a la portee de n'importe quel programmeur present sur ce forum
    En attendant ce code peut peut etre te depanner, donc le voici:

    const byte PIN_VITESSE_MOTEUR_A = 3;
    const byte PIN_SENS_MOTEUR_A = 12;
    const byte PIN_FREIN_MOTEUR_A = 9;
    const byte PIN_VITESSE_MOTEUR_B = 11;
    const byte PIN_SENS_MOTEUR_B = 13;
    const byte PIN_FREIN_MOTEUR_B = 8;

    const byte PIN_JOYSTICK_X = A2;
    const byte PIN_JOYSTICK_Y = A3;

    int fin_coursex1 = 10;
    int fin_coursex2 = 7;
    int fin_coursey1 = 6;
    int fin_coursey2 = 5;


    void setup() {

    Serial.begin(115200);

    pinMode(PIN_VITESSE_MOTEUR_A, OUTPUT);
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);

    pinMode(PIN_VITESSE_MOTEUR_B, OUTPUT);
    digitalWrite(PIN_VITESSE_MOTEU R_B, LOW);

    pinMode(PIN_SENS_MOTEUR_A, OUTPUT);
    digitalWrite(PIN_SENS_MOTEUR_A , LOW);

    pinMode(PIN_SENS_MOTEUR_B, OUTPUT);
    digitalWrite(PIN_SENS_MOTEUR_B , LOW);

    pinMode(PIN_FREIN_MOTEUR_A, OUTPUT);
    digitalWrite(PIN_FREIN_MOTEUR_ A, LOW);

    pinMode(PIN_FREIN_MOTEUR_B, OUTPUT);
    digitalWrite(PIN_FREIN_MOTEUR_ B, LOW);

    pinMode(fin_course1, INPUT); //ne pas oublier de mettre une resistance de pullup avec l'interruteur. Regarde sur le net si tu ne sais pas ce que c'est

    pinMode(fin_course2, INPUT); //idem, pullup necessaire



    }

    //fonction principale
    void loop() {

    int pos_fin_courseX1 = digitalRead(fin_coursex1);
    int pos_fin_coursex2 = digitalRead(fin_coursex2);
    int pos_fin_coursey1 = digitalRead(fin_coursey1);
    int pos_fin_coursey2 = digitalRead(fin_coursey2);

    if(pos_fin_course1 == 1){ //remplace 1 par 0 si tu constates que ca fait l'inverse de ce qui est demande
    fincoursex1();} //si le contacteur de fin de course est active, le programme va sortir immediatement de la fonction loop pour aller a la fonction fincoursex1
    if(pos_fin_course2 == 1){ //idem
    fincoursex2();}
    if(pos_fin_coursey1 == 1){ //idem
    fincoursey1();}
    if(pos_fin_coursey2 == 1){ //idem
    fincoursey2();}
    else{
    normalrun();} //Si aucun contacteur n'est enclenche, le programme sort de la boucle pour aller a la fonction normalrun. Il reviendra a la boucle une fois cette fonction effectuee.
    }


    //fonction de butee fin de course axe X cote 1
    void fincoursex1() {

    int joystickX = analogRead(PIN_JOYSTICK_X);
    int joystickY = analogRead(PIN_JOYSTICK_Y);

    if (joystickX > 700) { //disons qu'il est en butee a ce moment la donc il ne doit plus bouger. Si dans la realite tu constates que c'est l'inverse, alors intervertis avec la ligne du dessous (<300)

    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    else if (joystickX < 300) {
    // Sinon si la valeur X est strictement inférieur à 300 le moteur A recule
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , LOW);
    }
    else {
    // Sinon si la valeur X est comprise entre 300 et 700 (bornes inclusent) le moteur A ne bouge pas
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    if (joystickY > 700) {
    // Si la valeur Y est strictement supérieur à 700 le moteur B avance
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , HIGH);
    }
    else if (joystickY < 300) {
    // Sinon si la valeur Y est strictement inférieur à 300 le moteur B recule
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , LOW);
    }
    else {
    // Sinon si la valeur Y est comprise entre 300 et 700 (bornes inclusent) le moteur B ne bouge pas
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    }

    //fonction de butee fin de course axe X cote 2
    void fincoursex2() {

    int joystickX = analogRead(PIN_JOYSTICK_X);
    int joystickY = analogRead(PIN_JOYSTICK_Y);

    if (joystickX > 700) {
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , HIGH);
    }

    else if (joystickX < 300) { //butee: moteur arrete

    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    if (joystickY > 700) {
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , HIGH);
    }
    else if (joystickY < 300) {
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , LOW);
    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    }

    //fonction de butee fin de course axe Y cote 1
    void fincoursey1() {

    int joystickX = analogRead(PIN_JOYSTICK_X);
    int joystickY = analogRead(PIN_JOYSTICK_Y);

    if (joystickX > 700) {
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , HIGH);
    }

    else if (joystickX < 300) {
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , LOW);

    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    if (joystickY > 700) { //butee
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    else if (joystickY < 300) {
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , LOW);
    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    }

    //fonction de butee fin de course axe Y cote 2
    void fincoursey2() {

    int joystickX = analogRead(PIN_JOYSTICK_X);
    int joystickY = analogRead(PIN_JOYSTICK_Y);

    if (joystickX > 700) {
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , HIGH);
    }

    else if (joystickX < 300) {
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , LOW);

    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    if (joystickY > 700) {
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , HIGH);
    }
    else if (joystickY < 300) { //butee
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    else {
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    }


    //fonction lorsqu'aucune butee n'est activee
    void normalrun(){
    int joystickX = analogRead(PIN_JOYSTICK_X);
    int joystickY = analogRead(PIN_JOYSTICK_Y);

    if (joystickX > 700) {
    // Si la valeur X est strictement supérieur à 700 le moteur A avance
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , HIGH);
    }

    else if (joystickX < 300) {
    // Sinon si la valeur X est strictement inférieur à 300 le moteur A recule
    digitalWrite(PIN_VITESSE_MOTEU R_A, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_A , LOW);
    }
    else {
    // Sinon si la valeur X est comprise entre 300 et 700 (bornes inclusent) le moteur A ne bouge pas
    digitalWrite(PIN_VITESSE_MOTEU R_A, LOW);
    }

    if (joystickY > 700) {
    // Si la valeur Y est strictement supérieur à 700 le moteur B avance
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , HIGH);
    }
    else if (joystickY < 300) {
    // Sinon si la valeur Y est strictement inférieur à 300 le moteur B recule
    digitalWrite(PIN_VITESSE_MOTEU R_B, HIGH);
    digitalWrite(PIN_SENS_MOTEUR_B , LOW);
    }
    else {
    // Sinon si la valeur Y est comprise entre 300 et 700 (bornes inclusent) le moteur B ne bouge pas
    digitalWrite(PIN_VITESSE_MOTEU R_B,LOW);
    }
    }

    Bonne continuation

  5. #35
    Yvan_Delaserge

    Re : Bouton poussoir

    Il serait plus simple de tester juste après les if, si la butée concernée est activée et si oui, mettre vitessemoteur_* à 0...
    Code:
    if (joystickX > 700) {  
        // Si la valeur X est strictement supérieur à 700 le moteur A avance
        digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_A, HIGH);
      } 
    
      else if (joystickX < 300) {  
        // Sinon si la valeur X est strictement inférieur à 300 le moteur A recule
        digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_A, LOW);
      } 
      else {
        // Sinon si la valeur X est comprise entre 300 et 700 (bornes inclusent) le moteur A ne bouge pas
        digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
      }
    
      if (joystickY > 700) {  
        // Si la valeur Y est strictement supérieur à 700 le moteur B avance
        digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_B, HIGH);
      } 
      else if (joystickY < 300) {   
        // Sinon si la valeur Y est strictement inférieur à 300 le moteur B recule
        digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_B, LOW);
      } 
      else {
        // Sinon si la valeur Y est comprise entre 300 et 700 (bornes inclusent) le moteur B ne bouge pas
        digitalWrite(PIN_VITESSE_MOTEUR_B,LOW); 
      }
    ça ajouterait juste 4 lignes, et ça permettrait de virer tout ce qui (ailleurs dans le programme) concerne les 3 secondes d'attente, puisque apparemment ce n'est plus d'actualité. Au total, le programme serait considérablement raccourci.
    Mais avant de coder, il faut savoir 2 choses:

    1) les butées xmin, xmax, ymin et ymax seront reliées à quelles broches de l'Arduino?
    2) Lorsqu'elles seront activées, passeront-elles du niveau haut au niveau bas, ou l'inverse?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  6. #36
    Tranber72

    Re : Bouton poussoir

    Merci à vous deux

    xmin = 4
    xmax = 5
    ymin = 6
    ymax = 7

    En mode actif, elle seront au niveau haut.

  7. #37
    Forcerouge

    Re : Bouton poussoir

    Citation Envoyé par Yvan_Delaserge Voir le message
    Il serait plus simple de tester juste après les if, si la butée concernée est activée et si oui, mettre vitessemoteur_* à 0...
    Peut etre, mais je ne vois pas comment puisque vitesse moteur est un parametre commun a tous les sens de deplacement. Or il faut que ca puisse bouger si on donne l'instruction d'aller du cote oppose a la butee quand bien meme cette butee serait activee.
    Peut etre n'ais je pas bien compris ce que tu veux dire?


    Citation Envoyé par Yvan_Delaserge Voir le message
    ça ajouterait juste 4 lignes, et ça permettrait de virer tout ce qui (ailleurs dans le programme) concerne les 3 secondes d'attente, puisque apparemment ce n'est plus d'actualité.
    Euh sauf erreur de ma part j'ai deja retire ces parties non?

    Citation Envoyé par Yvan_Delaserge Voir le message
    Au total, le programme serait considérablement raccourci.
    Mais avant de coder, il faut savoir 2 choses:

    1) les butées xmin, xmax, ymin et ymax seront reliées à quelles broches de l'Arduino?
    2) Lorsqu'elles seront activées, passeront-elles du niveau haut au niveau bas, ou l'inverse?
    Ca c'est extremement simple a modifier par la suite.

  8. #38
    Tranber72

    Re : Bouton poussoir

    Merci forcerouge

    j'ai compilé ton code en corrigeant les fautes de frappes et il fonctionne.
    Je le teste ce soir sur mon moteur et vous tiens au courant !

  9. #39
    Yvan_Delaserge

    Re : Bouton poussoir

    Forcerouge, je ne parlais pas de ton programme, je n'ai pas encore eu le temps de l'examiner! Je parlais du mien.


    Voici le code modifié. En fait, les diverses déclarations sont plus longues que le programme proprement dit!
    Code:
    const byte PIN_VITESSE_MOTEUR_A = 3;
    const byte PIN_SENS_MOTEUR_A    = 12;
    const byte PIN_FREIN_MOTEUR_A   = 9;
    const byte PIN_VITESSE_MOTEUR_B = 11;
    const byte PIN_SENS_MOTEUR_B    = 13;
    const byte PIN_FREIN_MOTEUR_B   = 8;
    
    const byte PIN_JOYSTICK_X = A2;
    const byte PIN_JOYSTICK_Y = A3;
    const byte PIN_JOYSTICK_Z = A4; // Bouton, pas potentiomètre actif si LOW /!\
    
    const byte PINxmin = 4;// actif si HIGH
    const byte PINxmax = 5;// actif si HIGH
    const byte PINymin = 6;// actif si HIGH
    const byte PINymax = 7;// actif si HIGH
    
    // Variables "axe1Joystick" et "axe2Joystick": pas besoin d'avoir des variables globales
    
    void setup() {
    
     
      pinMode(PIN_VITESSE_MOTEUR_A, OUTPUT);
      digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
    
      pinMode(PIN_VITESSE_MOTEUR_B, OUTPUT);
      digitalWrite(PIN_VITESSE_MOTEUR_B, LOW);
    
      pinMode(PIN_SENS_MOTEUR_A, OUTPUT);
      digitalWrite(PIN_SENS_MOTEUR_A, LOW); 
    
      pinMode(PIN_SENS_MOTEUR_B, OUTPUT);
      digitalWrite(PIN_SENS_MOTEUR_B, LOW); 
    
      pinMode(PIN_FREIN_MOTEUR_A, OUTPUT);
      digitalWrite(PIN_FREIN_MOTEUR_A, LOW); 
    
      pinMode(PIN_FREIN_MOTEUR_B, OUTPUT);
      digitalWrite(PIN_FREIN_MOTEUR_B, LOW);
    
      pinMode(PIN_JOYSTICK_Z, INPUT_PULLUP); // L'activation de la résistance de tirage est obligatoire pour le bouton poussoir en Z sinon les valeurs lues seront aléatoires.
    
    pinMode (PINxmin, INPUT);
    pinMode (PINxmax, INPUT);
    pinMode (PINymin, INPUT);
    pinMode (PINymax, INPUT);
    
    }
    
    void loop() {
    
      int joystickX = analogRead(PIN_JOYSTICK_X); 
      int joystickY = analogRead(PIN_JOYSTICK_Y);
      byte joystickZ = digitalRead(PIN_JOYSTICK_Z);
      byte xmin = digitalRead(PINxmin);
      byte xmax = digitalRead(PINxmax);
      byte ymin = digitalRead(PINymin);
      byte ymax = digitalRead(PINymax);
      
      if (joystickX > 700 && joystickZ == HIGH && xmax == LOW) {  
        // Si la valeur X est strictement supérieur à 700 le moteur A avance
        digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_A, HIGH);
      } 
    
      else if (joystickX < 300&& joystickZ == HIGH && xmin == LOW) {  
        // Sinon si la valeur X est strictement inférieur à 300 le moteur A recule
        digitalWrite(PIN_VITESSE_MOTEUR_A, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_A, LOW);
      } 
      else {
        // Sinon si la valeur X est comprise entre 300 et 700 (bornes inclusent) le moteur A ne bouge pas
        digitalWrite(PIN_VITESSE_MOTEUR_A, LOW);
      }
    
      if (joystickY > 700 && joystickZ == HIGH && ymax == LOW) {  
        // Si la valeur Y est strictement supérieur à 700 le moteur B avance
        digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_B, HIGH);
      } 
      else if (joystickY < 300 && joystickZ == HIGH && xmin == LOW) {   
        // Sinon si la valeur Y est strictement inférieur à 300 le moteur B recule
        digitalWrite(PIN_VITESSE_MOTEUR_B, HIGH);
        digitalWrite(PIN_SENS_MOTEUR_B, LOW);
      } 
      else {
        // Sinon si la valeur Y est comprise entre 300 et 700 (bornes inclusent) le moteur B ne bouge pas
        digitalWrite(PIN_VITESSE_MOTEUR_B,LOW); 
      } 
    }
    Pour les capteurs de fin de course, je trouverais préférable de les mettre actifs au potentiel bas, comme le bouton du joystick, et d'utiliser le pullup de l'arduino, comme pour le joystick z.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  10. #40
    Tranber72

    Re : Bouton poussoir

    ok Yvan
    j'essaierai ce soir avec le pullup
    merci

  11. #41
    Yvan_Delaserge

    Re : Bouton poussoir

    oui, parce que sinon, tu vas te retrouver avec le même fonctionnement erratique qu'avec le joystick Z.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  12. #42
    Tranber72

    Re : Bouton poussoir

    Cela fonctionne Yvan !!! (en mettant PULLUP)
    merci beaucoup à toi et merci à forcerouge pour son aide également

  13. #43
    Yvan_Delaserge

    Re : Bouton poussoir

    Super! Tu nous montreras quelques photos de ton montage à l'occasion?
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

  14. #44
    Tranber72

    Re : Bouton poussoir

    oui si tu veux

    le truc c'est que mon montage est un panneau de 3m par 2.50m donc je suis pas sur que le rendu photo montre quelque chose de clair

    A moins que tu ne veuilles voir que les branchements arduino ?

  15. #45
    Yvan_Delaserge

    Re : Bouton poussoir

    photographie généreusement qu'on puisse voir clairement de quoi il s'agit. Le forum permet de télécharger des images sans limitation.
    Un civet, un plat de côtes et puis, glissez-moi une petite paupiette avec.( Lino Ventura)

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Bouton Poussoir 1NO+1NF
    Par Mike12 dans le forum Technologies
    Réponses: 2
    Dernier message: 16/01/2014, 07h35
  2. bouton poussoir ?
    Par invited1b9fc52 dans le forum Électronique
    Réponses: 19
    Dernier message: 08/07/2009, 21h34
  3. led + bouton poussoir
    Par invite74119562 dans le forum Électronique
    Réponses: 2
    Dernier message: 24/04/2008, 18h40
  4. bouton poussoir
    Par invited0c72bcb dans le forum Électronique
    Réponses: 1
    Dernier message: 02/04/2006, 22h55
  5. Bouton poussoir
    Par invite4d36e559 dans le forum Électronique
    Réponses: 4
    Dernier message: 23/06/2005, 14h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.