[SOLUCIONADO]Pasar una variable string a int

hola buenas, el problema que tengo es: recibo por bluetooth dos datos numéricos separados por un punto y yo quiero almacenar el primer dato en una constante y el segundo en otra constante, estoy intentando de esta manera pero no hay manera…

#include <SoftwareSerial.h> 

SoftwareSerial BT(50,51);

char inChar;
String string="";
int dato1;
int dato2;
int val=0;

void setup(){
  BT.begin(9600);
  Serial.begin(9600);
  string.reserve(100);
  
  }
 
void loop()
{
  
  
  if(BT.available()){    
    inChar = BT.read();
    
    if(inChar == '.'){
      Serial.println(string);
      val+=1; 

      if(val == 1){
        dato1=string.toInt();
        val=2;
        Serial.print("dato 1 es ");
        Serial.println(dato1);
        string="";
        
      }
      
      if(val==3){
        dato2=string.toInt();
        val=0;
        Serial.print("dato 2 es ");
        Serial.println(dato2);
        string="";
        
      }
      inChar=0;
      
   }
   string+=inChar;
    
  }
  
}

este es el código, en el puerto serie cuando envío la primera cadena solo me imprime el dato 1, cuando envío la segunda cadena me imprime ambos datos a 0.

el problema creo que es a la hora de almacenar los datos, no se almacenan en la variable dato1 y dato2, por que si imprimo directamente el string si que funciona bien, pero ami me interesa tener los valores almacenados para después usarlos.

Vale ya esta solucionado, el problema era a la hora de limpiar la variable de tipo char, se me olvido ponerle la coma " ' " así.

inChar='0';

la unica cosa es que así se queda en 0 pero hay alguna manera de dejarla vacía?

Un par de cuestiones:

1.- Por la declaración que haces SoftwareSerial BT(50,51); Pudiera entenderse que estás utilizando un arduino Mega ¿Es así? En caso afirmativo, estás desaprovechando los puertos Serial hardware de tu arduino y gastando ciclos de procesador innecesariamente. 2.- Puedes utilizar sencillamente parseInt:

  if(BT.available()){  
dato1=BT.parseInt();
dato2=BT.parseInt();
//etc....
}

Sinceramente y comprendan bien lo que voy a decir: dejen de copiar y pegar sin antes informarse algo acerca de la plataforma que estan usando. Cada vez mas se leen a personas usando softwareSerial en Mega/DUE lo cual es una barbaridad cuando tienen 4 puertos. Las cosas mas horribles se estan viendo y preguntando.

Tomense unos minutos. Investiguen que han comprado. Miren que hardware tienen. Pero no copien y peguen cualquier cosa. Este es un ejemplo.

noter: 1.- Por la declaración que haces

SoftwareSerial BT(50,51);

Pudiera entenderse que estás utilizando un arduino Mega ¿Es así? En caso afirmativo, estás desaprovechando los puertos Serial hardware de tu arduino y gastando ciclos de procesador innecesariamente.

Toda la razón, ni siquiera lo había pensado, ya esta solucionad! gracias.

noter: 2.- Puedes utilizar sencillamente parseInt:

  if(BT.available()){  
dato1=BT.parseInt();
dato2=BT.parseInt();
//etc....
}

Cuando uso parseInt a veces se me quedan las variables a cero, usando esto:

if(BT.available()){  
 dato1=BT.parseInt();
 dato2=BT.parseInt();

 Serial.println(dato1);
 Serial.println(dato1);
}

primero me imprime los dos valores bien y después dos "0", por que puede ser eso?

Sencillamente que si fuerzas parseInt cuando no hay nada recibido en serial, tras transcurrir un timeout devuelve cero. Entonces, lo mejor que puedes hacer es comprobar siempre si hay datos antes de hacer un parseint o esperar a que los haya:

if(BT.available()){  
 dato1=BT.parseInt();
 while (!BT.available()) {}; // esperar a que llegue algo más antes de interpretar el dato.
 dato2=BT.parseInt();

 Serial.println(dato1);
 Serial.println(dato2);
}

Reitero: si estás usando un mega, lo mejor es conectar a los pines correspondientes a Serial1, por ejemplo, evitarte utilizar softwareSerial y sustituir todos tus BT. por Serial1. .

Corrijo: Veo que por lo que dices recibe bien los dos valores, y luego recibe dos valores cero. Seguramente será porque se está recibiendo algún carácter de más aparte del separador. Si estás poniendo punto tras el último valor esa puede ser la causa, porque seguramente que además del punto estará llegando un salto de línea.

noter: Reitero: si estás usando un mega, lo mejor es conectar a los pines correspondientes a Serial1, por ejemplo, evitarte utilizar softwareSerial y sustituir todos tus BT. por Serial1. .

si, ya cambie el código para no usar softwareSerial, ahora esta conectado en Serial1.

noter: Corrijo: Veo que por lo que dices recibe bien los dos valores, y luego recibe dos valores cero. Seguramente será porque se está recibiendo algún carácter de más aparte del separador. Si estás poniendo punto tras el último valor esa puede ser la causa, porque seguramente que además del punto estará llegando un salto de línea.

Como dices estaba poniendo punto tras el ultimo valor, solucionado muchas gracias.