Led rgb no se detiene enseguida

Saludos chicos acudo a ustedes por un problema que tengo resulta que estaba haciendo unas pequeñas lamparas RGB con un pulsador que cambia de estados. A color ROJO,VERDE, AZUL Y MULTICOLORES. Pero en la parte de MULTICOLORES no se cambia enseguida tengo que esperar a que se acabe la secuencia para poder cambiar a color ROJO AZUL O VERDE. Tengo entendido que este es por el delay. COMO SOLUCIONARÍA PARA QUE SE CAMBIE LA SECUENCIA RAPIDAMENTE.

int red_light_pin = 5;
int green_light_pin = 4;
int blue_light_pin = 3;
int boton = 2;
int Gestion;
int contador;
int i = 0;

void setup ()
{
pinMode(red_light_pin, OUTPUT);
pinMode(green_light_pin, OUTPUT);
pinMode(blue_light_pin, OUTPUT);
pinMode (boton, INPUT);
Serial.begin (9600);
int espera = 200;
int time = 0;
}

void loop ()
{
int espera = 200;
int time = 0;
i = 0;

if (digitalRead (boton) == HIGH && millis() - time > espera)
{
Gestion ++;
Serial.print (Gestion);
}

if (Gestion == 6)
Gestion = 0;

switch (Gestion)
{
case 0:

  RGB_color(255, 255, 255);
  break;

case 1:
  RGB_color(0, 255, 255);


  break;

case 2:
  RGB_color(255, 255, 0);
  break;

case 3:
  RGB_color(255, 0, 255);
  break;

// ESTE ES EL PROBLEMA
case 4:
  RGB_color ( 0, 255 , 255 ) ; // Rojo
  delay( 1000 ) ;
  RGB_color ( 255 , 0 , 255 ) ; // Verde
  delay( 1000 ) ;
  RGB_color ( 255 , 255 , 0 ) ; // Azul
  delay( 1000 ) ;
  RGB_color ( 0 , 0 , 0 ) ; // Frambuesa
  delay( 1000 ) ;
  RGB_color ( 255 , 0 , 0 ) ; // Cian
  delay( 1000 ) ;
  RGB_color ( 0 , 255 , 0 ) ; // Magenta
  delay ( 1000 ) ;
  RGB_color ( 0 , 0 , 255 ) ; // Amarillo
  delay ( 1000 ) ;
  RGB_color ( 255 , 255 , 0 ) ; // Blanco
  delay ( 1000 ) ;
  break;
case 5:

  RGB_color(255, 255, 255); // OFF
  break;


case 6:
  time = millis();

}

delay (300);
}

void RGB_color(int red_light_value, int green_light_value, int blue_light_value)
{
analogWrite(red_light_pin, red_light_value);
analogWrite(green_light_pin, green_light_value);
analogWrite(blue_light_pin, blue_light_value);
}
`

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>


Tienes que esperar por usar delay()
Si estas comenzando a programar te comento olvida el uso del delay().
Ve a Documentación y lee los tutoriales de millis() y de máquina de estados.
Tal vez no te guste al comienzo pero es la forma de lograr un código fluido.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.