domingo, 11 de dezembro de 2011

Strings no Arduino


Descrição

Strings de texto podem ser representadas de duas formas. Você pode utilizar o tipo de variável “String”, que é parte do Arduino desde a versão 0019, ou você pode fazer uma string a partir de um array de variáveis do tipo “char” e adicionar a terminação nula.
Este artigo descreve o último método. Para maiores detalhes sobre o objeto String, que permite maiores funcionalidades (e também maior custo de memória), veja o artigo mais abaixo.

Exemplos

Todas as formas abaixo são declarações válidas de strings.
char Str1[15];
  char Str2[8]  = {'a','r','d','u','i','n','o'};
  char Str3[8]  = {'a','r','d','u','i','n','o','\0'};
  char Str4[ ]  = "arduino";
  char Str5[8]  = "arduino";
  char Str6[15] = "arduino";


Possibilidades para declaração de strings
  • Declare um array de caracteres (char) sem iniciá-lo, como feito em Str1
  • Declare um array de caracteres (char), com um caractere adicional, e o próprio compilador acrescentará o caractere de terminação nula, como feito em Str2
  • Adicionar explicitamente o caractere nulo, como em Str3
  • Inicie com uma constante de texto, contida entre aspas; o compilador vai definir o tamanho do array de caracteres automaticamente, calculando o tamanho da string mais o terminador nulo, conforme Str4
  • Inicie um array com o tamanho declarado explicitamente e uma constante de texto entre aspas, vide: Str5
  • Inicie um array, deixando espaço extra para strings com tamanhos maiores, conforme Str6


Terminação Nula
Geralmente, strings são terminadas com um caractere nulo, (código ASCII zero [0]). Isto permite que funções (como a Serial.print()) conhecerem onde termina o texto da string. Caso contrário, essas funções continuariam a ler bytes da memória que não fazem parte da string.
Isso significa que sua string precisa ter espaço suficiente para um ou mais caracteres além do texto que você deseja armazenar. É por isso que a variável Str2 e Str5 (acima) precisam de 8 caracteres, mesmo tendo a palavra “arduino” apenas 7 letras – a última posição é preenchida automaticamente com o caractere nulo. Str4 será automaticamente redimensionada para o tamanho de 8 caracteres, sendo uma posição para o nulo. Na variável Str3, nós declaramos explicitamente o tamanho e adicionamos o caractere nulo ('\0') por nossa conta.
Veja que é possível ter uma string sem o caractere final nulo (por exemplo, declarando a variável Str2 com 7 ao invés de 8 caracteres). Isso falhará na maioria das funções que esperam uma string para funcionar, portanto não faça isso intencionalmente! Se você perceber um comportamento diferente, como adição de caracteres estranhos na sua string, este pode ser o problema.


Aspas Simples ou Duplas?
Strings sempre são definidas escrevendo-se um texto contido entre aspas duplas (exemplo: "Abc"), e caracteres sempre são definidos escrevendo-se uma única letra (ou dígito, ou algum caractere da tabela ASCII), contido dentre aspas simples, ou apóstrofes (exemplo: 'A').
Quebrando strings longas
Você pode quebrar strings assim:
char myString[] = "Um texto que começa aqui"
" e termina logo"
" ali";
Array de Strings
Quando trabalhamos com uma grande quantidade de texto, em um projeto com display LCD, por exemplo, é muito comum fazer uso de um array de strings. Como as strings por si só são arrays de caracteres, um array de string nada mais é senão um array bi-dimensional de caracteres.
No código abaixo, o asterisco após o tipo de variável (“char*”), indica que esta variável é um array de ponteiros. Todos os arrays na realidade são ponteiros de memória, então este é o requisito para fazer arrays de arrays. O estudo de ponteiros é uma das partes mais difíceis para um iniciante, mas é necessário entender ponteiros em detalhes, para usá-los de forma efetiva aqui.

Exemplo

char* myStrings[]={"This is string 1", "This is string 2", "This is string 3",
"This is string 4", "This is string 5","This is string 6"};

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

void loop(){
for (int i = 0; i < 6; i++){
   Serial.println(myStrings[i]);
   delay(500);
   }
}

Objeto String

Descrição

A classe String, parte do Arduino desde a versão 0019, nos permite utilizar e manipular strings de texto de uma maneira mais completa aos arrays de caracteres. Você pode concatenar textos, adicionar trechos de texto, pesquisar expressões no texto e substituir trechos, e muito mais. Consome mais memória que um simples array de caracteres, mas é muito mais útil.
Para referência, arrays de caracteres são declarados como “string” com o “s” minúsculo, e instâncias da classe String são declaradas como “String”, com a letra “S” maiúscula. Repare também que strings constantes, especificadas por aspas duplas, são tratadas como arrays de caracteres, e não como instâncias da classe String.


Funções

Operadores

Exemplos

Tradução por Renato Aloi
Original em Inglês -- http://www.arduino.cc/en/Reference/String

Um comentário: