Você está na página 1de 6

Strings no Arduino

Descrio
Strings de texto podem ser representadas de duas formas.
Voc pode utilizar o tipo de varivel String. Ou voc pode fazer uma string a partir de
um array de variveis do tipo char e adicionar a terminao nula.
Possibilidades para declarao de strings . Exemplos:
Todas as formas abaixo so declaraes vlidas de strings.

Declare um array de caracteres (char) sem inici-lo, como feito em Str1


char Str1[15];

Declare um array de caracteres (char), com um caractere adicional, e o prprio


compilador acrescentar o caractere de terminao nula, como feito em Str2
char Str2[8]

Adicionar explicitamente o caractere nulo, como em Str3


char Str3[8]

= {'a','r','d','u','i','n','o'};

= {'a','r','d','u','i','n','o','\0'};

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
char Str4[ ]

= "arduino";

Inicie um array com o tamanho declarado explicitamente e uma constante de


texto entre aspas, vide: Str5
char Str5[8]

= "arduino";

Inicie um array, deixando espao extra para strings com tamanhos maiores,
conforme Str6
char Str6[15] = "arduino";

Terminao Nula
Geralmente, strings so terminadas com um caractere nulo, (cdigo ASCII zero [0]).
Isto permite que funes (como a Serial.print()) conhecerem onde termina o texto da
string. Caso contrrio, essas funes continuariam a ler bytes da memria que no
fazem parte da string.

Isso significa que sua string precisa ter espao suficiente para um ou mais caracteres
alm do texto que voc deseja armazenar. por isso que a varivel Str2 e Str5
(acima) precisam de 8 caracteres, mesmo tendo a palavra arduino apenas 7 letras
a ltima posio preenchida automaticamente com o caractere nulo. Str4 ser
automaticamente redimensionada para o tamanho de 8 caracteres, sendo uma posio
para o nulo. Na varivel Str3, ns declaramos explicitamente o tamanho e adicionamos
o caractere nulo ('\0') por nossa conta.
Veja que possvel ter uma string sem o caractere final nulo (por exemplo, declarando
a varivel Str2 com 7 ao invs de 8 caracteres). Isso falhar na maioria das funes
que esperam uma string para funcionar, portanto no faa isso intencionalmente! Se
voc perceber um comportamento diferente, como adio de caracteres estranhos na
sua string, este pode ser o problema.

Aspas Simples ou Duplas?


Strings sempre so definidas escrevendo-se um texto contido entre aspas duplas
(exemplo: "Abc"), e caracteres sempre so definidos escrevendo-se uma nica letra
(ou dgito, ou algum caractere da tabela ASCII), contido dentre aspas simples, ou
apstrofes (exemplo: 'A').
Quebrando strings longas
Voc pode quebrar strings assim:
char myString[] = "Um texto que comea 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 so arrays de caracteres, um array de string nada mais seno um
array bi-dimensional de caracteres.
No cdigo abaixo, o asterisco aps o tipo de varivel (char*), indica que esta varivel
um array de ponteiros. Todos os arrays na realidade so ponteiros de memria,
ento este o requisito para fazer arrays de arrays. O estudo de ponteiros uma das
partes mais difceis para um iniciante, mas necessrio 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
Descrio
A classe String 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 expresses no texto e substituir trechos, e muito mais. Consome mais
memria que um simples array de caracteres, mas muito mais til.
Para referncia, arrays de caracteres so declarados como string com o s
minsculo, e instncias da classe String so declaradas como String, com a letra S
maiscula. Repare tambm que strings constantes, especificadas por aspas duplas, so
tratadas como arrays de caracteres, e no como instncias da classe String.

String stringOne = "Hello String";


// using a constant String
String stringTwo = String("This is a string");
// converting a constant string
into a String object
String stringOne = String(stringTwo + " with more"); // concatenating two strings

Funes

String()

charAt()

compareTo()

concat()

endsWith()

equals()

equalsIgnoreCase()

getBytes()

indexOf()

lastIndexOf()

length()

replace()

setCharAt()

startsWith()

substring()

toCharArray()

toLowerCase()

toUpperCase()

trim()
Operadores

[] (element access)

+ (concatenation)

== (comparison)
Exemplos

StringConstructors

StringAdditionOperator

StringIndexOf

StringAppendOperator

StringLengthTrim

StringCaseChanges

StringReplace

StringCharacters

StringStartsWithEndsWith

StringComparisonOperators

StringSubstring

int led = 8;

void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
}

/**
* Funo que l uma string da Serial
* e retorna-a
*/
String leStringSerial(){
String conteudo = "";

// esvazia string

char caractere;

// Enquanto receber algo pela serial


while(Serial.available() > 0) {
// L byte da serial
caractere = Serial.read();
// Ignora caractere de quebra de linha
if (caractere != '\n'){
// Concatena valores
conteudo.concat(caractere);
}
// Aguarda buffer serial ler prximo caractere
delay(10);

Serial.print("String recebida: ");


Serial.println(conteudo);

return conteudo;
}

void loop() {
// Se receber algo pela serial
if (Serial.available() > 0){
// L toda string recebida
String recebido = leStringSerial();

if (recebido == "LED1:1"){
digitalWrite(led, HIGH);
}

if (recebido == "LED1:0"){
digitalWrite(led, LOW);
}
}
}