Convertir un string a int

Hola, tengo un problema con un sketch, y como bien dice el título del post, estoy intentando pasar una variable que es String a un int.

String uv = "0"; 

uv = numeroMostrar(uvIntensity);

String numeroMostrar(float uvIntensity){
  
  String UVIndex = "0";
  
if (uvIntensity>=0 && uvIntensity<=2.78)
  {
    UVIndex = "1";
  }else if (uvIntensity>=2.79 && uvIntensity<=5.57)
  {
    UVIndex = "2";
  }
  else if (uvIntensity>5.57 && uvIntensity<=8.35)
  {
    UVIndex = "3";
  }else if (uvIntensity>8.35 && uvIntensity<=11.1)
  {
    UVIndex = "4";
  }
  else if (uvIntensity>11.1 && uvIntensity<=13.92)
  {
    UVIndex = "5";
  }else if (uvIntensity>13.92 && uvIntensity<=16.7)
  {
    UVIndex = "6";
  }else if (uvIntensity>16.7 && uvIntensity<=19.5)
  {
    UVIndex = "7";
  }else if (uvIntensity>19.5 && uvIntensity<=22.2)
  {
    UVIndex = "8";
  }
  else if (uvIntensity>22.2 && uvIntensity<=25)
  {
    UVIndex = "9";
  }
  else if (uvIntensity>25 && uvIntensity<=27.8)
  {
    UVIndex = "10";
  }
  else if (uvIntensity>27.8)
  {
    UVIndex = "11";
  }
  
  return UVIndex;
}

Ahora que tengo este código, me devuelve un string con un número del 1 al 11, y dependiendo del número que sea, tiene que encender un LED u otro.

He pensado en hacerlo con un switch tipo:

switch (uv) {
   case 1:
      digitalWrite(ledVerde , HIGH);   // poner el Pin en HIGH
      break;
    case 2:
      digitalWrite(ledAmarillo , HIGH);   // poner el Pin en HIGH
      break;
    case 3:
      digitalWrite(ledAzul , HIGH);   // poner el Pin en HIGH
      break;
    case 4:
      digitalWrite(ledRojo , HIGH);   // poner el Pin en HIGH
      break;
    case 5:
      digitalWrite(ledBlanco , HIGH);   // poner el Pin en HIGH
      break;
  }

Pero la función switch no compara Strings creo… o al menos me da un error. También he probado a hacerlo con un if, pero me pasa lo mismo… comparar strings me da problemas.

He conocido la función atoi() y pruebo con esto:

  int myInt = atoi(uv);

pero me da el siguiente error:

exit status 1
cannot convert 'String' to 'const char*' for argument '1' to 'int atoi(const char*)'

Alguien me puede echar una mano???

GRACIAS!!!

String(uvIntensity).toInt()

Solo para que la próxima duda puedas saber como resolverla sin que te consuma la ansiedad recuerda que hay mucho que aprender en como buscar en Google:

Si solo hubieras puesto: Arduino String int

Hoy sale primero tu consulta pero luego..... sale esto
toInt() - Arduino

La referencia de arduino donde todos debemos ir siempre que tenemos dudas.

Para la próxima puede ser de ayuda buscar asi. Igualmente haz todas las preguntas que quieras, alguien siempre responderá!

gracias surbyte por el consejo, pero como imaginarás, antes de postear nada he hecho mil búsquedas en google y en el foro... otra cosa puede ser que lo que haya probado no haya funcionado por un motivo u otro, pero si tengo que poner todo lo que he probado para que quien me ayude descarte lo ya hecho, sería interminable el post....

Pero muchas gracias! :wink:

Google tiene todo pero hay que saber buscarlo. No te digo nada nuevo.
Me llevó su tiempo a mi saber como hacerlo, aunque tmb está ahi, tmb te dice como buscar apropiadamente.

Solo te mostré como una consulta que te puede llevar dias de mala búsqueda se resuelve en segundos.

Primero centra tu búsqueda en Arduino y por eso comienzo con arduino luego las palabras que te importan
y ya!!

Solo eso.

msoffredi:
String(uvIntensity).toInt()

msoffredi!! GRACIAS!! funcionó perfectamente!! :wink:

Igualmente usar un string para guardar un char es como usar un cañon para matar moscas.

tu codigo deberia quedar asi, ahorando varios kilos de memoria ram, tambien investigá la funcion map():

byte numeroMostrar(float uvIntensity)
{
    
  if (uvIntensity>=0 && uvIntensity<=2.78)
  {
    return = 1;
  }
  else 
    if (uvIntensity>=2.79 && uvIntensity<=5.57)
    {
      return = 2;
    }
    else 
      if (uvIntensity>5.57 && uvIntensity<=8.35)
      {
         return = 3;
      }
      else 
        if (uvIntensity>8.35 && uvIntensity<=11.1)
       {
          return = 4;
       }
       else 
          if (uvIntensity>11.1 && uvIntensity<=13.92)
          {
             return = 5;
           }
           else 
              if (uvIntensity>13.92 && uvIntensity<=16.7)
             {
               return = 6;
             }
             else 
               if (uvIntensity>16.7 && uvIntensity<=19.5)
               {
                 return  = 7;
               }
               else 
                 if (uvIntensity>19.5 && uvIntensity<=22.2)
  {
    return  = 8;
  }
  else if (uvIntensity>22.2 && uvIntensity<=25)
  {
    return = 9;
  }
  else if (uvIntensity>25 && uvIntensity<=27.8)
  {
    return = 10;
  }
  else if (uvIntensity>27.8)
  {
    return = 11;
  }
  
  return UVIndex;
}


byte uv = numeroMostrar(uvIntensity);

switch (uv) {
   case 1:
      digitalWrite(ledVerde , HIGH);   // poner el Pin en HIGH
      break;
    case 2:
      digitalWrite(ledAmarillo , HIGH);   // poner el Pin en HIGH
      break;
    case 3:
      digitalWrite(ledAzul , HIGH);   // poner el Pin en HIGH
      break;
    case 4:
      digitalWrite(ledRojo , HIGH);   // poner el Pin en HIGH
      break;
    case 5:
      digitalWrite(ledBlanco , HIGH);   // poner el Pin en HIGH
      break;
  }