LED pro Sekunde kurz blinken lassen

Hallo zusammen!

Ich möchte eine LED pro Sekunde einmal kurz blinken lassen. Dafür möchte ich die Funktion millis() benutzen, um den delay zu umgehen.

Problem dabei ist, dass mit der Funktion die ich dazu gefunden habe (weiter unten) die LED in der einen Sekunde auf HIGH und in der anderen auf LOW gesetzt wird.

Mein Ziel ist es aber, dass die LED pro Sekunde für 100ms nur auf HIGH gesetzt wird.

Hat jemand einen Lösungsansatz für mich? :)

unsigned long previousMillis = 0;
long intervalLED = 1000;
int ledState = LOW;
const int ledPin = 10;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
      unsigned long currentMillis = millis();
      if (currentMillis - previousMillis >= intervalLED) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
        ledState = HIGH;
      } else {
        ledState = LOW;
      }
      digitalWrite(ledPin, ledState);
      }
}

Liebe Grüße

Du könntest z.B. in den if-zweigen, in denen du den LED-Pin HIGH oder LOW setzt, jeweils der Variablen interval_LED einen neuen Wert zuweisen.

Wenn du die LED anschaltest einen kleinen Wert, z.B. 100ms, wenn du sie ausschaltest eine langen, z.B. 900ms.

Hallo,

// each "event" (LED) gets their own tracking variable
unsigned long previousMillisTonLED=0;
unsigned long previousMillisPauseLED=0;

// different intervals for each LED
int intervalTonLED = 500;
int intervalPauseLED = 1000;

// each LED gets a state varaible
boolean PauseLEDstate = false;     // the LED will turn ON in the first iteration of loop()
boolean TonLEDstate = false;     // need to seed the light to be OFF

void setup() {
   pinMode(13, OUTPUT);
   pinMode(12, OUTPUT);
}
void loop() {
   // get current time stamp
   // only need one for both if-statements
   unsigned long currentMillis = millis();

   // time to toggle LED on Pin 12?
   if ((unsigned long)(currentMillis - previousMillisTonLED) >= intervalTonLED) {
      TonLEDstate = !TonLEDstate;
      digitalWrite(12, TonLEDstate);
      // save current time to pin 12's previousMillis
      previousMillisTonLED = currentMillis;
   }

// time to toggle LED on Pin 13?
  if ((unsigned long)(currentMillis - previousMillisPauseLED) >= intervalPauseLED) {
      PauseLEDstate = !PauseLEDstate;
      digitalWrite(13, PauseLEDstate);
      // save current time to pin 12's previousMillis
      previousMillisPauseLED = currentMillis;
  }
}

Gruß und Spaß Andreas

Oooch Andreas!

Nicht gleich immer die fertige Lösung verraten. ;)

trackstriker:
Hat jemand einen Lösungsansatz für mich? :slight_smile:

const byte  LED=13;
void setup() 
{
  pinMode(LED,OUTPUT);

}

void loop()
{
  digitalWrite(LED,millis()%1000<100);
}

:astonished: Jurs ist wieder mal der Künstler. Schafft es 10 zeilen code in eine einzige zu pressen.

Hallo jurs, Du solltest mal ein Buch schreiben- "Programmier-Tricks auf dem Arduino" is nicht zu fassen... Danke schön. Gruß und Spaß Andreas

Nur für den ganz unwahrscheinlichen Fall, der TO versteht die nicht zu toppende Lösung von jurs nicht auf Anhieb und möchte etwas nur mit einer LED (#1) machen, hier mein weniger optimierter Lösungsansatz:

unsigned long previousMillis = 0;
const unsigned int intervalLEDein = 100, intervalLEDaus = 900;
unsigned int intervalLED;
int ledState = LOW;
const int ledPin = 13;

void setup() {
  pinMode(ledPin, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= intervalLED) {
    previousMillis = currentMillis;
    if (ledState == LOW) {
      ledState = HIGH;
      intervalLED = intervalLEDein;
    } else {
      ledState = LOW;
      intervalLED = intervalLEDaus;
    }
    digitalWrite(ledPin, ledState);
  }
}

guntherb: :astonished: Jurs ist wieder mal der Künstler. Schafft es 10 zeilen code in eine einzige zu pressen.

Ja, süß... Hat nur nach 49,x Tagen einen kleinen Hüpfer. Ist bei einer LED nicht dramatisch, aber einen Herzschrittmacher würde ich so nicht bauen.

char jurs = Karma++;

AHHHH!

Ihr erschlagt mich ja mit grandiosen Antworten! :DD

Also zu Andreas:

Ich wollte, wie ihr schon geschrieben habt, nur mit einer LED hantieren.

Der Vorschlag von guntherb hat bei mir schon geklappt. Sogar halbwegs in der Implementierung in mein Projekt :)

Und JURS! Also wirklich! Unverschämt meine Aufgabe so komprimiert und eigentlich auch einfach zu lösen :D Herrlich, top!

Danke euch allen vielmals! :)

Hallo, "Ich wollte, wie ihr schon geschrieben habt, nur mit einer LED hantieren"

Genau das ist das Problem- nicht das Einfachste selbst machen :smiling_imp:

Gruß und Spaß Andreas