Arduino qui s'emballe ?!

Bonjour à tous,

Je suis nouveau dans ce merveilleux monde et depuis ce soir j'ai un gros problème, à savoir que ma arduino (Uno, fraîchement acquise) fait des bizarreries.

Ainsi elle va incrémenter par exemple toute seule la variable 'buttonPushCounter' dans le code suivant :

const int  buttonPin = 9;
int buttonPushCounter = 0;  
int buttonState = 0;    
int lastButtonState = 0; 

void setup() {
  pinMode(buttonPin, INPUT);
  Serial.begin(9600);
}


void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      buttonPushCounter++;
      Serial.println(buttonPushCounter); 
    }
    lastButtonState = buttonState;
  }
}

Et ce, même si je débranche TOUT mes fils et que j'approche mon doigt de la sortie digital 9

J'ai essayé de trouver des informations là-dessus mais sans succès..

C'est grave docteur ?

non, c'est même normal, ton doigt doit être chargé électriquement et tu crée des parasites sur l'entrée (tu portes des vêtements en laine ou en synthétique, par exemple ? )

pour éviter ça il te faut activer la résistance de pullup interne à l'arduino pour ta pin d'entrée (dans ton setup, tu rajoutes digitalwrite(buttonpin, HIGH); à la fin), ce qui va permettre de "tirer" la pin au Vcc, et donc câbler ton bouton en logique négative : le bouton met l'entrée à la masse au lieu de la mettre au Vcc.

Donc ensuite dans ta condition il faut tester l'inverse (LOW).

Bonjour Bricofoy, et merci pour ta réponse !

L'exemple donné ci-dessus n'est pas terrible, ma carte faisait la même chose avec une résistance de tirage et le code suivant :

#define reedpin 2
int blabla = 0;
int reedstate = 0;
int temps = 0;
int antirebond = 250;

void setup() { 
  Serial.begin(9600); 
  pinMode(reedpin, INPUT); 
  digitalWrite(reedpin, HIGH);
  attachInterrupt(0, int_cb, FALLING); 
}

void loop() { 
//  Serial.println(reedstate);
  delay(100); 
  reedstate = digitalRead(reedpin);
}

void int_cb() { 
 if (millis() - temps >= antirebond) {
 Serial.println(blabla);
 blabla = blabla ++;
 temps = millis();
 }
}

Je dis bien faisais car désormais tout est rentré dans l'ordre..... (effet bonaldi ?)
En effet hier j'avais un pull 100% mouton irlandais ! Il devait surement y avoir une charge électrostatique

Encore merci en tout cas !

Le pullup interne présente une résistance élevée.
Si l'environnement est perturbé, il est préférable de mettre une résistance de valeur relativement faible et un petit condensateur à la masse( ceinture et bretelles)

Entendu fdufnews,
Je vais suivre tes conseils pour éviter que ce genre de soucis recommence

J'ai essayé de chercher un peu quel résistance et condensateur je pourrai utiliser.
J'ai trouvé quelques pistes mais orienté vers l'utilisation de potentiomètre..

Aurais tu un lien à me conseiller pour me permettre de calculer cela ?
Je précise qu'il s'agit d'utiliser un capteur à effet hall (ou un ILS)

Merci à toi !

Re

Grâce à ce topic : Arduino Forum
j'en ai un peu plus compris sur ce qui se passait.
Je pense donc qu'un condensateur de 100nF suffira ?

oui, une résistance de 1k et un condo de 100nF ça doit marcher pas trop mal