switch con strings.

Buenas tardes, estoy intentando hacer algo pero creo que no es posible, (por todo lo que he estado consultando en la web).

lo que estoy intentando es lo siguiente: quiero usar un switch y en vez de que me reconozca un numero o un caracter, quiero que me reconozca un string, el cual haya introducido previamente por teclado y almacenado en una variable de ipo string.

creo que deberia ser algo del tipo:

while (Serial.available())
              {
                delay(3);  
                char c = Serial.read();
                cadena8 += c; 
              }
              
          delay(25);

  //y una vez que tengo el string cadena8

          switch("cadena8")

                    {  
                         case " hola ":
                                            sentencias varias.....
                                            sentencias varias.....
                                            break;

                         case "adios":
                                            .....................
                                            .....................
                                            break;
                    }

Quien dijo que no es posible?
El tema es que cometes muchos errores de sintaxis.
Si cadena8 es un String como supongo cadena8 no puede estar entre comillas
Aca te dejo un ejemplo de como debe usarse un string y el switch case

void ledColor(char color) {
 switch (color) {
   case "clear":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 0);
     break;
   case "red":
     digitalWrite(redPin, 255);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 0);
     break;
   case "green":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 255);
     digitalWrite(bluePin, 0);
     break;
   case "blue":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 255);
     break;
 }
}

Uhmm... no es por llevar la contraria... pero de mis tiempos de estudiantes, el uso de cadenas y switch en C no ha sido posible. Siempre he tenido en cuenta que en C el case debe tener una valor numerico...

El código de Surbyte:

#define redPin 2
#define greenPin 3
#define bluePin 4

void ledColor(char color) {
 switch (color) {
   case "clear":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 0);
     break;
   case "red":
     digitalWrite(redPin, 255);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 0);
     break;
   case "green":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 255);
     digitalWrite(bluePin, 0);
     break;
   case "blue":
     digitalWrite(redPin, 0);
     digitalWrite(greenPin, 0);
     digitalWrite(bluePin, 255);
     break;
 }
}

Da los siguientes errores:

prueba_switch.ino: In function 'void ledColor(char)':
prueba_switch.ino:7:9: error: case label does not reduce to an integer constant
prueba_switch.ino:12:9: error: case label does not reduce to an integer constant
prueba_switch.ino:17:9: error: case label does not reduce to an integer constant
prueba_switch.ino:22:9: error: case label does not reduce to an integer constant
Error de compilación

El IDE de arduino esta basado en C++, así que he pensado que a lo mejor se le ha ocurrido a alguien que usando objetos se podría realizar. El objeto String ya está definido en el ide... vamos a probarlo:

String s;

void setup()
{
  s="red";
}

void loop()
{
  switch (s)
  {
    case "red": break;
    case "white": break;
    default: break;
  }
}

Y tira el siguiente error:

prueba_switch.ino: In function 'void loop()':
prueba_switch.ino:10:12: error: switch quantity not an integer
Error de compilación

Con lo cual tampoco, funciona.

Ohhh, alguien ha hablado por mi! :o

De hecho, algo así iba a decir yo. Una vez lo intenté y me aparecían los mismos errores de compilación. Al final lo que hice fueron puros if’s (no anidados).

Hasta donde yo sé, en Java sí es posible hacer eso; no sé en otros lenguajes…

Yo lo tomé del foro en inglés, verificado por ellos no por mi.
Luego lo miro.
Y acabo de ver que terminaron cambiando los strings por caracteres.. jaja

Como no habla el interesado no me preocupo hasta entonces.