Pages: [1]   Go Down
Author Topic: decrementer avec un bouton  (Read 536 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

bonjour je crée un nouveau post car personne n'a repondu au precedant (surement que personne n'a vu)
j'ai fais un programme affin d'incrementer un compteur avec un bouton pour faire varier un rapport cyclique
a present je souhaite aussi rajouter un bouton pour decrementer
j'ai fais ce programme mais il ne marche pas:
pourriez vous y jeter un oeil et me dire ce qui ne vas pas?
Code:
const int moteurV = 9;//broches uilisées
const int moteurF = 10;
const int buttonPinVplus = 7;
const int buttonPinVmoin = 8;// crée un identifiant pour la broche utilisée avec le bouton poussoir
// Les variables sont modifiées au cours du programme
int buttonPushCounterV = 0;   // variable pour le comptage du nombre d'appuis sur le bouton poussoir
int buttonStateVplus = 0;         //Variable pour l'état actuel du bouton poussoir
int lastButtonStateVplus = 0;     // Variable pour l'état précédent du bouton poussoir
int buttonStateVmoin = 0;
int lastButtonStateVmoin = 0;
void setup()
{
  //definition des broches en sortie
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(buttonPinVplus, INPUT);
  pinMode(buttonPinVmoin, INPUT);  

}
void loop ()
{
  // lit l'état actuel du bouton poussoir et le mémorise dans la variable
  buttonStateVplus = digitalRead(buttonPinVplus);
  buttonStateVmoin = digitalRead(buttonPinVmoin);
  
  if(buttonStateVmoin!=lastButtonStateVmoin)
  {
    if (buttonStateVmoin ==HIGH)
    { buttonPushCounterV--;
    delay(100);
    lastButtonStateVmoin = buttonStateVmoin;
    }
  // compare l'état actuel du bouton poussoir à l'état précédent mémorisé
  if (buttonStateVplus!=lastButtonStateVplus)
   {
  
    // si l'état du bouton poussoir a changé et est HAUT, on incrémente la variable de comptage
    if (buttonStateVplus == HIGH) {
      // si l'état actuel du bouton est HAUT
      // il est passé de BAS  à HAUT
      buttonPushCounterV++;
      delay (100);
  
    //mémorise l'état courant du bouton poussoir
    //pour les prochains passages dans la boucle loop
    lastButtonStateVplus = buttonStateVplus;
  
   }
   }
   }
  if(buttonPushCounterV < 0) buttonPushCounterV =0;
  if(buttonPushCounterV > 10) buttonPushCounterV =10;
  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
switch (buttonPushCounterV)
{
      case 1:
      analogWrite(9, 33);
      break;
    
      case 2:
      analogWrite(9, 38);
      break;
    
      case 3:
      analogWrite(9, 48);
      break;
  
      case 4:
      analogWrite(9, 68);
    
      case 5:
      analogWrite(9, 75);
      break;
    
      case 6:
      analogWrite(9, 88);
    
      case 7:
      analogWrite(9, 95);
      break;
    
      case 8:
      analogWrite(9, 123);
      break;
    
      case 9:
      analogWrite(9, 135);
      break;
      
      case 10:
      analogWrite(9, 148);
      break;
    
      default:
      analogWrite(9, 0);
      break;
    }
}
merci d'avance
« Last Edit: May 05, 2014, 03:24:10 am by darkkrayt » Logged

Offline Offline
God Member
*****
Karma: 12
Posts: 917
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, il me semble avoir déjà répondu à ton précédent Topic.
Tu ne gère qu'un seul bouton dans ton code, personne ne fera le code à ta place pour en ajouter un deuxième
smiley-wink
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 864
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

John, tu a jugé à la hâte, le monsieur à bien deux boutons de déclaré et bien deux lecture de bouton et deux traitement de bouton, le problème est ailleurs:

Déjà est tu sur du brochage de ton second bouton? Correspondant à ce qui est défini dans ton code? et si oui emplacement libre?

Fait attention aux confusion analogique numérique pour les I/O, pas de confusion.

Sinon le reste à l'air bien, à ta place je mettrai un Serial.print pour debuger et pour savoir si le compteur est bien incrémenté, je vois que tu n'à rien pour vérifier que le résultat est bien incrémenté/décrémenté donc je ne vois pas comment tu peut certifier que le problème proviens du deuxième boutons.

Skizo.
Logged

Un tien vaux mieux que deux tu l'auras !

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3610
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il y a une accolade fermante mal placée.
L'appui sur buttonStateVplus est testé à l'intérieur du if de buttonStateVmoin.

Il faudrait indenter correctement ton code. Utilise le menu Outils/Formatage Automatique de l'IDE tu verras mieux comment les if sont imbriqués
Logged

83 - var
Offline Offline
God Member
*****
Karma: 9
Posts: 864
ARDUINO Powa !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bien vue, je trouvais sa très mal indenté aussi mais j'avais pas grillé !  smiley-roll
Logged

Un tien vaux mieux que deux tu l'auras !

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je pense en effet mettre un Serial.print
merci pour cette accolade ^^
mais depuis que mon programme inclut le deuxieme bouton meme mon premier ne marche plus et l'oscillo n'affiche plus aucun rapport cyclique :/
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

voici une cature d'ecran de ce que cela donne avec le print:
http://img4.hostingpics.net/pics/684292Sanstitre.png

le programme detecte le premier appui du botuon mais pas les autres:/
voici le programme , j'ai mis un goto a la fin au cas ou il y avais un probleme de repetition avec le case mais rien n'y change...
Code:
]const int moteurV = 9;//broches uilisées
const int moteurF = 10;
const int buttonPinVplus = 7;
const int buttonPinVmoin = 8;// crée un identifiant pour la broche utilisée avec le bouton poussoir
// Les variables sont modifiées au cours du programme
int buttonPushCounterV = 0;   // variable pour le comptage du nombre d'appuis sur le bouton poussoir
int buttonStateVplus = 0;         //Variable pour l'état actuel du bouton poussoir
int lastButtonStateVplus = 0;     // Variable pour l'état précédent du bouton poussoir
int buttonStateVmoin = 0;
int lastButtonStateVmoin = 0;
void setup()
{
  //definition des broches en sortie
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(buttonPinVplus, INPUT);
  pinMode(buttonPinVmoin, INPUT);  
  Serial.begin(9600);
}
void loop ()
{
  debut :
  // lit l'état actuel du bouton poussoir et le mémorise dans la variable
  buttonStateVplus = digitalRead(buttonPinVplus);
  buttonStateVmoin = digitalRead(buttonPinVmoin);
  
   if (buttonStateVplus!=lastButtonStateVplus)
   {
  
  
    // si l'état du bouton poussoir a changé et est HAUT, on incrémente la variable de comptage
    if (buttonStateVplus == HIGH) {
      // si l'état actuel du bouton est HAUT
      // il est passé de BAS  à HAUT
      buttonPushCounterV++;
      delay (100);
        Serial.println("APPUI");
      Serial.print("nombre d'appuis:  ");
      Serial.println(buttonPushCounterV++, DEC); // affiche la valeur au format décimal
  
    //mémorise l'état courant du bouton poussoir
    //pour les prochains passages dans la boucle loop
    lastButtonStateVplus = buttonStateVplus;
  
   }
   }
  
  
       if(buttonStateVmoin!=lastButtonStateVmoin)
  {
    if (buttonStateVmoin ==HIGH)
    { buttonPushCounterV--;
    delay(100);
    lastButtonStateVmoin = buttonStateVmoin;
    }
  }
  // compare l'état actuel du bouton poussoir à l'état précédent mémorisé
  
  

  
  if(buttonPushCounterV < 0) buttonPushCounterV =0;
  if(buttonPushCounterV > 10) buttonPushCounterV =10;
  

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
switch (buttonPushCounterV)
{
      case 1:
      analogWrite(9, 33);
      break;
    
      case 2:
      analogWrite(9, 38);
      break;
    
      case 3:
      analogWrite(9, 48);
      break;
  
      case 4:
      analogWrite(9, 68);
      break;
    
      case 5:
      analogWrite(9, 75);
      break;
    
      case 6:
      analogWrite(9, 88);
    
      case 7:
      analogWrite(9, 95);
      break;
    
      case 8:
      analogWrite(9, 123);
      break;
    
      case 9:
      analogWrite(9, 135);
      break;
      
      case 10:
      analogWrite(9, 148);
      break;
    
      default:
      analogWrite(9, 0);
      break;
    }
   goto debut;
}
« Last Edit: May 09, 2014, 08:07:54 am by darkkrayt » Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3610
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

loop est déjà une boucle vires moi ce goto immédiatement
Logged

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1289
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
loop est déjà une boucle vires moi ce goto immédiatement
Non c'est un goto dans le décors smiley
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Offline Offline
God Member
*****
Karma: 12
Posts: 917
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

loop est déjà une boucle vires moi ce goto immédiatement

Et vire aussi le "debut:"
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui je l'ai enlevé c'etais juste pour essayer de voir ou ca cloche, mais la je suis paumé j'arrive pas a trouver..
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3610
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

D'accord mais si tu ne dis pas ce qui se passe on pourra pas t'aider.
C'est toi qui a la carte devant toi. Donc il n'y a que toi qui peut nous dire ce qui remonte par la console par exemple. Le print c'est par pour la deco qu'on les met c'est pour suivre l'exécution du programme.
il faut mettre des print dans la gestion des 2 boutons pour voir comment le programme se déroule.
Avoir un état du compteur aussi
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lorsque j'appuie sur le bouton d'incrementation (le bouton de decrementation n'est pas encore installé) cela incremente de 1 (comme sur le screen post precedent) et le rapport cyclique change, mais si l'on rappuie cela ne marche plus le compteur reste bloqué a 1 et le rapport cyclique ne change pas... le programme ne detecte plus d'appui sur le bouton ..
mon ancien code marche :
Code:
const int moteur1 = 9;//broches uilisées
const int moteur2 = 10;
const int  buttonPin = 7;     // crée un identifiant pour la broche utilisée avec le bouton poussoir
// Les variables sont modifiées au cours du programme
int buttonPushCounter = 0;   // variable pour le comptage du nombre d'appuis sur le bouton poussoir
int buttonState = 0;         //Variable pour l'état actuel du bouton poussoir
int lastButtonState = 0;     // Variable pour l'état précédent du bouton poussoir


void setup()
{
  //definition des broches en sortie
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(buttonPin, INPUT); 
  Serial.begin(9600);
}
void loop ()
{
  // lit l'état actuel du bouton poussoir et le mémorise dans la variable
  buttonState = digitalRead(buttonPin);

  // compare l'état actuel du bouton poussoir à l'état précédent mémorisé
  if (buttonState!=lastButtonState)
   {
   
    // si l'état du bouton poussoir a changé et est HAUT, on incrémente la variable de comptage
    if (buttonState == HIGH) {
      // si l'état actuel du bouton est HAUT
      // il est passé de BAS  à HAUT
      buttonPushCounter++;
      delay (100);
      // affiche les messages sur le PC
      Serial.println("APPUI");
      Serial.print("nombre d'appuis:  ");
      Serial.println(buttonPushCounter, DEC); // affiche la valeur au format décimal
    }
    else {
      // si le bouton courant est BAS
      // il est passé de HAUT à BAS :
      Serial.println("PAS D'APPUI");
    }


    //mémorise l'état courant du bouton poussoir
    //pour les prochains passages dans la boucle loop
    lastButtonState = buttonState;
   
   }
  if(buttonPushCounter < 0) buttonPushCounter =0;
  if(buttonPushCounter > 9) buttonPushCounter =9;



switch (buttonPushCounter)
{
      case 1:
      analogWrite(9, 33);
      break;
   
      case 2:
      analogWrite(9, 38);
      break;
   
      case 3:
      analogWrite(9, 48);
      break;
 
      case 4:
      analogWrite(9, 68);
   
      case 5:
      analogWrite(9, 75);
      break;
   
      case 6:
      analogWrite(9, 88);
   
      case 7:
      analogWrite(9, 95);
      break;
   
      case 8:
      analogWrite(9, 123);
      break;
   
      case 9:
      analogWrite(9, 135);
      break;
     
      case 10:
      analogWrite(9, 148);
      break;
   
      default:
      analogWrite(9, 0);
      break;
    }
}
et depuis que j'ai rajouté cet autre bouton et que j'ai du changer tout les noms ca marche pas.. smiley-cry
« Last Edit: May 16, 2014, 07:06:22 am by darkkrayt » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 32
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
Comment sont cablés tes boutons ?
Logged

France
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3610
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lorsque j'appuie sur le bouton d'incrementation (le bouton de decrementation n'est pas encore installé) cela incremente de 1 (comme sur le screen post precedent) et le rapport cyclique change, mais si l'on rappuie cela ne marche plus le compteur reste bloqué a 1 et le rapport cyclique ne change pas... le programme ne detecte plus d'appui sur le bouton ..
Bon alors déjà faudrait peut être câbler le second bouton ou au moins tirer la broche à zéro pour ne pas avoir de déclenchement intempestif sur cette entrée qui doit se trouver en l'air si j'ai bien compris. Cela permettrait d'y voir plus clair.
Ensuite comme je le disais dans le post précédent mettre quelques print pour voir où passe le programme et ce qui se passe.
Logged

Pages: [1]   Go Up
Jump to: