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);
}
}
// 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;
}
}
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);
}
}