Go Down

Topic: Arduino qui s'emballe ?! (Read 723 times) previous topic - next topic

colindalaska

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 :

Code: [Select]

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 ?

bricofoy

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).
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

colindalaska

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 :

Code: [Select]

#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 !

fdufnews

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)

colindalaska

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

colindalaska

#5
Dec 17, 2012, 06:54 pm Last Edit: Dec 17, 2012, 07:06 pm by colindalaska Reason: 1
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 !

colindalaska

Re

Grâce à ce topic : http://arduino.cc/forum/index.php?topic=93760.10
j'en ai un peu plus compris sur ce qui se passait.
Je pense donc qu'un condensateur de 100nF suffira ?

bricofoy

oui, une résistance de 1k et un condo de 100nF ça doit marcher pas trop mal
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

Go Up