Pasar de string a int

Saludos a todos,

Espero que me podais echar una mano con un pequeño problema que tengo. Recibo datos a través de puerto COM. Estos datos son siempre números pero los tengo que enviar como un string. Necesito que arduino trabaje con esos datos pero como int. Cuando el string está formado por un solo digito no tengo problemas; sin embargo si el string tiene más de un número (ej: 23) no se como pasarlo. Otra duda es saber sí realmente cuando envio por ejemplo 23, arduino lee 23 o lee solo 2.

Si necesitais que postee el codigo no teneis más que pedirmelo.

Muchas gracias de antemano.

pon tu codigo.

que yo sepa, los caracteres se reciben de 1 en 1 por el puerto serie.

Aqui esta el codigo (si necesitas tambien el codigo de c# lo posteo):

/*

  • El programa lee dos valores por el puerto COM:opcion y valor
    *Opcion hace que el led parpadee un determinado número de veces
    *según la opcion
    */

int ledPin = 13;
int opcion = 0;
int valor = 0;

void setup() {
pinMode(ledPin,OUTPUT);
Serial.begin(9600);
}
void loop () {
opcion = Serial.read(); //lee la opcion
opcion=opcion-'0'; //transformo en número
delay(500); //retraso para evitar problemas en lecturas del puerto

switch(opcion){

case 1:
valor = Serial.read(); //lee el valor
valor=valor-'0';
for(int i=0; i<valor+4; i++) {
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);}
break;
case 2:
valor = Serial.read();
valor=valor-'0';
for(int i=0; i<valor; i++) {
digitalWrite(ledPin,HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);}
break;
}
}
Es un codigo muy sencillo. Es un codigo de pruebas porque mi intencion es controlar un telescopio mandando los datos por un interfaz de usuario hecho en c#

Muchas gracias

el valor que recibes es para 'opcion' pero solo consideras que valga 1 o 2. tienes pensado que llegue a mas de 9?
es por esto que tienes el problema?

Quizás usando la función atoi(). Aunque creo que es muy quisquillosa.

Hola Sergegsx,

El valor de opcion solo valdra 1 ó 2 (eso no me da problema). Cuando entro dentro del case (segun la opcion) hago una nueva lectura del puerto serie. Es ahi donde tendre cadenas string con más de un digito.

Gracias

Hola Razorblade,

¿Puedo usar atoi() en el codigo arduino?

tendrás que discernir cuando acaba el numero que envías por serie con algun caracter.

si envias por puerto serie el 243, primero el 3 luego el 4 y luego el 2 y como ase acaba el numero envias otro caracter de control por ejemplo el $.

int numero=0
int multiplicador=1

caracterserie=leo_carater();

if (caracterserie==$)
{
numero = valorcalculado;
multiplicador=1;
valorcalculado=0;
}

if (caracter esta entre "0" y "9" incluidos)
{
valorcalculado=valorcalculado+(caracter-"0")multiplicador;
multiplicador=multiplicador
10;
}

de esta forma en una primera vuelta numero =0, recivimos el 3 , valor calculado =3 pero no lo pasa a numero pues no le ha llegado $
a la segunda vuelta recivimos un 4, lo multiplicamos por 10 y lo sumamos a lo que habia antes 3 + 4*10 =43
a la tercera vuelta recivimos un 2 se multiplicara por 100 y se suma a lo que habia antes, 43 + 2 *100 =243
luego recive un $, esto hara que numero sea = a valor calculado y que se reseteen los valores de valor calculado y el multiplicador.

lo he hecho rapidin, no descarto tenga algun error.

un saludo

Antonio2011:
Hola Razorblade,

¿Puedo usar atoi() en el codigo arduino?

Hola Antonio,
si, se puede usar atoi() en Arduino.
Yo lo estoy usando para almacenar dos buffers de 3 cifras y transformarlos en 2 enteros, pero tengo problemas...
Echa un vistazo a mi post, a lo mejor te puede ayudar y de paso tu me puedas ayudar a mi!!

http://arduino.cc/forum/index.php/topic,62245.0.html

Muchas gracias SrDonGato,

Ya consigo que tire el programa.

Antonio2011:
Muchas gracias SrDonGato,

Ya consigo que tire el programa.

Hola buen dia; seria bueno ver la solucion que de eso se aprender hermano.

Saludos.