Compañeros cada vez que presiono la tecla "D" en un teclado matricial capturo un dato de una cadena continua de datos seriales, la cual la separa un salto de linea, como puedo hacer para extraer solo los numeros incluyendo el punto de la cadena recibida.
La cadena que capturo al presionar el botón, es la siguiente, NT,GS 40.00 KG..solodeberia capturar 40.00.
String CapturaCadena;
void loop() {
if(Serial.available()> 0){ // Si hay algo en el puerto serial
CapturaCadena = Serial.readStringUntil('\n'); //Guardamos el dato en un string
}
pulsacion = Teclado1.getKey();
switch (pulsacion) {
case '#': //Si se presiona #
delay(30);
Serial.println(CapturaCadena); //capturo el dato
break;
}
}
Empesaria en la posicion 7 pero no trminaria siempre en la posicion 11 ya que el numero podria ser de 0 hasta 100 000.00 o mas, y eso varia la posicion del digito final
Asumiendo que la cadena de caracteres siempre va a terminar en "KG", esta función debería servir:
String extraerNumero(String entrada) {
byte posFinal = 8;
char caracter;
while (1) {
caracter = entrada.charAt(posFinal);
if (!isDigit(caracter) && !isPunct(caracter)) { // Si no es ni dígito ni signo de puntuación.
// Suponiendo que la candena siempre acaba en "KG"; al llegar a la 'K', se termina la función.
return entrada.substring(7, posFinal - 1); // Si no se le resta 1, se va la 'K' junto a la subcadena extraida.
}
posFinal++;
}
}
Nótese que devuelve otro objeto String, así que no esperes hacer algo como:
int valor = extraerNumero(CapturaCadena);
Si más bien esa era la idea, solo habría que hacer unas ligeras modificaciones al código propuesto.
Muchas gracias compañero , me sirvio el codigo...ah tambien resolvi el mismo problema con este codigo..
if(Serial.available()> 0){ // Si hay algo en el puerto serial
// CapturaCadena = Serial.readStringUntil('\n'); //Guardamos el dato en un string
char inChar = Serial.read();
if (isDigit(inChar) || inChar == '.') { //comparo que solo sean digitos
inString += inChar;
}
if (inChar == '\n') {
// Serial.print("Peso, ");
//Serial.println(inString.toFloat());
numero = (inString.toFloat());
// Borrar string
inString = "";
Serial.flush();
}
}