Pages: [1]   Go Down
Author Topic: Hochzählen mit Taster und zusätzlicher LED Impuls  (Read 771 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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:
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
}
« Last Edit: March 30, 2013, 02:27:37 pm by Rickor » Logged

Offline Offline
Sr. Member
****
Karma: 10
Posts: 361
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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ß

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21871
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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;
  }
  }
Logged

Pages: [1]   Go Up
Jump to: