const int pin_rojo = 8;  // Número de PIN que le corresponde al LED ROJO
const int pin_verde = 9; // Número de PIN que le corresponde al LED VERDE
const int pin_azul = 10; // Número de PIN que le corresponde al LED AZUL

int rojo, verde, azul;   // Almacenan la intensidad de cada color.

String comando; // Almacena el comando que se introduzca.

// Esta función corre una sola vez al encender la Arduino, y se utiliza para definir las configuraciones iniciales.
void setup()
{
  // Aquí se define el comportamiento de cada PIN como 'salida' de señal.
  pinMode(pin_rojo, OUTPUT);
  pinMode(pin_verde, OUTPUT);
  pinMode(pin_azul, OUTPUT);

  // Con esta función se inicia la comunicación necesaria para poder enviar mensajes del arduino a la computadora (consola).
  Serial.begin(9600);
}

// Esta función corre una y otra vez hasta el infinito
void loop()
{
  // Revisamos si la computadora se ha comuncado con nuestro programa.
  while (Serial.available() > 0)
  {
    // Leemos y almacenamos el comando introducido.
    comando = Serial.readString();
    limpiaComando(&comando);
    Serial.println(comando);

    // Revisamos si el comando coincide con algún color.
    // ____________________________________________________________________________________________________________________
    if (comando.equalsIgnoreCase("rojo"))
    {
      ponColor(255, 0, 0);
    }
    else if (comando.equalsIgnoreCase("verde"))
    {
      ponColor(0, 255, 0);
    }
    else if (comando.equalsIgnoreCase("azul"))
    {
      ponColor(0, 0, 255);
    }
    else
    {
      ponColor(0, 0, 0);
    }
    // ____________________________________________________________________________________________________________________
    //       LISTA DE COLORES
    // ******************************
    // Cyan     = Verde y Azul
    // Magenta  = Rojo y Azul
    // Amarillo = Rojo y Verde
    // Blanco   = Rojo, Verde y Azul
    // Negro    = Todos apagados
    // ******************************
  }
}

// Quitamos cualquier carácter que pueda provocar ruido cuando analizemos el comando.
void limpiaComando(String * texto)
{
  texto->trim();
  texto->replace('\n', '\0');
  texto->replace('\r', '\0');
}

// Con esta función aplicamos la intensidad del color a cada LED.
void ponColor(int rojo, int verde, int azul)
{
  analogWrite(pin_rojo, rojo);
  analogWrite(pin_verde, verde);
  analogWrite(pin_azul, azul);
}

//Siguiente explicación: Carga (upload) y ejecución del programa en Arduino