problema controlando led rgb con un botón

Hola, estoy tratando de realizar una lampara la cual cual cambie de color al presionar un
botón, al presionar una vez encienda rojo, presionar otra vez encienda azul y así sucesivamente, pero también quiero que tenga un efecto de luz en el que cambie suavemente entre diferentes colores, mi código lo hace, sin embargo al presionar el botón y llegar a la ultima función y seguir presionando el botón ya no hace el cambio de luz, simplemente se queda en ese estado, llevo horas tratando de resolverlo e investigando pero no consigo el resultado deseado, espero que puedan ayudarme, gracias.
Lo estoy trabajando con arduino uno.

adjunto el esquema de conexiones y el código utilizado.

#define varfija 0

int ledR = 11;
int ledB = 10;
int ledG = 9;

int pinButton = 7;
int buttonValue;
int count = 0;
int brillo;
int button_old = 0;

void setup() {
pinMode(ledR,OUTPUT);
pinMode(ledG,OUTPUT);
pinMode(ledB,OUTPUT);
pinMode(pinButton,INPUT);
}

void loop()
{
buttonValue = digitalRead(pinButton);
if(button_old == 0 && buttonValue == 1)
{
count++;
button_old = 1;
}

if(button_old == 1 && buttonValue == 0)
button_old = 0;

if(count > 4)
count = 0;

if( count == 0 ){
analogWrite(ledR,0);
analogWrite(ledG,0);
analogWrite(ledB,0);
}
else if ( count == 1){
analogWrite(ledR,255);
analogWrite(ledG,0);
analogWrite(ledB,0);
}

else if ( count == 2){
analogWrite(ledR,0);
analogWrite(ledG,255);
analogWrite(ledB,0);
}
else if ( count == 3){
analogWrite(ledR,0);
analogWrite(ledG,0);
analogWrite(ledB,0);
}
else if ( count == 4){
for (int i=1;i<255;i++) {
 analogWrite(ledR, i);
 analogWrite(ledB, varfija);
 analogWrite(ledG, varfija);
 delay(5);
 }
  for (int i=255; i>0; i--) {
 analogWrite(ledR, varfija);
 analogWrite(ledB, i);
 analogWrite(ledG, varfija);
 delay(5);}
  for (int i=0; i<255; i++) {
 analogWrite(ledR, varfija);
 analogWrite(ledB, varfija);
 analogWrite(ledG, i);
 delay(5);
 }
}
}

Tu problema es que cuando entras en la opcion 4 realizas 3 bucles que se repiten 255 veces con retrasos de 5 ms,eso son 5ms2553 = 3825 ms osea casi 4 segundos en los que no va a leer la entrada del boton por que esta ejecutando los bucles.Solo va a leer el boton justo en el siguiente loop despues de acabar,si en ese momento no estas pulsando,count sigue valiendo 4 por lo que vuelve a entrar en los bucles for.