Push Button LED Blinken

Hallo,

bin wieder mal hier nachdem ich durchgenächtigt habe und nicht weiter komme.

Funktion ist : Taster einmal drücken = 3 mal blinken ----- Taster gedrückt halten = dauer Blinken

das Problem ist hier,die LED sollte beim loslassen der Taste sofort ausgehen.Das tut es nicht
weil der Zähler bis zu seinem Ausgangswert durchläuft und erst dann die LED ausgeht.

Vor lauter Wald sehe ich die Bäume nicht mehr,wäre um ne Unterstützung dankbar.

int ledPin = 7;                  // LED liegt am (digitalen) Pin 13
boolean value = LOW;                  // Startwert der LED
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 450;    // Interval zwischen zwei Änderungen
     
int count = 0;
int button = 6;
int val = 0;
int anz = 6;

void setup()
{

 pinMode(ledPin, OUTPUT);      // Setzt den ledPin (Pin 13) als Ausgang
pinMode(button, INPUT);

}

void loop()
{ 

val = digitalRead(button);  // read input 
if(val==HIGH)
while(count<anz)

// Zeitabfrage

if (millis() - previousMillis > interval){
 
   previousMillis = millis();   // aktuelle Zeit abspeichern
  
  
   // LED Zustand wecheln.

value = !value;

 
   // Wert auf den Ausgang schreiben
 
digitalWrite(ledPin, value);


count++; //Zähler um 1 erhöhen

}

 if(val==LOW&&value==HIGH) 
 
 // das Problem ist hier,die LED sollte
 // beim loslassen der Taste sofort 
 // ausgehen.Das tut es nicht
 // weil der Zähler bis zu seinem
 //  Ausgangswert durchläuft
 // und erst dann die LED ausgeht.

digitalWrite(ledPin,LOW);

while(count=0);

}
  1. Code in Code tags
  2. Setz doch mal geschweifte Klammern, der Übersicht halber.

Dann mach den Rubberduck Test

Rubberduck Test :o :o ??

https://en.m.wikipedia.org/wiki/Rubber_duck_debugging

Ich nehme da gerne meine Frau dafür, weil die sogar noch dumm zurückfragt

Soll das ein Komfortblinker für's Auto geben?

was hälst du davon?

int ledPin = 7;                  // LED liegt am (digitalen) Pin 13
boolean value = LOW;                  // Startwert der LED
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 450;    // Interval zwischen zwei Änderungen
     
int count = 0;
int button = 6;
int val = 0;
int anz = 6;

void setup()
{

  pinMode(ledPin, OUTPUT);      // Setzt den ledPin (Pin 13) als Ausgang
pinMode(button, INPUT);

}

void blinken()
{
  while(count<anz)

 // Zeitabfrage
 
if (millis() - previousMillis > interval){
 
    previousMillis = millis();   // aktuelle Zeit abspeichern
   
   
    // LED Zustand wecheln.
 
 value = !value;
 
 
    // Wert auf den Ausgang schreiben
 
digitalWrite(ledPin, value);


 count++; //Zähler um 1 erhöhen

}

  if(val==LOW&&value==HIGH)
 
  // das Problem ist hier,die LED sollte
  // beim loslassen der Taste sofort
  // ausgehen.Das tut es nicht
  // weil der Zähler bis zu seinem
  //  Ausgangswert durchläuft
  // und erst dann die LED ausgeht.

digitalWrite(ledPin,LOW);

while(count=0);
}
 
void loop()
{
 
val = digitalRead(button);  // read input
if(val==HIGH) blinken();
else digitalWrite(ledPin,LOW);

}

Hi ardubu,

funktioniert leider genau gleich wie mein bisheriger Code.

Wenn manche Menschen nicht fähig sind gescheit auf Fragen zu antworten ,dann sollten sie am besten hier gar nicht sein. Um scheiße zu lesen kann ich mich auch wo anders aufhalten,das gilt vor allem der spanischen Ente !! ist mir egal wofür du deine Frau brauchst.

versuche die while Funktion mit if Anweisungen zu ersetzen, da while den Programmablauf blockiert

Arduama: Hi ardubu,

funktioniert leider genau gleich wie mein bisheriger Code.

Wenn manche Menschen nicht fähig sind gescheit auf Fragen zu antworten ,dann sollten sie am besten hier gar nicht sein. Um scheiße zu lesen kann ich mich auch wo anders aufhalten,das gilt vor allem der spanischen Ente !! ist mir egal wofür du deine Frau brauchst.

Halt den Ball flach und bleib ruhig. Rubber Duck: lies mal was das bedeutet. Das hat nichts mit schlechter Behandlung seiner Ehefrau zu tun.

Grüßw Uwe

Arduama: Funktion ist : Taster einmal drücken = 3 mal blinken ----- Taster gedrückt halten = dauer Blinken

das Problem ist hier,die LED sollte beim loslassen der Taste sofort ausgehen.

Das ist widersprüchlich und insofern nicht zu implementieren.

Arduama: Funktion ist : Taster einmal drücken = 3 mal blinken ----- Taster gedrückt halten = dauer Blinken

das Problem ist hier,die LED sollte beim loslassen der Taste sofort ausgehen.

Das ist nicht logisch, da ein kurz gedrückter Taster die LED auch löschen würde.

ElEspanol: Soll das ein Komfortblinker für's Auto geben?

Das wäre natürlich mit einer FSM machbar:

const int ledPin = 7, tasterPin = 6;
unsigned long previousMillis = 0; // speichert wie viele Sekunden seit derletzten Änderung vergangen sind
const unsigned long interval = 450;    // Interval zwischen zwei Änderungen

int count = 0;
bool val, blinken;
const int anz = 6;
enum {WARTEN, KURZBLINKEN, DAUERBLINKEN};
byte status = WARTEN;
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(tasterPin, INPUT_PULLUP);
}

void loop() {
  val = digitalRead(tasterPin);  // read input

  switch (status) {
    case WARTEN:
      if (val) {
        blinken = true;
        count = 0;
        status = KURZBLINKEN;
      }
      break;
    case KURZBLINKEN:
      if (count >= anz) {
        if (val) {
          status = DAUERBLINKEN;
        } else {
          blinken = false;
          status = WARTEN;
        }
      }
      break;
    case DAUERBLINKEN:
      if (!val) {
        delay(30);    // Entprellen
        blinken = false;
        status = WARTEN;
      }
      break;
  }
  if (blinken) {
    if (millis() - previousMillis >= interval) {
      previousMillis = millis();   // aktuelle Zeit abspeichern
      digitalWrite(ledPin, !digitalRead(ledPin));
      count++; //Zähler um 1 erhöhen
    }
  } else {
    digitalWrite(ledPin, LOW);
  }
}

Arduama: Wenn manche Menschen nicht fähig sind gescheit auf Fragen zu antworten ,dann sollten sie am besten hier gar nicht sein. Um scheiße zu lesen kann ich mich auch wo anders aufhalten,das gilt vor allem der spanischen Ente !! ist mir egal wofür du deine Frau brauchst.

Wer gerade mal 6 Wochen registriert ist und 18 Beiträge auf der Uhr hat, sollte sich doch erwas zurückhalten. Wenn man auf ernstgemeinte Hilfe zur Selbsthilfe so reagiert, muss wohl ernsthafte Probleme haben.

Und es ist dann wohl doch besser, dass du dich woanders aufhälst, wo dein Verhalten besser reinpasst.

P.S. einen Sketch für Komfortblinker, der das macht, was du willst, sogar mit 2 Kanälen, hätte ich noch irgendwo gehabt. Raussuchen werde ich ihn aber nun bestimmt nicht mehr.