Wie bekomme ich das Blinken weg?
Hi,
ich komme gleich zur Sache.
Ich bin relativ neu im Pogrammieren und habe mir ein Programm zur Frequenzmodulation von LEDs geschrieben.
Das Problem ist allerdings, dass ich ein Blinken der 3 (Rot, Grün, Blau) LEDs habe.
Der Grund dafür ist der utime.sleep-Befehl. Um die LED aus- bzw. anzuschalten, addieren sich die Wartezeiten auf alle LEDs. Ich weiß aber nicht, wie ich das ohne den utime.sleep-Befehl hinbekommen soll.
Das hier ist der Teil des Codes, um den es sich handelt:
def freq_r():
led_r.value(0)
utime.sleep(intervall_r_aus)
led_r.value(1)
utime.sleep(intervall_r_ein)
def freq_b():
led_r.value(0)
utime.sleep(intervall_b_aus)
led_r.value(1)
utime.sleep(intervall_b_ein)
def freq_g():
led_r.value(0)
utime.sleep(intervall_g_aus)
led_r.value(1)
utime.sleep(intervall_g_ein)
Leider kann ich nicht den kompletten Code einfügen. Ich hoffe allerdings, das reicht.
Wenn jemand eine Lösung kennt, würde ich mich über eine Antwort freuen.
LG Paul
2 Antworten
Hallo Paul! Es scheint, dass das Blinken in deinem Code durch die Verwendung von utime.sleep entsteht. Eine Möglichkeit, das Blinken loszuwerden, besteht darin, die Verzögerungen durch die Verwendung von Timern zu ersetzen. Dadurch kannst du die LEDs unabhängig voneinander steuern, ohne dass sie sich gegenseitig beeinflussen.Hier ist ein Beispiel, wie du das erreichen könntest, indem du die "Timer"-Klasse in MicroPython verwendest:
from machine import Pin, Timer
led_r = Pin(RED_LED_PIN, Pin.OUT)
led_g = Pin(GREEN_LED_PIN, Pin.OUT)
led_b = Pin(BLUE_LED_PIN, Pin.OUT)
timer_r = Timer()
timer_g = Timer()
timer_b = Timer()
def freq_r(timer):
led_r.value(not led_r.value())
def freq_g(timer):
led_g.value(not led_g.value())
def freq_b(timer):
led_b.value(not led_b.value())
# Setze die gewünschten Intervalle für das Ein- und Ausschalten der LEDs
intervall_r_aus = 500
intervall_r_ein = 500
intervall_g_aus = 750
intervall_g_ein = 750
intervall_b_aus = 1000
intervall_b_ein = 1000
# Erzeuge Timer für jede LED und starte sie
timer_r.init(period=intervall_r_aus + intervall_r_ein, mode=Timer.PERIODIC, callback=freq_r)
timer_g.init(period=intervall_g_aus + intervall_g_ein, mode=Timer.PERIODIC, callback=freq_g)
timer_b.init(period=intervall_b_aus + intervall_b_ein, mode=Timer.PERIODIC, callback=freq_b)
hoffe es füktioniert so besser
Danke ich werd`s gleich mal ausprobieren und gucken ob es so klappt :)
ich weißt warum es nicht geht ich benutzte keine ganzzahlen... mein fehler xD
Es blinkt, weil Du die LED an und aus schaltest. Schaltest Du nur an, bleibt sie an.
Es geht ja darum sie mit Frequenzmodulation , unterschiedlich hell zu machen daher brauche ich das schnelle an und ausschalten der led`s
Was für ein Gerät ist das? Normalerweise ist die Frequenzmodulation nicht Deine Aufgabe. Wenn Du es aber so machen ulkst und wenn man ein Blinken sieht, sind die Intervalle viel zu lang.
Pi Pico , und ich weiß ja das die Intervalle zu lang sind da sie sich ja gegenseitig addieren , also rot geht an und aus ,dann blau , dann grün und erst dann wieder rot weißt du wie ich meine?
Sag doch erstmal, was Du wirklich haben willst, und dann kann man Dir raten. Code ohne alles wird dann halt zum Ratespiel. Wenn Du nicht willst, dass die Dinger nacheinander blinken, dann musst Du erst anschalten und dann warten.
Hat der Pico keine PWM Pins?
Naja also ich hab ne Led kette ohne Steuergerät ,und den Pico zuhause Rumliegen hab die also verkabelt und angeschlossen ,da ich aber nur Strom ein und aus geben kann muss ich die eben schnell an und ausschalten das ich verschiedene Farben erzeugen kann ,aber durch diesen utime.sleep befehl warten die immer aufeinander und flackern dann eben oder sind halt zu hell(wenn ich aus und dann ein benutze) und mehr als den code von oben hab ich noch nicht bis auf eine While true schleife die alle definierten Funktionen nacheinander ausführt.
Was schaltet Dein Pico? Musst aufpassen, dass er Dir nicht durchbrennt.
Also, Du kannst ja eine Methode schreiben, die erstmal alle gleichzeitig anschaltet, etwas wartet, dann alle gleichzeitig ausschaltet. Damit hast Du schonmal ein weißes Licht, das dunkler ist. Dann mach die Zeiten so kurz wie es geht.
UND SCHAU NACH, OB PICO WIRKLICH KEINE PWM PINS HAT.
NATÜRLICH hat er welche. Schau nach wie das geht, das löst alle Deine Probleme. Duckduckgo erstes Resultat scheint mir sinnvoll.
Wenn PWM port Pulse Width Modulation Ports sind dann alle GP pins PWM pins laut google aber ich weiß ehrlich gesagt nicht wie man die anders ansteuert . Und der Pico ist an mein PC angeschlossen und Schaltet nur Transistoren die dann 12 V schalten.
Guck mal, Du machst hier jetzt seit mindestens ner Stunde rum, wieso googelst Du nicht ausgehend von meinem Tipp etwas, da gibt es Leute, die machen Blogposts mit Fotos und Beispielcode.
also ich hab das jetzt mal so übernommen und die werte angepasst ,bekomme dann aber diesen error : Traceback (most recent call last):
File "<stdin>", line 42, in <module>
TypeError: can't convert float to int <-- line 42 ist timer_r.init(...) und gesamt verstehe ich den befehl Timer nicht so wirklich, könntest du mir den versuchen zu erklären.