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