Go Down

Topic: decrementer avec un bouton (Read 593 times) previous topic - next topic

darkkrayt

May 05, 2014, 09:52 am Last Edit: May 05, 2014, 10:24 am by darkkrayt Reason: 1
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: [Select]
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

john_lenfr

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
;)

skizoh

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.
Un tien vaux mieux que deux tu l'auras !

fdufnews

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

skizoh

Bien vue, je trouvais sa très mal indenté aussi mais j'avais pas grillé !  :smiley-roll:
Un tien vaux mieux que deux tu l'auras !

darkkrayt

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 :/

darkkrayt

#6
May 09, 2014, 03:02 pm Last Edit: May 09, 2014, 03:07 pm by darkkrayt Reason: 1
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: [Select]
]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;
}

fdufnews

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

icare

Bonjour,

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

Non c'est un goto dans le décors :)
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

john_lenfr


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


Et vire aussi le "debut:"

darkkrayt

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..

fdufnews

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

darkkrayt

#12
May 16, 2014, 01:26 pm Last Edit: May 16, 2014, 02:06 pm by darkkrayt Reason: 1
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: [Select]
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.. =(

PhilAin

Bonjour,
Comment sont cablés tes boutons ?

fdufnews


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.

Go Up