Go Down

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

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'installe !

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)

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

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

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'installe !

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy