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:
#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
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
}
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ß
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.
Zuerst mußt Du die Aktion auf den Einschaltimpuls des Tasters triggern:
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
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.
#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;
}
}