Hallo zusammen,
ich bin gerade dabei, mich damit zu befassen LEDs mit dem Arduino zu dimmen.
Das Blink without Delay Beispiel habe ich im großen und ganzen soweit verstanden
Da ich den Arduino für den Modellbau nutze, um die Lampen und LEDs zu steuern, bin ich nun auf ein Problem gestoßen, bei dem ich nicht weiter komme und Hilfe benötige:
Nun zu meinem Problem, das einfaden und ausfaden der Helligkeit mit den Arduino habe ich soweit geschafft nun möchte ich, wenn die analogen Ausgänge des Arduinos einen bestimmten PWM-Wert haben dieser über eine gewisse Zeit gehalten wird bevor dieser wieder runtergedimmt wird.
Das ganze müsste aber ohne Delay realisiert werden, da nebenbei noch andere Sachen über den UNO erledigt werden sollen.
Hier ersteinmal den Sketch wie er ohne die Haltefunktion aussieht.
[code]
int led = 3;
unsigned long fadestartzeit = 0;
unsigned long fadestartzeitalt = 0;
int fadedauer = 100;
int fadestartwert = 0;
int fadeoutdauer = 200;
boolean start = LOW;
boolean hochdimmen = true;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//LANGSAMES EINFADEN
fadestartzeit = millis();
//Langsames Einfaden, wenn Start LOW ist und fadedauer vergangen ist
if ((start == LOW) && fadestartzeit - fadestartzeitalt >= fadedauer) {
fadestartzeitalt = fadestartzeit;
fadestartwert++;
analogWrite(led, fadestartwert);
}
//Wennd er fadewert größer als 255 ist wird er auf 255 gesetzt
if (fadestartwert >= 255) {
fadestartwert = 255;
Meine Idee wäre diese gewesen, jedoch funktioniert diese nicht könnte mir jemand erklären, warum meine Idee nich funktioniert?
[code]
int led = 3;
unsigned long fadestartzeit = 0;
unsigned long fadestartzeitalt = 0;
int fadedauer = 100;
int fadestartwert = 0;
int fadeoutdauer = 200;
boolean start = LOW;
boolean hochdimmen = true;
boolean haltefunktion = LOW;
unsigned long haltezeit = 0;
unsigned long haltezeitstarten = 0;
int halteinterval = 3000;
void setup() {
// put your setup code here, to run once:
pinMode(led, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
//LANGSAMES EINFADEN
fadestartzeit = millis();
//Langsames Einfaden, wenn Start LOW ist und fadedauer vergangen ist
if ((start == LOW) && fadestartzeit - fadestartzeitalt >= fadedauer) {
fadestartzeitalt = fadestartzeit;
fadestartwert++;
analogWrite(led, fadestartwert);
}
//Wennd er fadewert größer als 255 ist wird er auf 255 gesetzt
if (fadestartwert >= 255) {
fadestartwert = 255;
haltezeitstarten = millis();
haltefunktion = HIGH;
}
if ((haltefunktion == HIGH) && haltezeitstarten - haltezeit >= halteinterval) {
haltezeit = haltezeitstarten
start = HIGH;
}
//LANGSAMNES AUSFADEN
//Wenn Start HIGH und fadeoutdauer vergangen
if ((start == HIGH) && fadestartzeit - fadestartzeitalt >= fadeoutdauer) {
fadestartzeitalt = fadestartzeit;
fadestartwert--;
analogWrite(led, fadestartwert);
}
if (fadestartwert == 0) {
start = LOW;
}
}
Würde mich sehr freuen, wenn mir jemand meinen Fehler erklären könnte oder mir eine Idee geben könnte, wie ich die Haltefunktion realisieren könnte