voor een bepaalde periode

Arduino specifieke Software
Berichten: 30
Geregistreerd: 09 Dec 2012, 17:16

voor een bepaalde periode

Berichtdoor badmintonerke » 14 Jan 2013, 20:59

hallo,

weet iemand hoe ik kan programmeren dat een voorwaarde (digitale ingang, bepaalde waarde van analoog) voor een bepaalde tijd moet actief zijn en dan pas iets uitvoert
bv pin 1 moet 2sec aan zijn en dan gaat pin 13 aan of analoog read is zoveel voor zo lang en dan ......

en hoe ik een for loop kan herhaal voor bv. 2sec of 10sec

alvast bedankt,

Advertisement

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: voor een bepaalde periode

Berichtdoor Karel » 14 Jan 2013, 21:15

Dan zou je even kunnen zoeken op debouncing. Dat wordt gebruikt om er zeker van te zijn dat een knop echt wordt ingedrukt.

Bijv. hierof hier.

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: voor een bepaalde periode

Berichtdoor pjh » 14 Jan 2013, 22:59

Ook hier zijn er meerdere wegen die naar Rome leiden. Omdat het onmogelijk is iets te programmeren zonder plan, zal ik wat moeten verzinnen.

Eerst eentje van jouw:
bv pin 1 moet 2sec aan zijn en dan gaat pin 13 aan


Wat je NIET wil: is 2 seconden de microcontroller naar pin 1 laten kijken. Dan kun je in die twee seconden het ding geen andere dingen laten doen.
Wat je WEL wil, is een waarschuwing, als er twee seconden voorbij zijn.

Het probleem van knopjes, is dat ze geen mooi signaal afgeven wanneer je ze indrukt. Dat gaat dus niet direct stabiel van 0Volt naar 5Volt, maar springt even op en neer.
Wij willen echter juist de duur van het ingedrukt-zijn weten, en dan maken die eerste paar micro/mili seconden niet zo veel uit.
Wat je dus kunt doen is dit:

1) als knop niet is ingedrukt maak je een WAARDE = systeemclock
2) als knop wel is ingedrukt kijk je of systeemclock (die doorloopt) min WAARDE groter is dan 2000 miliseconden. Dan is aan je voorwaarde voldaan.

In sketch-vorm:
Code: Alles selecteren
int ledPin = 13;
int inputPin =10;

boolean WAARDE;

unsigned long tussenTijd; // maak variabele aan die niet negatief kan zijn (unsigned) en zo groot mogelijk is (long)

void setup(){
  pinMode(ledPin, OUTPUT);
  pinMode(inputPin, INPUT);
  tussenTijd = millis();
}

void loop(){
  if (!digitalRead(inputPin)){
   tussenTijd = millis();
  }
  else{
    if(millis()-tussenTijd > 2000){
      WAARDE = 1;
    }
    else{
      WAARDE = 0;
    }
    digitalWrite(ledPin, WAARDE);
  }
// rest van je programma
}


Hier een versimpeling van de LOOP:
Code: Alles selecteren
Als (geen knop)
  stopwatch op nul.
Anders
  Als tijd-verstreken > 2000 miliseconden, dan WAARDE = 1
  Anders WAARDE = 0
  Zet LED op WAARDE


Opmerkingen:
1) Ik gebruik pin 1 niet, maar pin 10. Pin 1 doet dubbel dienst als UART. Daar gaat je sketch van je PC ook over naar je microcontroller.
Ik heb het even met pin 1 geprobeerd: en ja hoor: storing, sketch werkte niet.
Probeer pin 0 en 1 dus bij voorkeur niet te gebruiken in je sketch. Er staat Tx en Rx bij, dat bovenstaande dubbelfunctie aangeeft.
Wanneer je seriële communicatie in je sketch gebruikt, (Serial.print enzo) zijn je pin 0 en 1 echt bezet.
2) de Loop is verder vrij om te doen en laten wat je wil.

Maar er zijn meer manieren. Die komen misschien later

Succes!
Laatst gewijzigd door pjh op 15 Jan 2013, 00:16, in totaal 1 keer gewijzigd.

Berichten: 30
Geregistreerd: 09 Dec 2012, 17:16

Re: voor een bepaalde periode

Berichtdoor badmintonerke » 14 Jan 2013, 23:34

bedankt voor u snelle een goede uitleg

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: voor een bepaalde periode

Berichtdoor pjh » 15 Jan 2013, 00:05

graag gedaan. :arrow:

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten