Hallo,
ich habe hier ein Verständnisproblem:
Ich habe mir eine Schaltung aufgebaut, mit der ich einen LED-Streifen per IR-Fernbedienung steuern will.
Zum Testen habe ich erst mal nur drei Tasten belegt.
Der Sketch sollte recht einfach sein: Zuerst wird der IR-Empfänger abgefragt und das Ergebnis in die Variable "fbcode" geschrieben.
Nun soll je nach Inhalt von fbcode eine bestimmte Funktion aufgerufen werden.
Die Funktion dimmt mittels einer for-Schleife die jeweilige Farbe, schreibt einen Wert in fbcode und soll dann enden.
Allerdings werden die LEDs immer zwei mal gedimmt und die Funktion endet erst dann.
Das verstehe ich nicht ganz, normalerweise sollte doch fbcode schon vor dem ersten Dimm-Durchlauf verändert werden und somit einen weiteren Aufruf der Funktion verhindern.
Wo liegt mein Denkfehler?
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define REDPIN 5
#define GREENPIN 6
#define BLUEPIN 10
void setup()
{
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
int redint, greenint, blueint;
unsigned long time;
unsigned long last = millis();
unsigned long fbcode;
void loop() {
if (irrecv.decode(&results)){
//Serial.println(results.value, HEX);
if (millis() - last > 250) {
fbcode = (results.value);
Serial.println(fbcode, HEX);
}
last = millis();
irrecv.resume();
}
if (fbcode == 0x10){
machrot();
}
if (fbcode == 0x810){
machgruen();
}
if (fbcode == 0x410){
machblau();
}
}
void machrot(){
fbcode = 0x12345;
for (redint = 255; redint > 0; redint--){
analogWrite(REDPIN, redint);
delay(10);
}
analogWrite(REDPIN, 0);
}
void machgruen(){
fbcode = 0x12345;
for (greenint = 255; greenint > 0; greenint--){
analogWrite(GREENPIN, greenint);
delay(10);
}
analogWrite(GREENPIN, 0);
}
void machblau(){
fbcode = 0x12345;
for (blueint = 255; blueint > 0; blueint--){
analogWrite(BLUEPIN, blueint);
delay(10);
}
analogWrite(BLUEPIN, 0);
}
Und noch eine Frage: Wie kann ich, während eine Funktion läuft überprüfen, ob inzwischen eine andere Taste der Fernbedienung gedrückt wurde und die laufende Funktion abbrechen?
mfG,
f.