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.
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.
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(); } }