Continuamos con esta serie con comenzó en MIC031S y MIC032S presentando nuevas prácticas y ejemplos para trabajar con textos en Arduino uno. Esta es la última parte de esta serie.

  

REMPLAZAR UN STRIGN DENTRO DE OTRO STRING.

Para remplazar un string por otro, podemos usar la función: string.replace(substring1, substring2). El parámetro substring1 es la string a buscar y el parámetro substring2, es el string de remplazo. La función reemplazara todas las coincidencias que encuentre de valor contenido en el parámetro substring1.

En el siguiente programa usamos estas funciones y él puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringReplace. El diagrama de flujo puede ser observado en la Figura 14.

 

 

Figura 14. Diagrama de Flujo  para remplazar strings
Figura 14. Diagrama de Flujo para remplazar strings

 

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString replace:\n");
   Serial.println();

}


void loop() {
   String stringOne = "";
   Serial.println(stringOne);
   // replace() changes all instances of one substring with another:
   // first, make a copy of the original string:
   String stringTwo = stringOne;
   // then perform the replacements:
   stringTwo.replace("<", "
   // print the original:
   Serial.println("Original string: " + stringOne);
   // and print the modified string:
   Serial.println("Modified string: " + stringTwo);
   // you can also use replace() on single characters:
   String normalString = "bookkeeper";
   Serial.println("normal: " + normalString);
   String leetString = normalString;
   leetString.replace('o', '0');
   leetString.replace('e', '3');
   Serial.println("l33tspeak: " + leetString);
    
   // do nothing while true:
   while (true);
   }

 

VERIFICAR SI UNA STRIGN ARRANCA CON (startWith) O FINALIZA CON (endsWith).

Para verificar si una string comienza con un determinado string podemos usar la función: string.startsWith(string2). Si la string comienza con el valor contenido en el parámetro string2, la función retorna verdadero (true), de lo contrario retorna falso (false). También podemos verificar si termina con un determinado string. Para esto podemos usar la función: string.endsWith(string2).

Si la string finaliza con el valor contenido en el parámetro string2, la función retorna verdadero (true), de lo contrario retorna falso (false). El siguiente programa hace uso de estas funciones y él puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringsStartsWithEndsWith.

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString startsWith() and endsWith():");
   Serial.println();

}

void loop() {

   // startsWith() checks to see if a String starts with a particular substring:
   String stringOne = "HTTP/1.1 200 OK";
   Serial.println(stringOne);
   if (stringOne.startsWith("HTTP/1.1")) {
      Serial.println("Server's using http version 1.1");
   }
 
   // you can also look for startsWith() at an offset position in the string:
   stringOne = "HTTP/1.1 200 OK";
   if (stringOne.startsWith("200 OK", 9)) {
      Serial.println("Got an OK from the server");
   }

   // endsWith() checks to see if a String ends with a particular character:
   String sensorReading = "sensor = ";
   sensorReading += analogRead(A0);
   Serial.print(sensorReading);
   if (sensorReading.endsWith("0")) {
      Serial.println(". This reading is divisible by ten");
   } else {
      Serial.println(". This reading is not divisible by ten");
   }

   // do nothing while true:
   while (true);

}

 

COMO CONSEGUIR UN SUBSTRING DE UNA STRING.

Para conseguir una substring desde una string podemos usar la función: string.substring(from). El parámetro 'from' recibe el índex desde donde conseguir la substring. La función retorna la substring. La anterior función retorna la substring encontrada desde el índex hasta el final de la string.

Si queremos conseguir una substring pero con un determinado tamaño, entonces podemos usar la función: string.substring(from, to). Las anteriores funciones retornar el substring incluyendo el carácter encontrado en el índex. El siguiente programa hace uso de estas funciones y él puede ser encontrado en le menú: Archivo->Ejemplos->Strings->StringSubString. El diagrama de flujo puede ser observado en la Figura 15.

 

Figura 15 Diagrama de Flujo  para buscar substrings
Figura 15 Diagrama de Flujo para buscar substrings

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString substring():");
   Serial.println();

}


void loop() {

   // Set up a String:
   String stringOne = "Content-Type: text/html";
   Serial.println(stringOne);

   // substring(index) looks for the substring from the index position to the end:
   if (stringOne.substring(19) == "html") {
      Serial.println("It's an html file");
   }

   // you can also look for a substring in the middle of a string:
   if (stringOne.substring(14, 18) == "text") {
      Serial.println("It's a text-based file");
   }

   // do nothing while true:
   while (true);

}

 

 

CONVERTIR UN STRING EN UN VALOR NUMERICO ENTERO (TO INT).

Para convertir un string en un valor entero podemos usar la función: string.toInt(). La función retorna un tipo de dato long que es un entero. Caso la string no comienza con un digito, la función retorna un cero (‘0’). El siguiente programa lee el puerto serial hasta que sea presionada la tecla enter y convierte los caracteres a un numero si los caracteres son dígitos. El programa puede ser encontrado en el menú: Archivo->Ejemplos->Strings->StringToInt.

String inString = ""; // string to hold input

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
      ; // wait for serial port to connect. Needed for native USB port only
   }

   // send an intro:
   Serial.println("\n\nString toInt():");
   Serial.println();

}

 

void loop() {

   // Read serial input:
   while (Serial.available() > 0) {
      int inChar = Serial.read();
      if (isDigit(inChar)) {
         // convert the incoming byte to a char and add it to the string:
         inString += (char)inChar;
      }

      // if you get a newline, print the string, then the string's value:
      if (inChar == '\n') {
         Serial.print("Value:");
         Serial.println(inString.toInt());
         Serial.print("String: ");
         Serial.println(inString);
         // clear the string for new input:
         inString = "";
      }

   }

}

 

ANALISIS DE CARACTERES.

La librería de Arduino posee instrucciones específicas para hacer análisis de caracteres. Esto es muy útil cuando recibimos información de texto y queremos saber sobre su formato o composición. La siguiente es una lista de las funciones disponibles para análisis de caracteres:

 

isAlphaNumeric(thisChar)

Descripción: Analiza si un carácter es alfanumérico.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isAlpha(thisChar)

Descripción: Analiza si el carácter es alfabético.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isAscii(thisChar)

Descripción: Analiza si el carácter es ASCII.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isWhitespace(thisChar)

Descripción: Analiza si el carácter es espacio en blanco.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isControl(thisChar)

Descripción: Analiza si es carácter de control.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isDigit(thisChar)

Descripción: Analiza si el carácter es un digito.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isGraph(thisChar)

Descripción: Analiza el carácter es gráfico.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isLowerCase(thisChar)

Descripción: Analiza si el carácter es minúsculo (lower case).

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isPrintable(thisChar)

Descripción: Analiza si el carácter se puede imprimir.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isPunct(thisChar)

Descripción: Analiza si el carácter es signo de puntuación.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isSpace(thisChar)

Descripción: Analiza si es el carácter de espacio.

Parámetros: thisChar: El caracter a ser analizado.

Retorno: Verdadero o falso.

 

isUpperCase(thisChar)

Descripción: Analiza si el carácter es mayúsculo (upper case).

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

isHexadecimalDigit(thisChar)

Descripción: Analiza si es un carácter digito hexadecimal.

Parámetros: thisChar: El carácter a ser analizado.

Retorno: Verdadero o falso.

 

El siguiente programa analiza cualquier carácter recibido por el puerto serie e indica al usuario la clase de caracter. El programa puede ser encontrado en el menú: Archivo->Ejemplos->Strings->CharacterAnalysis.

 

void setup() {

   // Open serial communications and wait for port to open:
   Serial.begin(9600);
   while (!Serial) {
     ; // wait for serial port to connect. Needed for native USB port only

   }
 
   // send an intro:
   Serial.println("send any byte and I'll tell you everything I can about it");
   Serial.println();

}


void loop() {
   // get any incoming bytes:
   if (Serial.available() > 0) {
      int thisChar = Serial.read();
      // say what was sent:
      Serial.print("You sent me: \'");
      Serial.write(thisChar);
      Serial.print("\' ASCII Value: ");
      Serial.println(thisChar);
 
      // analyze what was sent:
      if (isAlphaNumeric(thisChar)) {
          Serial.println("it's alphanumeric");
      }

      if (isAlpha(thisChar)) {
          Serial.println("it's alphabetic");
      }

      if (isAscii(thisChar)) {
         Serial.println("it's ASCII");
      }

      if (isWhitespace(thisChar)) {
         Serial.println("it's whitespace");
      }

      if (isControl(thisChar)) {
         Serial.println("it's a control character");
      }

      if (isDigit(thisChar)) {
         Serial.println("it's a numeric digit");
      }

      if (isGraph(thisChar)) {
         Serial.println("it's a printable character that's not whitespace");
      }

      if (isLowerCase(thisChar)) {
         Serial.println("it's lower case");
      }

      if (isPrintable(thisChar)) {
         Serial.println("it's printable");
      }

      if (isPunct(thisChar)) {
         Serial.println("it's punctuation"); 
      }

      if (isSpace(thisChar)) {
         Serial.println("it's a space character");
      }

      if (isUpperCase(thisChar)) {
         Serial.println("it's upper case");
      }

      if (isHexadecimalDigit(thisChar)) {
         Serial.println("it's a valid hexadecimaldigit (i.e. 0 - 9, a - F, or A - F)");
      }

     // add some space and ask for another byte:
     Serial.println();
     Serial.println("Give me another byte:");
     Serial.println();
   }
}

Buscador de Datasheets



N° de Componente