Gast
#943993
Hallo liebe Programmierer... Ich möchte demnächst eine LED RGB Kugellampe von ebay aus Glas mit einem Durchmesser von 30cm pimpen :) Die Hardware steht grundsätzlich schon. Ich habe einen ATMEGA mit 64kb Programmspeicher, 3x16 bit pwm und adc an dem ein Temperatursensor lm335 hängt zum überprüfen der Temperatur von den LEDs, jeweils 2 stück lumileds mit 3Watt in R G und B mit einem LED Treiber (einstellbare Stromquelle für 3 LEDs dimmbar durch pwm) von linear lt3496 Zum steuern der Lampe habe ich einen irda Empfänger den ich mit einer rgb Fernbedienung die ich im Internet erworben habe anspreche. Das Protokoll der Fernbedienung(bild im Anhang) herauszufinden und durch den µC zu die Daten zu verarbeiten müssten eigentlich nicht so das Problem darstellen. gibt ja genügend fertigen Code für solche Fälle im inet. Also seitens der Hardware habe ich keine Probleme denke ich mal aber ich wollte mal fragen wie man den Programmaufbau grundsätzlich am besten macht. Ich hätte mir gedacht ich hänge den irda Empfänger irgendwie an einen External Interrupt pin und werte dann die Daten aus. Wenn ein gültiges Kommando empfangen wurde setze ich eine Statusvariable auf true CMD_RECEIVED = 1 Im Hauptprogramm bekomme ich diese Änderung der Variable mit und führe die gewünschte Aktion aus und setze die CMD_RECEIVED wieder auf 0. Ich möchte ja mehrere Funktionen mit der Lampe abbilden können. d.h. sie sollte mehrere modi haben. z.b. manuelle Lichtfarbe z.b. weicher Übergang durch die Farbpalette (mit Änderung der Geschwindigkeit) z.b. hartes flashen (Geschwindigkeit einstellbar) z.b. weiches flashen (Geschwindigkeit einstellbar) und so weiter und so fort. Für diesen Zweck hätte eine weitere Statusvariale eingeführt die ich dann immer auf den jeweiligen Status setzen würde, je nachdem welcher Programmablauf gerade ausgeführt wird bzw. werden soll. also so z.b. #define IDLE 0 #define MANUAL_OPERATION 1 #define FLASH 2 #define SMOOTH_FLASH 3 Wenn der Benutzer über die Fernbedienung von z.b. manuellem Programm auf Flashen mit weichen Übergang stellt dann setze ich die statusvariable auf SMOOTH_FLASH, auf diese Änderung der variable reagiere ich in meinem main und führe die gewünschten Operationen aus (starte Timer um die Flash Funktion ausführen zu können und so weiter) Weitere Parameter würde ich dann auch über satus variablen abbilden. z.b. Welche Geschwindigkeit hat der Anwender als letztes gewählt gehabt usw. Wenn der Benutzer ein Kommando zum Ausschalten der Lampe über die Fernbedienung schickt, soll die Lampe die letzten Konfigurationen im EEprom verspeichern und dann beim Einschalten wieder laden und mit den zuletzt verwendeten Parametern weiterarbeiten. Also das ist jetzt mal mein Programmablauf den ich mir ausgedacht habe. Soweit ich weiß nennt sich so eine Programmiertechnik eine state machine oder? Habt ihr eine bessere Idee für die Implementierung des Programmes dieser RGB Lampe oder irgendwelche Tips? Wäre für jeden Hinweis dankbar... schöne Grüße
