Unten stehender Loop läuft im Prinzip einwandfrei.
Man kann Ein- und ausschalten.
Mit den Tasten 1-7 werden jeweils statische Zustände ( von RGB LED ) geschaltet.
(Hier im Loop von Taste 3 bis 7 rausgeschmissen, das sich das eigentlich immer wiederholt)
Durch die Variable "Verlauf" wird sichergestellt, das die Helligkeitsregelung ankommt, ohne das man die Taste 1-7 nochmal drücken muss.
War etwas Tüftelei, aber klappt.
Ich würde gerne eine weitere Taste( z.B: 8 ) dazu nutzen, einen Verlauf durch die Regenbogenfarben ablaufen zu lassen.
Schrittweise per Tastendruck funktionierte das auch. >:(
Haken an der Sache ist, das der Sketch an der Stelle "if (irrecv.decode(&results)) {"xxxx;}
brav stehenbleibt und auf eine neue Eingabe wartet.
Damit wird der Teil"Regenbogen zeigen" natürlich unterbrochen. Im Grunde läuft er zwar, aber dann wird eben der IR Empfänger nie wieder abgefragt, macht also keinen Sinn.
Fazit:
Ich möchte per IR etwas einschalten, was sich wiederholt, bis ich per IR etwas anderes auswähle.
Da ich das nun schon recht lange möchte, aber funktionabel keinen Schritt weiter komme, frage ich mal in die Runde, ob jemand mir damit konkret helfen kann.
Den Regenbogenverlauf bekomme ich über einen PWMtable (array) problemlos hin, hier geht es um das Abfragen des IR-Empfängers.
void loop() {
//Serial.println(an);
digitalWrite (13, an);
//Serial.println(brightness);
//Serial.println(lastCode);
if (an == 0) {
analogWrite(R, 0);
analogWrite(G, 0);
analogWrite(B, 0);
}
if (irrecv.decode(&results)) {
// Serial.print(results.value); Serial.print(" "); Serial.println(lastCode);
if (results.value == 4294967295)
{
results.value = lastCode;
}
// Wiederholcode ist 4294967295
if ((results.value == 16724175 || Verlauf==1) && (an == 1)) // 1, weiß
{
Serial.println(" Es wurde taste 1 gedrückt");
lastCode = results.value;
Verlauf=1;
analogWrite(R, 255-brightness);
analogWrite(G, 255-brightness);
analogWrite(B, 255-brightness);
delay(10);
//irrecv.resume();
}
if ((results.value == 16718055 || Verlauf==2) && (an == 1)) // 2, blau
{
Serial.println(" Es wurde taste 2 gedrückt");
lastCode = results.value;
Verlauf=2;
analogWrite(R, 0);
analogWrite(G, 0);
analogWrite(B, 255-brightness);
delay(10);
}
if ((results.value == 16754775) && (an == 1)) //+, heller
{
lastCode = results.value;
brightness -=5;
if (brightness<=0)brightness=0;
}
if ((results.value == 16769055) && (an == 1)) //-, dunkler
{
lastCode = results.value;
brightness +=5;
if (brightness>=255)brightness=255;
}
if (results.value == 16769565) // ch+, an/aus
{
an = !an;
delay(100);
irrecv.resume();
}

