Puls timer arduino

Goedenavond,

Na al een tijdje te hebben gespeeld met de arduino voorbeelden wil ik
toch graag zelf beginnen te schrijven.

Dit stukje moet later ook daadwerkelijk een functie hebben.

Wat ik probeer te maken:

Bij een puls op een input moet een timer gaan lopen van een aantal minuten.
Als de puls nog een keer gemaakt wordt moet de timer stoppen.
Wordt de puls weer gemaakt zal de timer weer gaan lopen.

Ik heb geprobeerd een standaard button voorbeeld aan te passen.

c code:


const int buttonPin = 2;     // start timer
const int ledPin =  13;      // test led (moet later een output worden)

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
     delay(1000); 
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

// Mijn idee hoe het zou moeten werken

 // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
     delay(5000);           //5 seconde aan
  if (ledPin == HIGH)
  and(buttonState == HIGH)
    digitalWrite(ledPin, LOW)
  }
}

Bestaat er uberhoud een ''AND'' functie?
Kunnen jullie me een stapje verder helpen?
Benieuwd of mijn idee ooit zal gaan werken..

Groet Jeff

Tijdens de delay zijn er geen ingangen beschikbaar. Dus als je nogmaals duwt tijdens de delay ziet de arduino die niet. Delay hoor je met een lusje te doen met de aantal gepasseerde millis. Arduino heeft een timer lopen vanaf deze wordt aangezet. Er zit een voorbeeld bij de Arduinosoftware hierover.

Even uit de losse pols, niet getest.

c code:


const int buttonPin = 2;     // start timer
const int ledPin =  13;      // test led (moet later een output worden)

// variables will change:
unsigned long last_millies_time = 0;

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  if (!digitalRead(ledPin) { // Staat de led nog niet aan?
    if (digitalRead(buttonPin)) {   // Toets ingedrukt?
      last_millies_time = millis(); // tijdstip onthouden
      digitalWrite(ledPin, HIGH);   // zet led aan
    }
  } else { // led staat al aan
    if (digitalRead(buttonPin)) {  // Toets ingedrukt?
      digitalWrite(ledPin, LOW);   // zet led uit
    }    
  }
  if (millis() - last_millies_time > 5000) { digitalWrite(ledPin, LOW); }
} 

Willicht een beetje hoog gegrepen om te beginnen, maar nog netter zou zijn om een timer interrupt toe te passen. Maar voor zo'n kleine programmaatjes, maakt dat niks uit, dus vergeet dat maar even.

Verder declareer je je buttonstate variable als een int om er vervolgens een boolean aan toe te kennen, en met een boolean te vergelijken. Misschien dat het werkt maar dat is dan toch puur geluk. C (en arduino C) doen aan static typing en zijn dus streng over wat je in een variabele van een bepaald type mag steken.

Als je maar genoeg geinteresseerd ben, verwondert heel de wereld.