Hallo,
ich versuche gerade meinen Arduino mittels IR-Fernbedienung zu steuern.
Prinzipiell klappt das sehr gut mit der IRremote-Library von
http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.htmlIch habe mir nun eine einfache Schaltung mit einer RGB-LED zusammengesteckt.
Wenn ich Taste 1 auf der FB drücke leuchtet die LED rot, bei 2 grün und bei 3 blau. Nach einer Wartezeit von 500ms geht die LED wieder aus. Soweit so gut.
Allerdings möchte ich nun mittels Taste 4 und 5 die Helligkeit der (roten) LED verändern. Ich habe gedacht, wenn ich die Variable redint einfach um 10 vergrößere oder verkleinere sollte die Helligkeit zu- bzw. abnehmen.
Aber scheinbar habe ich da was noch nicht richtig verstanden. Ich lasse mir den Wert von redint per SerialConsole ausgeben, aber der Wert ist nicht der, den ich erwarten würde.
Wenn ich Taste 4 drücke bekomme ich für redint immer 10, bei Taste 5 immer 2388.
Ich vermute nun, dass die Variablen redint, greenint und blueint bei jedem Durchlauf von loop() wieder auf null gesetzt werden. Ist diese Annahme richtig? Und wie kann ich das verhindern?
Hier noch mein Beispielcode:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define REDPIN 9
#define GREENPIN 10
#define BLUEPIN 8
void setup()
{
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn();
}
void loop() {
int redint, greenint, blueint;
if (irrecv.decode(&results)){
Serial.println(results.value, HEX);
if (results.value == 0x10){ //taste1
analogWrite(REDPIN, 255);
delay(500);
analogWrite(REDPIN, 0);
}
if (results.value == 0x810){ //taste 2
analogWrite(GREENPIN, 255);
delay(500);
analogWrite(GREENPIN, 0);
}
if (results.value == 0x410){ //taste 3
analogWrite(BLUEPIN, 255);
delay(500);
analogWrite(BLUEPIN, 0);
}
if (results.value == 0xC10){ //taste 4
redint = redint + 10;
Serial.println(redint);
analogWrite(REDPIN, redint);
}
if (results.value == 0x210){ //taste 5
redint = redint - 10;
Serial.println(redint);
analogWrite(REDPIN, redint);
}
irrecv.resume();
}
}