Go Down

Topic: 1knop met 2 led's (Read 885 times) previous topic - next topic

jorimon

Hallo allen,

ben nog nieuw in de Arduino wereld maar probeer zoveel mogelijk op te steken.
Ben ook al een aantal programma's aan het programmeren geweest.

Echter had ik nu een klein projectje in mijn hoofd maar het probleem is dat mijn kennis nog niet ver genoeg gaat om het tot een goed einde te brengen.

Het is de bedoeling dat ik met 1 drukknop 2 led's kan bedienen. Echter zijn er een aantal voorwaarden:
 - LED's uit, ik druk op de knop, beide LED's gaan aan.
 - LED's aan, ik druk op de knop, LED 1 moet direct uitgaan, LED 2 pas na 5 sec.
 - Druk ik in die periode van 5 sec, terug op die knop moeten de LED's gewoon terug aangaan en verder niets gebeuren.

ik had al een gedeelte geprogrammeerd maar dit werkt niet.
Zou er iemand van jullie even willen naar kijken en me tips willen geven waar nog verbetering in de code mogelijk is en hoe ik het wel juist kan laten werken?

Alvast bedankt!

int rood = 13;
int blauw = 12;
int inpin = 2;
int state = LOW;
int reading;
int previous = HIGH;

long time = 0;
long debounce = 200;

void setup () {
  pinMode (inpin, INPUT);
  pinMode (blauw, OUTPUT);
  pinMode (rood, OUTPUT);
}

void loop () {
  reading = digitalRead(inpin);
  if (reading == HIGH && previous == LOW && millis () - time > debounce) {
    if (state == HIGH)
    state = LOW;
    else
    state = HIGH;
   
    time = millis();
  }
  digitalWrite (blauw, state);
  pomp ();
 
  previous = reading;
}

void pomp () {
  reading = digitalRead(inpin);
  if (reading == HIGH && previous == LOW && millis () - time > debounce) {
    if (state == HIGH){
    delay (5000);
    state = LOW;
    }
    else
    state = HIGH;
    time = millis ();
  }
 
 digitalWrite (blauw, state);
}

robtillaart

je moet meer states definieren


state = 0 ==> LEDS uit
state = 1 ==> LEDS aan
state = 2 ==> 1 LED aan 1 LED uit

Code not tested.....

Code: [Select]

const int rood = 13;
const int blauw = 12;
const int inpin = 2;

int state = 0;

unsigned long lastKey = 0;


void setup ()
{
  pinMode (inpin, INPUT);
  pinMode (blauw, OUTPUT);
  pinMode (rood, OUTPUT);
}

void loop ()
{
  int reading = digitalRead(inpin);

  int keyPressed = ((reading == HIGH) && (previous == LOW);

  previous = reading;


  // STATE MACHINE
    switch(state)
    {
    case 0: // BOTH OFF
      if (keyPressed) state = 1; 
      break;

    case 1: // BOTH ON
      if (keyPressed)
      {
        state = 2;
        lastKey = millis();  // onthoud de tijd
      }
      break;

    case 2:
      if (keyPressed) state = 1;
      if (millis() - lastKey > 5000) state = 0;
      break;
    }


  // REFLECT STATE ON LEDS
    switch(state)
    {
    case 0: // BOTH OFF
      digitalWrite(rood, LOW);
      digitalWrite(blauw, LOW);
      break;

    case 1: // BOTH ON
      digitalWrite(rood, HIGH);
      digitalWrite(blauw, HIGH);
      break;

    case 2:  // ONE ON
      digitalWrite(rood, LOW);
      digitalWrite(blauw, HIGH);
      break;
    }


}
[/code[
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

jorimon

Waaawww die werkt!

Bedankt en heb er weer een hoop uit geleerd!

Go Up