Separar caracteres en Arduino

Fecha de publicado: 26-Jul-2018. Fecha de actualización: 19-Oct-2024.

Programa en Arduino para separar caracteres…

String split = "133,215,365";

void setup() {
  Serial.begin(9600);
}

void loop() {
int parte1 = getValue(split,',',0).toInt();
Serial.print(parte1);
delay(1000);
}

String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length()-1;

  for(int i=0; i<=maxIndex && found<=index; i++){
    if(data.charAt(i)==separator || i==maxIndex){
        found++;
        strIndex[0] = strIndex[1]+1;
        strIndex[1] = (i == maxIndex) ? i+1 : i;
    }
  }

  return found>index ? data.substring(strIndex[0], strIndex[1]) : "";
}

Actualización (19-oct-2024).

Inicialmente publiqué este código rápidamente porque lo usé en un proyecto en Arduino y quería guardarlo para poder reusarlo en otra ocasión. Ahora le hice algunos cambios para hacerlo más comprensible y agrego una explicación del mismo.

La idea es que en algún momento podemos recibir en Arduino una cadena (String) con valores separados con un caracter, una coma por ejemplo, y necesitamos obtener cada uno de los valores de la cadena.

La función String getValue(String data, char separator, int index), recibe el String data, el cual es recorrido caracter por caracter hasta encontrar el separador indicado por el caracter separator, y regresa la subcadena indicada por el número entero index. Considerando la numeración como en los arreglos, la primera subcadena tiene el índice cero, la segunda 1, y así sucesivamente.

Si se trata de acceder un índice que sobrepasa el número de subcadenas que hay, la función getValue() regresa una cadena vacía. El usuario debe tomar en cuenta esto al usar esta función en sus propios proyectos.

// Programa en C++ para Arduino
// Por: Julio César Sandria Reynoso
// Obtiene las partes de una cadena separada por el caracter indicado
String split = "123,45,67890";
char separador = ',';

void setup() { 
  Serial.begin(9600);
  Serial.print("Cadena a separar: ");
  Serial.println(split);
  
  String parte0 = getValue(split,separador,0);
  Serial.print("parte0 = ");
  Serial.println(parte0);
  
  String parte1 = getValue(split,separador,1);
  Serial.print("parte1 = ");
  Serial.println(parte1);
  
  String parte2 = getValue(split,separador,2);
  Serial.print("parte2 = ");
  Serial.println(parte2);
  
  String parte3 = getValue(split,separador,3);
  Serial.print("parte3 = ");
  Serial.println(parte3);
} 

void loop() { 

} 

String getValue(String data, char separator, int index) { 
  int found = 0;
  int strIndex[] = {0, -1}; 
  int maxIndex = data.length()-1; 
  for(int i=0; i<=maxIndex && found<=index; i++){ 
    if(data.charAt(i)==separator || i==maxIndex) {
      found++; 
      strIndex[0] = strIndex[1]+1; 
      strIndex[1] = (i == maxIndex) ? i+1 : i; 
    } 
  } 
  return found>index ? 
         data.substring(strIndex[0], strIndex[1]) : ""; 
}

La ejecución de este programa muestra en el monitor serial la siguiente salida:

Cadena a separar: 123,45,67890
parte0 = 123
parte1 = 45
parte2 = 67890
parte3 = 

Si quieres aprender sobre robótica con Arduino, programación o algo más relacionado con computación o tecnologías de información, pide informes en el Instituto de Robótica de Xalapa (www.irox.mx).

Mtro. Julio C. Sandria R.

Cursos

En el Instituto de Robótica de Xalapa se imparten cursos y talleres de robótica en verano y permanentes para niños, jóvenes y adultos, tales como:

  • Cursos de Robótica para Niños y Jóvenes
  • Cursos de Arduino
  • Cursos de robótica con Arduino
  • Cursos de robótica con Lego Mindstorms NXT y EV3
  • Cursos de Raspberry Pi

El iRoX cuenta con amplia experiencia en la formación de niños y jóvenes, así como en la participación en eventos y concursos de robótica.

Cursos y talleres 2017

Más información en el sitio web del iRoX: www.iRoX.mx.