Go Down

Topic: Hochzählen mit Taster und zusätzlicher LED Impuls (Read 898 times) previous topic - next topic

Rickor

Mar 30, 2013, 08:24 pm Last Edit: Mar 30, 2013, 08:27 pm by Rickor Reason: 1
Hallo,

ich habe folgenden guten Code zum hochzählen per Taster ohne delay gefunden.
Ich möchte jetzt das mit jedem hochzählen nach 2sek ein Ausgang auf HIGH geht und nach 1sek wieder auf LOW und das ganze mit millis().
Habe dies schon mit einer neuen Funktion probiert, aber Problem ist ja auch das in der loop immer der Taster abgefragt wieder.
Jemand eine Idee wie ich den LED Code in den Taster Code bekomme?
Danke.

Reiko

Tastercode:
Code: [Select]
#include <Bounce.h>

const int buttonPin = 7;
Bounce pushbutton = Bounce(buttonPin, 200);
long timer=0;
int phase=0;

void setup() {
 pinMode(buttonPin, INPUT_PULLUP);
 Serial.begin(9600);
 }

byte previousState = HIGH;        
unsigned int count = 0;            
unsigned long countAt = 0;        
unsigned int countPrinted = 0;    

void loop() {
 if (pushbutton.update()) {
   if (pushbutton.fallingEdge()) {
     count = count + 1;
     countAt = millis();
    }
 } else {
   if (count != countPrinted) {
     unsigned long nowMillis = millis();
     if (nowMillis - countAt > 100) {
       Serial.print("count: ");
       Serial.println(count);
       countPrinted = count;
     }
   }
 }
if (count > 7)
{count=1;}
}


LED kurz an und aus
Code: [Select]

if (phase==0)
{
timer=millis();
}
if ((phase==0) && (millis()-timer > 2000))
{      
Serial.println("LED9 An ");
phase=1;
}
if ((phase==1) && (millis()-timer > 3000))
{
Serial.println("LED9 Aus ");
phase=2; //Ende
}

maverick1509

Nicht ganz verständlich was du willst.
Soll die LED 2 Sek. nach Tasterdruck angehen ?
Was ist wenn du den Taster mehrfach drückst, oder in der Zeit wenn die LED an oder aus ist.
Gib uns etwas mehr Erklärungen, dann sollte das zu lösen sein.
gruß


Rickor

die LED soll 2sekunden nach Tasterdruck angehen und danach nach 1sekunde aus. Während dieser Zeit darf der Taster keine neue Aktion ausführen.
Hab schon überlegt ob was mit Timer.h aber noch nichts mit gemacht.

uwefed

Zuerst mußt Du die Aktion auf den Einschaltimpuls des Tasters triggern:
http://arduino.cc/en/Tutorial/ButtonStateChange
Gleichzeitig setzt Du eine Statusvariable die anzeigt, daß die Aktion gestartet wurde. Wenn diese Statusvariable zB 1 ist wird die Taste ignoriert. und gleichzeitign speicherst Du die Millis() ab.
Dann kontrollierst Du ob 2 Sekunden vergangen sind und schaltest das LED ein und nach 3 sekunden (ab Anfang) schaltest Du das LED wieder aus und löscht die Statusvariable damit ein weiterer Tasendruck möglich ist. 
Grüße Uwe

Rickor

hab es jetzt so geschrieben und funktioniert erstmal so wie es soll. Falls noch jemand eine Idee hat wie es besser geht und noch eine zusätzliche Variable rein muss, dann freu ich mich über Feedback.

Code: [Select]
#include <Bounce.h>

int buttonPin = 7;
Bounce pushbutton = Bounce(buttonPin,2000);
long timer=0;
int LED=0;
int count=0;           

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  Serial.begin(9600);
  }

void loop() {
     if (count > 7)
      {count=1;}
   if (pushbutton.update()) {
    if (pushbutton.fallingEdge()) {
      count = count + 1;
      timer = millis();
Serial.println(count);   
Serial.println("LED1 an");
LED=1;
  }
  }
  if ((millis()-timer > 2500)&&(LED=1))
  {
  Serial.println(count); 
  Serial.println("LED1 aus");
  LED=0;
  }
  }

Go Up