Escrito por: Alfonso Pérez

Continuamos com esta série iniciada no MIC176 e MIC177 apresentando novas práticas e exemplos para trabalhar com textos no Arduino uno. Esta é a última parte desta série.

MIC033S

 

SUBSTITUIR UMA STRING DENTRO DE OUTRA STRING.

    Para substituir uma string por outra, podemos usar a função: string.replace(substring1, substring2). O parâmetro substring1 é a sequência a ser procurada e o parâmetro substring2 é a sequência de substituição. A função substituirá todas as correspondências que encontrar do valor contido no parâmetro substring1.

   No programa a seguir, usamos essas funções e elas podem ser encontradas no menu: Arquivo-> Exemplos-> Strings-> StringReplace. O fluxograma pode ser observado na Figura 1.

 

 Figura 1. Fluxograma para substituir cadeias
Figura 1. Fluxograma para substituir cadeias

 

 

void setup() {
  // Abra a comunicação serial e espere a porta abrir:
  Serial.begin(9600);
  while(!Serial) {
    ; // espera que a porta serial se conecte. Necessário apenas para porta USB nativa
  }
 
  // envie uma introdução:
  Serial.println("\n\nString replace: \n");
  Serial.println();
}
 
void loop() {
  String stringOne = "";
  Serial.println(stringOne);
  // replace() altera todas as instâncias de uma substring com outra:
  // primeiro, faça uma cópia da string original:
  String stringTwo = stringOne;
  // então execute as substituições:
  stringTwo.replace("<", "
  // imprime o original:
  Serial.println("Original string:" + stringOne);
  // e imprima a string modificada:
  Serial.println("String modificada:" + stringTwo);
 
  // você também pode usar replace() em caracteres únicos:
  String normalString = "bookkeeper";
  Serial.println("normal:" + normalString);
  String leetString = normalString;
  leetString.replace('o', '0');
  leetString.replace('e', '3');
  Serial.println("l33tspeak:" + leetString);
 
  // não faz nada enquanto verdadeiro:
  while(true);
}

 

 

VERIFICAR SE UMA STRING COMEÇA (startWith) OU TERMINA COM (endsWith).

   Para verificar se uma string começa com uma certa string, podemos usar a função: string.startsWith(string2). Se a string começar com o valor contido no parâmetro string2, a função retornará true(true), caso contrário, retorna false(false). Também podemos verificar se termina com uma determinada string. Para isso, podemos usar a função: string.endsWith(string2).

   Se a string terminar com o valor contido no parâmetro string2, a função retornará true(true), caso contrário, retornará false(false). O programa a seguir faz uso dessas funções e pode ser encontrado no menu: Arquivo-> Exemplos-> Strings-> StringsStartsWithEndsWith.

 

void setup() {
  // Abra a comunicação serial e espere a porta abrir:
  Serial.begin(9600);
  while(!Serial) {
    ; // espera que a porta serial se conecte. Necessário apenas para porta USB nativa
  }
 
  // envie uma introdução:
  Serial.println("\n\nString startsWith() e endsWith():");
  Serial.println();
}
 
void loop() {
  // startsWith() verifica se uma String começa com uma substring específica:
  String stringOne = "HTTP / 1,1 200 OK";
  Serial.println(stringOne);
  if(stringOne.startsWith("HTTP / 1.1")) {
    Serial.println("Servidor usando http versão 1.1");
  }
 
  // você também pode procurar por startsWith() em uma posição de deslocamento na string:
  stringOne = "HTTP / 1,1 200 OK";
  if(stringOne.startsWith("200 OK", 9)) {
    Serial.println("Obteve um OK do servidor");
  }
 
  // endsWith() verifica se uma String termina com um caractere específico:
  String sensorReading = "sensor =";
  sensorReading + = analogRead(A0);
  Serial.print(sensorReading);
  if(sensorReading.endsWith("0")) {
    Serial.println(". Esta leitura é divisível por dez");
  } mais {
    Serial.println(". Esta leitura não é divisível por dez");
  }
 
  // não faz nada enquanto verdadeiro:
  while(true);
}

 

 

COMO OBTER UM SUBSTRING DE UMA STRING.

   Para obter uma substring de uma string, podemos usar a função: string.substring(from). O parâmetro 'from' recebe o índice de onde obter a substring. A função retorna a substring. A função anterior retorna a substring encontrada do índice até o final da string.

   Se quisermos obter uma substring, mas com um certo tamanho, podemos usar a função: string.substring(from, to). As funções anteriores retornam a substring, incluindo o caractere encontrado no índice. O programa a seguir faz uso dessas funções e pode ser encontrado no menu: File-> Examples-> Strings-> StringSubString. O fluxograma pode ser visto na Figura 2.

 

 Figura 2 - Fluxograma para encontrar substrings
Figura 2 - Fluxograma para encontrar substrings

 

 

void setup() {
  // Abra a comunicação serial e espere a porta abrir:
  Serial.begin(9600);
  while(!Serial) {
    ; // espera que a porta serial se conecte. Necessário apenas para porta USB nativa
  }
// envie uma introdução:
  Serial.println("\n\nString substring():");
  Serial.println();
}
 
void loop() {
  // Configurar uma string:
  String stringOne = "Tipo de Conteúdo: text / html";
  Serial.println(stringOne);
 
  // substring(index) procura a substring da posição do índice até o final:
  if(stringOne.substring(19) == "html") {
    Serial.println("É um arquivo html");
  }
  // você também pode procurar por uma substring no meio de uma string:
  if(stringOne.substring(14, 18) == "texto") {
    Serial.println("É um arquivo baseado em texto");
  }
 
  // não faz nada enquanto verdadeiro:
  while(true);
}

 

CONVERTER UMA STRING EM UM VALOR NUMÉRICO INTEIRO (AO INT).

   Para converter uma string em um valor inteiro, podemos usar a função: string.toInt(). A função retorna um tipo de dados longo que é um inteiro. Se a string não iniciar com um dígito, a função retornará um zero('0'). O programa a seguir lê a porta serial até que a tecla enter seja pressionada e converta os caracteres em um número se os caracteres forem dígitos. O programa pode ser encontrado no menu: File-> Examples-> Strings-> StringToInt.

 

String inString = ""; // string para conter entrada
 
void setup() {
  // Abra a comunicação serial e espere a porta abrir:
  Serial.begin(9600);
  while(!Serial) {
    ; // espera que a porta serial se conecte. Necessário apenas para porta USB nativa
  }
 
  // envie uma introdução:
  Serial.println("\n\nString toInt():");
  Serial.println();
}
 
void loop() {
  // Ler entrada serial:
  while(Serial.available()> 0) {
    int inChar = Serial.read();
    if(isDigit(inChar)) {
      // converte o byte recebido em char e adiciona-o à string:
      inString += (char) inChar;
    }
    // se você pegar uma nova linha, imprima a string, então o valor da string:
    if(inChar == '\n') {
      Serial.print("Valor:");
      Serial.println(inString.toInt());
      Serial.print("String:");
      Serial.println(inString);
      // limpe a string para nova entrada:
      inString = "";
    }
  }
}

 

ANÁLISE DE CARACTERES.

   A biblioteca do Arduino possui instruções específicas para análise de caracteres. Isso é muito útil quando recebemos informações de texto e queremos saber sobre seu formato ou composição. A seguir, uma lista das funções disponíveis para análise de caracteres:

 

isAlphaNumeric(thisChar)

Descrição: Analise se um caractere é alfanumérico.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isAlpha(thisChar)

Descrição: Analise se o caractere é alfabético.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isAscii(thisChar)

Descrição: Analise se o caractere é ASCII.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isWhitespace(thisChar)

Descrição: Analise se o caractere está em branco.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isControl(thisChar)

Descrição: Analise se é um caracter de controle.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isDigit(thisChar)

Descrição: Analise se o caractere é um dígito.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isGraph(thisChar)

Descrição: Analise o personagem é gráfico.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isLowerCase(thisChar)

Descrição: Analise se o caractere é minúsculo(minúscula).

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isPrintable(thisChar)

Descrição: Analise se o personagem pode ser impresso.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isPunct(thisChar)

Descrição: Analise se o caractere é um sinal de pontuação.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isSpace(thisChar)

Descrição: Analise se é o caráter do espaço.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isUpperCase(thisChar)

Descrição: Analise se o caractere é maiúsculo.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

isHexadecimalDigit(thisChar)

Descrição: Analise se é um caractere de dígito hexadecimal.

Parâmetros: thisChar: O caractere a ser analisado.

Retorno: Verdadeiro ou falso.

 

   O programa a seguir analisa qualquer caractere recebido pela porta serial e indica ao usuário a classe de caractere. O programa pode ser encontrado no menu: File-> Examples-> Strings-> CharacterAnalysis.

 

 

void setup() {
  // Abra a comunicação serial e espere a porta abrir:
  Serial.begin(9600);
  while(!Serial) {
    ; // espera que a porta serial se conecte. Necessário apenas para porta USB nativa
  }
 
  // envie uma introdução:
  Serial.println("envie qualquer byte e eu lhe direi tudo o que puder");
  Serial.println();
}
 
void loop() {
  // obtém quaisquer bytes recebidos:
  if(Serial.available()> 0) {
    int thisChar = Serial.read();
// diga o que foi enviado:
    Serial.print("Você me enviou: \ '");
    Serial.write(thisChar);
    Serial.print("\ 'Valor ASCII:");
    Serial.println(thisChar);
 
    // analisa o que foi enviado:
    if(isAlphaNumeric(thisChar)) {
      Serial.println("é alfanumérico");
    }
    if(isAlpha(thisChar)) {
      Serial.println("é alfabético");
    }
    if(isAscii(thisChar)) {
      Serial.println("é ASCII");
    }
    if(isWhitespace(thisChar)) {
      Serial.println("é espaço em branco");
    }
    if(isControl(thisChar)) {
      Serial.println("é um caractere de controle");
    }
    if(isDigit(thisChar)) {
      Serial.println("é um dígito numérico");
    }
    if(isGraph(thisChar)) {
      Serial.println("é um caractere imprimível que não é espaço em branco");
    }
    if(isLowerCase(thisChar)) {
      Serial.println("é minúscula");
    }
    if(isPrintable(thisChar)) {
      Serial.println("é imprimível");
    }
    if(isPunct(thisChar)) {
      Serial.println("é pontuação");
    }
    if(isSpace(thisChar)) {
      Serial.println("é um caractere de espaço");
    }
    if(isUpperCase(thisChar)) {
      Serial.println("é maiúsculo");
    }
    if(isHexadecimalDigit(thisChar)) {
      Serial.println("é um hexadecimaldigit válido(ou seja, 0 - 9, a - F ou A - F)");
    }
 
    // adicione algum espaço e peça outro byte:
    Serial.println();
    Serial.println("Dê-me outro byte:");
    Serial.println();
  }
}