Pages: [1]   Go Down
Author Topic: Code mise à zero pushbutton counter  (Read 649 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je débute en programmation et il y a quelques notions qui m'échappent.
J'utilise l'exemple trouver sous le site Arduino ci-dessous) pour compter le nombre d'appuis sur le boutonet afficher dans le port série.

[edit]    
 http://arduino.cc/en/Tutorial/ButtonStateChange
 
 */

// this constant won't change:
const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter, DEC);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;

  
  // turns on the LED every four button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
   digitalWrite(ledPin, LOW);
  }
  
}[/edit]

Maintenant, j'aimerai mettre à zéro le compteur d'interruption au bout de 2 minutes.
Comment dois-je programmer ? Quelqu'un peut me dire quelles lignes de code ajouter svp ?

Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

dans la boucle (loop), il faut tester le nombre de millisecondes par rapport aux deux secondes en cours.

Code:
long deuxSecCount = 0;

// ...

void loop()
{
  // ...

  if (millis() - 120000 > deuxSecCount * 120000) {
     deuxSecCount++;
     buttonPushCounter  = 0;
  }

}

// ...

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, j'ai compris tes lignes de code, c'est déjà ça.
Par contre, ça ne marche pas à chaque fois.
Si rien ne se passe pendant un temps supérieur à 2 minutes alors la remise à zéro ne s'effectue pas.
Est-ce qu'il faut que je lie ma remise à zero à un état du boutton ? Si c'est ça j'ai également besoin d'aide.

« Last Edit: November 15, 2010, 09:59:27 am by Nicoroots59 » Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3372
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Est-ce qu'il faut que je lie ma remise à zero à un état du boutton ?
Non au contraire

Quote
Si rien ne se passe pendant un temps supérieur à 2 minutes alors la remise à zéro ne s'effectue pas.
C'est que tu as du faire le test dans une partie du code qui n'est balayé que lorsque l'on appuie sur un bouton ou que tu ne passes pas dans la partie de code qui met la LED à jour.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En fait, je suis en train de me dire qu'il serait peut être plus judicieux de mettre à zéro mon compteur si je reste à l'état Off pendant un certain temps (20s par ex).
ENsuite, je compte les tours quand ma roue tourne et dans ce cas là l'application de départ fonctionne bien.
Quand ma roue s'arrête, et que je reste à l'état OFF; alors je repars à Zéro.

En utilisant le code collé au départ, je pense que ça doit être possible...mais je ne sais pas comment m'y prendre pour passer à zéro quand ma roue est restée immobile plus de 20 s.



Logged

Pages: [1]   Go Up
Jump to: