diminuire valore pwm per intensita led

hola!
ho un problema che non riesco a capire..

ho preso una stip led e lo collegata ad arduino, usando anche il telecomando ad infrarossi.

Sono arrivato a far funzionare i bottoni ed accendere i vari colori.

Ora voglio diminuire ed alzare l'intensità di luce, ma credo che mi manchi un riferimento perchè appena premo il bottone non si abbassa di 10 come dovrebbe ma m esce una luce diversa (dal bianco diventa giallo), e mi si blocca tutto.
ho provato a mettere un delay ma niente.

qui il codice fino ad esso:

#include <IRremote.h>

#define led1 9
#define led2 10
#define led3 11

int RECV_PIN = 3;

IRrecv irrecv(RECV_PIN);
IRsend irsend;

int val = 0; // variable to store the read value

decode_results results;
byte r = 0;
byte g = 0;
byte b = 0;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {

analogWrite(led1,r);
analogWrite(led2,g);
analogWrite(led3,b);

if (irrecv.decode(&results)) {
// storeCode(&results);
//Serial.println(results->value,HEX);
if (results.value == 0xF740BF) {
r=0;
g=0;
b=0;
Serial.println("spento");
}
if (results.value == 0xF7C03F) {
r=255;
g=255;
b=255;
Serial.println("acceso");
}
if (results.value == 0xF720DF) {
r=0;
g=255;
b=0;
Serial.println("rosso");
}
if (results.value == 0xF7A05F) {
r=255;
g=0;
b=0;
Serial.println("verde");
}
if (results.value == 0xF7609F) {
r=0;
g=0;
b=255;
Serial.println("blu");
}
if (results.value == 0xF7E01F) {
r=255;
g=255;
b=255;
Serial.println("bianco");
}

if((results.value==0xF700FF) && (r<245) && (g<245) && (b<245)) { //245+10=255
r = r+10;
g = g+10;
b = b+10;
Serial.println("aumento");
}

if (results.value==0xF7807F) {
r = r-10;
g = g-10;
b = b-10;
Serial.println("diminuisco");
}

irrecv.resume(); // resume receiver

}
delay(10);
}

il problema è che non sono capace a dichiarare più valori dentro analogwrite, perchè da

if (results.value==0xF7807F) {
r = r-10;
g = g-10;
b = b-10;
Serial.println("diminuisco");
}

tolgo g e b

if (results.value==0xF7807F) {
r = r-10;
Serial.println("diminuisco");
}

il codice funziona e non si blocca, come faccio ad aggiungere gli altri 2 led?

La libreria IRremote usa un timer e anche i PWM usano i timer (sempre 2 pin un timer).
Siccuramente le due cose vanno in conflitto. Adesso purtroppo non so dirti quali pin PWM non possono essere usati in contemporanea con la IRremote. Prova a cambiare i Pin PWM una alla volta.
Ciao Uwe

mm...

adesso ho cambiato codice, ma la solfa non cambia..

questo funziona:
if(results.value == red){
analogWrite(led1,0);
analogWrite(led2,255);
analogWrite(led3,0);
brightness=255;

questo no:

if (((results.value == fademinus) || (results.value == fademinus1)) && (brightness > 0)) {
brightness = brightness - fade;
Serial.print("Luminosita' decrementata a: ");
Serial.println(brightness);
analogWrite(led1, brightness);
analogWrite(led2, brightness);
analogWrite(led3, brightness);

quindi il problema non credo siano i pin pwm, ma è come se cambiando il valore brightness, legga solo il primo e vada in palla.
ho provato diverse soluzioni, come incorporare le1,led2,led3 con un #define, ma non funziona o non sono capace io..

Correspondenza Timer con pin PWM

Timer output	Arduino output	Chip pin	Pin name
OC0A			6	12		PD6
OC0B			5	11		PD5
OC1A			9	15		PB1
OC1B			10	16		PB2
OC2A			11	17		PB3
OC2B			3	5		PD3

La libreria IRremote usa il Timer 2 percui non funzionano i pin PWm 3 e 11.
Ciao Uwe