Am einfachsten baust dir einen Timer aus der millis() Funktion der dann nach xxx Millisekunden ein und ausschaltet.
Danke Werner, ist lieb gemeint, aber Null Tau wie das geht
Am einfachsten baust dir einen Timer aus der millis() Funktion der dann nach xxx Millisekunden ein und ausschaltet.
Danke Werner, ist lieb gemeint, aber Null Tau wie das geht
[...] Code für den Arduino [...]
Puuuh, mit den "WS2812 LEDs" kenn ich mich nicht aus.
Aber einen simplen Code für Deine Stiegenhausbeleuchtung mit dem Arduino UNO würde so aussehen:
(Hier im Beispiel mit nur 4 Stück LEDs)
******************************************************************
int LED1 = 7;
int LED2 = 8;
int LED3 = 9;
int LED4 = 10;
void setup()
{
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
}
void loop()
{
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED1, LOW);
delay(1000);
digitalWrite(LED3, HIGH);
delay(500);
digitalWrite(LED2, LOW);
delay(1000);
digitalWrite(LED4, HIGH);
delay(500);
digitalWrite(LED3, LOW);
delay(1000);
digitalWrite(LED1, HIGH);
delay(500);
digitalWrite(LED4, LOW);
//delay(1000);
}
*******************************************************************
Anmerkung:
"delay(1000)" entspricht +/- einer Sekunde.
Du kannst selbst damit experimentieren um zu einem akzeptablen Ergebnis zu kommen.
Ich habe mit diesen Code 4 Stück "low-current" LEDs getestet.
Stromaufnahme pro Stück nur 2mA.
Wenn Du mit den handelsüblichen 20mA-LEDs arbeiten willst/mußt, so könnte/sollte man die LEDs via Transistoren treiben...würde die Strombelastung des Arduino schonen.
(Weil du ja betreffend Stockwerke 5 und 6 bzw. 8 und 9 gleich mehrere LEDs in Betrieb nehmen willst...dazwischen ist noch das Stockwerk 7...
Bin mir unsicher, wieviel mA der Arduino unbeschadet ausgeben kann/will...bevor er verraucht...)
Zu meinem Code:
Jeder Arduino-User schlägt bei diesen Programmzeilen die Hände über den Kopf zusammen...
Ja, ich weiß: Der Code ist vollkommen umständlich...aber er funktioniert (zumindest zur Stiegenhausbeleuchtung des Leuchtturms...)
Wie von User Werner71 erklärt kann man das Programm auch mit dem Befehl millis() schreiben.
millis() hat bei vielen Arduino-Codes Vorteile; bei Deiner Stiegenhausbeleuchtung reicht auch der Befehl delay().
So zumindest meine Meinung nach meinem (geringen) Arduino-Wissensstand....
Was hätten Deine "WS2812-LEDs" eigentlich für Vorteile gegenüber simplen low-current-LEDs?
Kann man bei deren Einsatz auf den µC verzichten?
Keine Ahnung....
Happy researching,
LG Martin
Danke Martin,
werde diesen mal ausprobieren
Liebe Grüße Ben
[...] ausprobieren [...]
Oooops, aber bitte nicht mit den "WS2812-LEDs"...ich habe definitiv keine Ahnung, ob das mit denen auch funktioniert.
Muss mich erst in das Thema "WS2812" einlesen....stundenlang...
Nimm normale LEDs.
Ich habe beim Test für meinen Code die "low-current-LEDs, 2mA" mit jeweils 220 Ω in Reihe geschalten; mit dem Arduino UNO.
Stromaufnahme seitens Spannungsquelle maxmax. (all incl.) 50mA.
Passt für mich.
Wenn Du mit 20mA-LEDs arbeitest, dann nimm größere Widerstände; 680 Ω oder besser (testweise) höher...damit sicher nix raucht...
Arduino ist lustig; macht Spaß.
Bin ja auch nur ein "Copy/Paste"-Typ, aber wenn man damit ein paar Nächte verbringt dann versteht man zumindest die simplesten Programme...
Have fun,
LG Martin
Okay, muss mir das dann zuerst mal zusammenstellen
Was hätten Deine "WS2812-LEDs" eigentlich für Vorteile gegenüber simplen low-current-LEDs?
Kann man bei deren Einsatz auf den µC verzichten?
Der Entscheidende Vorteil der Technik ist man kann etwa >4000 LEDs mit einer einzigen Leitung (OK +2 Für Stromversorgung) betreiben. Die Verkabelung wird da supereinfach. Bibliotheken für's BitBanging um das Steuersignal zu erzeugen gibts von Adafruit und anderen zu Hauf' im Internet.
Jede WS2812 LED hat einen Prozessor drinnen der die Ansteuerung der LEDs macht. Versorgungsspannung ist 5V. Diese LEDs sprechen auf keine normalen "Strom dran - leuchtet" Methode an. Dafür hat das Bauteil aber Helligkeitskontante via Stromquellen eingebaut. Man kann die Farbe und Helligkeit beliebig einstellen weil das RGB LEDs sind.
Das Steuersignal für die WS2812'er LEDs sind für die klassischen 8Bit Arduinos schon recht "anstrendend" über die verfügbaren Bibliotheken geht das aber recht einfach und unkompliziert. Für den Einstieg einfach mal die Beispielprogramme anschauen und für die eigenen Bedürfnisse dann umbauen und erweitern. Voel Spaß damit!
-AH-
Danke Werner, ist lieb gemeint, aber Null Tau wie das geht
ok, etwas Tau hier:
void setup() {
// put your setup code here, to run once:
}
// Zeit in ms ab Start des Ablaufes
#define Led_1_ein 100
#define Led_1_aus 1000
#define Led_2_ein 500
#define Led_2_aus 1500
#define Led_3_ein 3000
#define Led_3_aus 4000
#define maxZeit 10000
#define LED_1_einschalten {pixels.setPixelColor(1, pixels.Color(255,255,255));}
#define LED_1_ausschalten {....siehe WS2812 Anleitung...}
unsigned long millis_alt;
void loop() {
// put your main code here, to run repeatedly:
while (0)
{
millis_alt=millis();fertig =0; // Startbedingungen für Schleife
while (fertig==0)
{
if (millis()-millis_alt>=Led_1_ein)&&(millis()-millis_alt<Led_1_aus) LED_1_einschalten;
else LED_1_ausschalten;
if (millis()-millis_alt>=Led_2_ein)&&(millis()-millis_alt<Led_2_aus) LED_2_einschalten;
else LED_2_ausschalten;
if (millis()-millis_alt>=maxZeit) fertig =1; // 1x wurde Ablauf durchgeführt, raus aus der Schleife und neuen Ablauf starten
}
}
Alles anzeigen
In dem Fall kannst beliebige Zeiten wann eine LED ein oder ausgeht definieren, solange es innerhalb der maxZeit ist. Hier würde der Ablauf alle 10s starten und daher müssen die LED auch innerhalb dieser Zeit ein- und ausgeschalten werden.
LED 1 leuchtet ab 100ms nach Start bis 1000ms
LED 2 ab 500ms bis 1500ms
Zeiten nach Belieben ändern.
Mit den delays wie vorher gezeigt geht es auch, aber wenn es komplizierter wird geht es mit einem Timer einfacher. Vor allem wenn der Arduino auch noch was anderes machen soll, nur mit Stiegenlicht langweilt der sich zu tode
Das WS2812 musst extra einbinden wie etwa hier erklärt.
Ich verwende oft die #defines, der exakte Befehl für die Schnittstelle wird einmal festgelegt und unten im Programm steht dann die leicht lesbare Benennung.
Vielen lieben Dank Werner.
Habe zwar Angefangen mit leichten Programmierungen um mal zu lernen, aber dein Code hilft unheimlich weiter.
hat beruflich damit zu tun
Danke für die Blumen, aber zu den echten Gurus die statt den Nullen und Einsern live die Matrix erkennen ist ein beachtlicher Abstand...