Vetores em
Arduino
O que são
vetores?
•
O vetor é uma estrutura de dados indexada, que pode
armazenar uma determinada quantidade de valores do
mesmo tipo.
•
Os dados armazenados em um vetor são chamados de
itens do vetor.
•
Para localizar a posição de um item em um vetor usamos
um número inteiro denominado índice do vetor.
•
Facilidade de manipular um grande conjunto de dados do
mesmo tipo declarando-se apenas uma varíavel
Declarando Vetor no Arduino
•
Todos os métodos abaixo são formas validades de criar – declarar- um vetor
int meusInts[6];
int meusPinos[]={2,4,8,3,6};
int meusValSens[6]={2,4,-8,3,2};
char mensagem[6]=“hello”;
Acessando um vetor
•
Vetores são indexados a partir de 0, isto é, referindo-se a inicialização
dos vetores acima, o primeiro elemento do vetor está no índice 0,
então
•
meusValSens[0]==2, meusValSens[1] == 4, e assim por diante.
•
Isso também significa que em um vetor com dez elementos, o índice
nove é o último elemento.
•
int meuVetor[10] = {9,3,2,4,3,1,7,8,9,11};
•
meuVetor[9] contém 11
Para atribuir e ler um valor a um elemento do
vetor
•
meusValSens[0] =10;
Vetores e loops For
•
Vetores são frequentemente manipulados dentro de loops for, onde o
contador do loop é usado como o índice para cada elemento. Por
exemplo, para imprimir os elementos de um vetor através da porta
serial, você pode fazer algo do tipo:
for (byte i = 0; i < 5; i = i + 1) {
Serial.println(meusPinos[i]);
}
Exemplo – Knight Rider
•
Este exercício é baseado no programa de TV dos anos 80
chamado Knight Rider onde o famoso ator David Hasselhoff
tinha um inteligência artificial dirigindo seu Pontiac. O carro
é corberto de leds piscando em sequência.
Versão 1 – Sem vetor
int pin2 = 2; int pin3 = 3; int pin4 = 4; int pin5 = 5; int pin6 = 6; int pin7 = 7; int timer = 100; void setup(){ pinMode(pin2, OUTPUT); pinMode(pin3, OUTPUT); pinMode(pin4, OUTPUT); pinMode(pin5, OUTPUT); pinMode(pin6, OUTPUT); pinMode(pin7, OUTPUT); } void loop() { digitalWrite(pin2, HIGH); delay(timer); digitalWrite(pin2, LOW); delay(timer); digitalWrite(pin3, HIGH); delay(timer); digitalWrite(pin3, LOW); delay(timer); digitalWrite(pin4, HIGH); delay(timer); digitalWrite(pin4, LOW); delay(timer); digitalWrite(pin5, HIGH); delay(timer); digitalWrite(pin5, LOW); delay(timer); digitalWrite(pin6, HIGH); delay(timer); digitalWrite(pin6, LOW); delay(timer); digitalWrite(pin7, HIGH); delay(timer); digitalWrite(pin7, LOW); delay(timer); digitalWrite(pin6, HIGH); delay(timer); digitalWrite(pin6, LOW); delay(timer); digitalWrite(pin5, HIGH); delay(timer); digitalWrite(pin5, LOW); delay(timer); digitalWrite(pin4, HIGH); delay(timer); digitalWrite(pin4, LOW); delay(timer); digitalWrite(pin3, HIGH); delay(timer); digitalWrite(pin3, LOW); delay(timer); }Exercício
Para se familiarizar com o simulador e com o Arduino, implementar o
projeto abaixo que recebe um caractere via comunicação serial e exibe,
por meio de LEDs, o seu correspondente código ASCII . Lembrete:
int num, c, k; byte pins[] = {6, 7, 8, 9, 10, 11, 12, 13}; void setup() { for(int i = 0; i < 8; i++) { pinMode(pins[i], OUTPUT); } Serial.begin(9600); } void loop() { Serial.println("Digite o numero:\n"); while(!Serial.available()); num = Serial.parseInt(); if(num > 127 || num < -128){
Serial.println("Numero invalido. Faixa de representação (8 bits): -128 a 127"); return; } for(c = 7; c >= 0; c--){ k = num >> c; if(k & 1) digitalWrite(pins[c], HIGH); else digitalWrite(pins[c], LOW); } Serial.print("\n"); }