Buscar

APOSTILAPARTE2a234183

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 14 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

10. ARRAYS E A CLASSE String 
 
Os arrays muitas vezes são chamados de listas, vetores ou matrizes, 
são muito semelhantes a uma variável comum, utilizam o mesmo tipo de 
declaração, as mesmas convenções de nomeação e podem armazenar os 
mesmos tipos de dados de uma variável. A grande diferença é que um array é 
composto por elementos que são identificados através de um índice. 
Uma analogia que podemos fazer com um array é com um hotel, onde 
temos todos os quartos iguais, da mesma forma que localizamos nosso quarto 
pelo número no array acessamos determinado elemento pelo índice. 
 
Definindo arrays e acessando seus elementos 
 
Um array é uma coleção de um ou mais objetos, do mesmo tipo, 
armazenados em endereços adjacentes de memória. Cada objeto é chamado 
de elemento do array. Da mesma forma que para variáveis simples, damos um 
nome ao array. O tamanho do array é o seu número de elementos. Cada 
elemento do array é numerado, usando um inteiro chamado de índice. No 
Arduino, a numeração começa com 0 e aumenta de um em um. Assim, o último 
índice é igual ao número de elementos do array menos um. 
 
Por exemplo, podemos definir um array chamado Pin de tamanho 8 para 
armazenar o número dos pinos utilizados em projeto: 
 
 int Pin[8]; 
 
Quando o compilador encontra esta definição, ele aloca 16 bytes 
consecutivos de memória (dois bytes - referente a cada int - para cada pino), 
como o Arduino tem apenas 2K de memória é importante não criar variáveis 
que não vão ser utilizadas. Cada pino pode ser acessado dando o nome do 
array e o índice entre colchetes: como Pin[0] (para o primeiro pino), Pin[1] (para 
o segundo pino), e assim por diante, até o último pino, Pin[7]. 
 
Podemos também definir um array e já atribuir valores aos seus 
elementos, para isto basta indicar os valores entre chaves “{ }“ e separados por 
virgula “,” . 
 
Int Pin[ ] = { 3, 4, 5, 6, 7, 8, 9, 10} 
 
Neste caso não é necessário definir o tamanho, pois o compilador conta 
o número de elementos e atribui ao array. Observe que este tipo de atribuição 
de valores só pode ser feita quando você está declarando a variável, o código 
representado abaixo provocaria erro na compilação. 
 
Int Pin[8] ; 
Pin[ ] = { 3, 4, 5, 6, 7, 8, 9, 10}; 
 
Para atribuir valores depois de declarada a variável é necessário 
referenciar o índice do elemento. 
 
Pin[0] = 3; 
Pin[1] = 4; 
Pin[2] = 5; 
 ⁞ 
Pin[7] = 10; 
 
Neste caso também poderíamos utilizar uma estrutura de repetição para 
atribuição de valores aos elementos. 
 
Int Pin[8] ; 
for (int i = 0 ; i < 8 ; i++) 
{ 
 Pin[i] = i+3; 
} 
 
 
 
Exemplo I 
 
Faça com que 4 LEDs acendam em sequência conforme a figura abaixo 
representada. 
 
 
 
Código fonte: Simular trocando as três cores do RGB 
 
int Pin[] = { 4, 5, 6, 7}; 
 
void setup() { 
 for (int i = 0 ; i < 4 ; i++) 
 { 
 pinMode(Pin[i],OUTPUT); 
 digitalWrite(Pin[i],LOW); 
 } 
 } 
 
void loop() { 
 digitalWrite(Pin[0],HIGH); 
 digitalWrite(Pin[3],LOW); 
 delay(500); 
 for (int i = 1 ; i < 4 ; i++) 
 { 
 digitalWrite(Pin[i],HIGH); 
 digitalWrite(Pin[i-1],LOW); 
 delay(500); 
 } 
 } 
 
 
 
STRINGS 
 
Muitas vezes é necessário armazenarmos palavras ou até mesmo 
frases, uma forma muito utilizada é através de um array de caracteres (tipo 
char). Neste caso cada elemento do array contém uma letra da palavra ao final 
do array deve ser inserido um elemento com o caractere nulo (“\0”) indicando o 
final da frase ou palavra, ou seja, para armazenarmos a palavra UNISANTA 
precisamos de um array de 9 elementos, um para cada letra da palavra e mais 
um para o caractere nulo. 
 Abaixo representamos varias formas de se declarar e iniciar um array de 
caracteres. 
 
 char palavra[9]; 
Neste caso foi criado um array com nove elementos, como nenhum valor 
foi atribuído todos elemento são preenchidos com o caractere nulo. 
 
 char palavra[9] = {'U', 'N', 'I', 'S', 'A', 'N', 'T', 'A', '\0'}; 
Aqui declaramos o array e preenchemos os elementos com os 
caracteres da palavra UNISANTA mais o nulo indicando o final da 
palavra. 
 
 char palavra[9] = {'U', 'N', 'I', 'S', 'A', 'N', 'T', 'A'}; 
Neste caso não foi atribuído o caractere nulo de final de palavra porem 
ele será atribuido automaticamente pelo Arduino. 
 
 char palavra[9] = “UNISANTA”; 
O Arduino adiciona uma letra da palavra a cada elemento e inclui o 
caractere nulo no final. 
 
 char palavra[ ] = “UNISANTA”; 
O Arduino vai assumir automaticamente o tamanho do array, adiciona 
uma letra da palavra a cada elemento e inclui o caractere nulo no final. 
 
 char palavra[20] = “UNISANTA”; 
O array pode ser utlizado para guardar palavra ou frases maiores. 
Note que quando escrevemos uma string utilizamos o texto entre aspas 
duplas (“UNISANTA”) e quando estamos nos referindo a um único caractere 
(variável do tipo char) utilizamos as aspas simples ou apóstrofes (‘U’). 
 
Exemplo II 
 
 Ler uma entrada de caracteres escritos no Serial Monitor, armazenar em 
um array de caracteres e escrever no de volta no Serial Monitor. 
 
Código fonte: 
char texto[10]; 
void setup() 
{ 
 Serial.begin(9600); 
} 
void loop() 
{ 
 if (Serial.available() > 0) { 
 delay(100); 
 int tamanho = Serial.available(); 
 for (int i = 0; i < tamanho; i++) { 
 if (i < 10) { 
 texto[i] = Serial.read(); 
 texto[i+1] = '\0'; 
 } 
 else { 
 Serial.read(); 
 } 
 } 
 Serial.println(texto); 
 } 
} 
 
Explicação do código fonte:Inicialmente temos um array do tipo char para 10 
elementos “texto[10]”(9 caracteres + o nulo). No setup foi apenas inicializado o 
Serial Monitor. No loop, primeiramente verificamos se tem algum dado no 
buffer, caso tenha é esperado 100ms para garantir que o buffer seja 
preenchido, em seguida a quantidade de caracteres digitados no Serial Monitor 
será armazenado na variável “tamanho”. Com base na quantidade de 
elementos da variável “tamanho” serão efetuadas as repetições através da 
estrutura FOR, assim, será lido um caractere por vez e armazenado na variável 
“texto[i]” até que seja preenchido o array os dados obtidos após o array estar 
completo serão apenas lidos garantindo o esvaziamento do buffer. Fora do 
FOR o comando Serial.println(texto); mostrará na tela do Serial Monitor a 
informação digitada após pressionarmos o botão Send. 
 
A CLASSE STRING 
 
 Vamos supor que você armazenou em um array de caracteres chamado 
Texto, uma string proveniente do Serial Monitor. Agora você quer comparar 
este array com a palavra “ENGENHARIA” provavelmente iria usar este tipo de 
estrutura: 
char Texto[] = “ENGENHARIA”; 
 if ( Texto == “ENGENHARIA”) 
 { 
 Seqüência de comandos 
 } 
 Neste caso independente do conteúdo armazenado no array Texto essa 
comparação nunca será verdadeira pois, a variável Texto não é uma string ela 
é uma coleção de caracteres então essa comparação deveria ser feita 
caractere a caractere, como vemos a seguir. 
 if ( Texto[0] == 'E') 
 { if ( Texto[1] == 'N') 
 { if ( Texto[2] == 'G') 
 { 
 ⁞ 
 } 
 } 
 } 
 Imagine se fossemos utilizar este tipo de comparação para varias 
palavras, isso acarretaria em um código fonte enorme que utilizaria uma grande 
quantidade de memória e provocando aumento no tempo de processamento. 
Para resolver este tipo de problema, a partir da versão0019 do Arduino, foi 
inserida a Classe String que, embora consuma mais memória que um array, 
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. 
 A declaração de um objeto da classe String é semelhante a declaração 
de uma variável, basta utilizar String (o S tem que estar em maiúsculo) e nome 
do objeto. 
Exemplo: String palavra; 
 
Assim com fazemos com as variáveis também podemos atribuir um valor 
no momento em que declaramos o objeto. 
 
Exemplo: String palavra = “UNISANTA”; 
 
Com um objeto da classe String fica fácil fazer a comparação com uma 
palavra ou até mesmo uma frase, no caso do problema do início deste tópico é 
só armazenar o array em um objeto da classe string e depois fazer a 
comparação, como pode ser visto a seguir. 
char Texto[]; 
 ⁞ 
(sequência de comandos para preencher o array) 
 ⁞ 
String StrTexto = Texto; 
if (StrTexto == “ENGENHARIA”) 
 { 
 Seqüência de comandos 
 } 
 
Neste caso criamos uma String chamada StrTexto que já na sua 
declaração recebeu o valor contido no array chamado Texto, depois é só 
efetuar a comparação com a palavra desejada que no nosso exemplo foi 
“ENGENHARIA”. 
 
 
 
 
Exemplo III 
 
 Ler um string do Serial Monitor e comparar com a palavra UNISANTA, 
no caso de coincidência escrever o string no Serial Monitor seguido de “OK”, 
caso contrário escrever o string seguido de “DISCORDANTE”. 
 
Código fonte: 
 
char Texto[9]; 
String StrTexto; 
void setup() 
{ 
 Serial.begin(9600); 
} 
 
void loop() 
{ 
 if (Serial.available() > 0) 
 { 
 delay(100); 
 int tamanho = Serial.available(); 
 for (int i = 0; i < tamanho; i++) 
 { 
 if (i<8) 
 { 
 Texto[i] = Serial.read(); 
 Texto[i+1] = '\0'; 
 } 
 else { Serial.read(); } 
 } 
 StrTexto = Texto; 
 Serial.print(StrTexto); 
 if (StrTexto == "UNISANTA") 
 { 
 Serial.println(" - OK"); 
 } 
 else 
 { 
 Serial.println(" - DISCORDANTE"); 
 } 
 } 
} 
 
Explicação do código fonte: Inicialmente declaramos um array do tipo char 
para 9 elementos “Texto[9]”(8 caracteres + o nulo) e um objeto StrTexto da 
classe String. No setup foi apenas inicializado o Serial Monitor. No loop, 
primeiramente verificamos se tem algum dado no buffer, caso tenha é 
esperado 100ms para garantir que o buffer seja preenchido, em seguida a 
quantidade de caracteres digitados no Serial Monitor será armazenado na 
variável “tamanho”. Com base na quantidade de elementos da variável 
“tamanho” serão efetuadas as repetições através da estrutura FOR, assim, 
será lido um caractere por vez e armazenado na variável “texto[i]” até que seja 
preenchido o array os dados obtidos após o array estar completo serão apenas 
lidos garantindo o esvaziamento do buffer. Fora do FOR o objeto StrTexto 
recebe o conteúdo do array Texto, em seguida este conteúdo é exibido no 
Serial Monitor. Se a palavra armazenada for igual a “UNISANTA” exibirá a 
mensagem “OK” senão, exibirá a mensagem “DISCORDANTE”. 
 
Métodos da Classe String 
 
A classe String possui vários métodos que auxiliam no tratamento e 
depuração de uma string. Para aplicar um método da classe devemos colocar o 
nome do objeto criado seguido de um ponto e o nome do método que se quer 
utilizar. Se quisermos, por exemplo, utilizar o método indexOf para uma string 
chamada StrTexto devemos escrever StrTexto.indexOf . A seguir vamos 
explicar alguns métodos desta classe. 
 
 indexOf – este método retorna a posição de um caractere ou sequência de 
caracteres dentro da String. 
Sintaxe: nome_do_objeto.indexOf(caracteres, posição do inicio da procura) 
Exemplo: 
 String Texto = "ENGENHARIA"; 
 int i = Texto.indexOf('A'); 
 Serial.println(i); 
 // O valor de i será igual a 6 pois a posição inicial é a 0. 
 i = Texto.indexOf('A',7); 
 Serial.println(i); 
 // O valor de i será igual a 9. 
 i = Texto.indexOf('U'); 
 Serial.println(i); 
 // O valor de i será igual a -1 pois não existe coincidência. 
 i = Texto.indexOf("NH"); 
 Serial.println(i); 
 // O valor de i será igual a 4. 
 
 length() - este método retorna o comprimento do objeto String. 
Sintaxe: nome_do_objeto.length() 
Exemplo: 
 String Texto = "ENGENHARIA"; 
 Serial.println(Texto.length()); 
// O valor impresso será 10 que é o comprimento da palavra 
ENGENHARIA. 
 
 trim() – este método retira os espaços em branco do começo e do final da 
string. 
Sintaxe: nome_do_objeto.trim () 
Exemplo: 
 String Texto = " ENGENHARIA "; 
 Texto.trim(); 
 Serial.println(Texto); 
// O valor impresso será ENGENHARIA sem os espaços iniciais e 
finais. 
 
 toLowerCase() – este método transforma todos os caracteres do objeto 
String em letras minúsculas. 
Sintaxe: nome_do_objeto. toLowerCase () 
Exemplo: 
 String Texto = "ENGENHARIA"; 
 Texto. toLowerCase (); 
 Serial.println(Texto); 
// O valor impresso será engenharia. 
 
 
 toUpperCase() – este método transforma todos os caracteres do objeto 
String em letras maiusculas. 
Sintaxe: nome_do_objeto. toUpperCase() 
Exemplo: 
 String Texto = "engenharia"; 
 Texto. toUpperCase(); 
 Serial.println(Texto); 
// O valor impresso será ENGENHARIA. 
 
 
 replace() – com este método podemos substituir um determinado caractere 
da String por outro, ele também pode ser utilizado para substituir uma 
sequência de caracteres. 
Sintaxe: 
nome_do_objeto.replace(caractere a ser substituído, caractere substituto) 
Exemplo: 
 String Texto = "engenharia"; 
 Texto. replace("e" , "3"); 
 Texto. replace("a" , "4"); 
 Serial.println(Texto); 
// O valor impresso será 3ng3nh4ri4. 
Texto = "Eng. Unisanta"; 
 Texto. replace("Eng." , "Engenharia"); 
 Serial.println(Texto); 
// O valor impresso será Engenharia Unisanta. 
 
 charAt() – este método retorna o caractere existente em uma determinada 
posição. 
Sintaxe: nome_do_objeto.charAt(índice da posição) 
Exemplo: 
 String Texto = "Engenharia"; 
 Serial.println(Texto.charAt(2)); 
// O valor impresso será o caractere g. 
 
 setCharAt() – este método insere o caractere determinado na posição 
indicada. 
Sintaxe: nome_do_objeto.setCharAt(índice da posição, caractere) 
Exemplo: 
 String Texto = "Engenharia unisanta"; 
 Texto.setCharAt(11, 'U'); 
 Serial.println(Texto.setCharAt(2)); 
// O valor impresso será Engenharia Unisanta. 
 
 
 substring() – com este método retorna a substring compreendida entre as 
posições indicadas. 
Sintaxe: nome_do_objeto.substring(posição inicial, posição final) 
Obs.: A aposição final pode ser suprimida, neste caso será retornado a 
substring compreendida entre a posição indicada e o final da string. 
Exemplo: 
 String Texto = "ENGENHARIA"; 
 Serial.println(Texto.substring(3,6)); 
// O valor impresso será ENH. 
 Serial.println(Texto.substring(6)); 
 // O valor impresso será ARIA. 
 
 toCharArray() – copia o conteúdo de um objeto do tipo string para um array 
de caracteres. 
Sintaxe: nome_do_objeto. toCharArray (nome do array, tamanho) 
Obs: No tamanho deve ser considerada uma unidade a mais para a 
inserção do caractere nulo de final de array. 
Exemplo: 
 String Texto = "ENGENHARIA"; 
 char str[10] = "XXXXXX";Serial.println(str); 
 // O valor impresso será XXXXXX. 
 Texto.toCharArray(str,11); 
 Serial.println(str); 
 // O valor impresso será ENGENHARIA. 
 
 
 toInt() – converte o conteúdo de um objeto do tipo string para inteiro. Ao 
primeiro caractere encontrado na string que não corresponder a um 
algarismo a conversão é interrompida. 
Sintaxe: nome_do_objeto.toInt() 
Exemplo: 
 String Texto = "1235"; 
 i = Texto.toInt(); 
 Serial.println(i); 
 // será exibido 1235. 
 Texto = "12A35"; 
 i = Texto.toInt(); 
 Serial.println(i); 
 // será exibido 12. 
 
 
 
Capítulo 10 – Exercícios 
 
1) Ligar um LED RGB ao Arduino e receber um caractere através do Serial 
Monitor. Se a letra “R” for digitada deve acender a cor vermelha, quando a 
letra ”G” for digitada devera acender a cor verde e no caso de digitado a 
letra “B” deve acender a cor azul. 
 
 
 
2) Receber uma frase com no máximo 20 caracteres via Serial Monitor, 
identificar qual é o último caractere, verificar quantas vezes ele aparece na 
frase e exibir o resultado no Serial Monitor. 
 
3) Receber através do Serial Monitor a frequência (identificada pela letra F na 
frente do número) e a duração em milissegundos (identificada pela letra D 
na frente do número) de uma sequência de 3 tons, identificar e reproduzir 
em um buzzer ligado Arduino. 
Exemplo de dados: F800 D500 F545 D1000 F720 D650

Outros materiais