Vous êtes sur la page 1sur 12

Programao para Arduino - Primeiros Passos

Conceitos iniciais de programao para Arduino


Autor: Lus Fernando Chavier
Arduino
Neste tutorial vamos apresentar os conceitos bsicos de programao necessrios para com
ear a utilizar o Arduino, e tambm outros tipos de de sistemas embarcados semelhant
es. Para conhecer o que possvel construir com esses sistemas, veja a nossa seo de p
rojetos. Se quiser aprender mais sobre Arduino e sistemas embarcados, explore a
nossa seo de tutoriais.
Se voc est usando o Arduino pela primeira vez, no deixe de ver nossos tutoriais de
como configurar o Arduino para Windows ou Mac.
Aqui ns vamos explicar os conceitos de programao desde o incio, e voc no precisa saber
nada sobre Arduino ou programao de computadores para comear. Se voc j tem experincia
prvia com programao, este tutorial talvez no acrescente muito ao seu conhecimento.
Ns vamos aprender como funciona um programa simples, fazendo nele algumas modific
aes ao longo do tutorial. Se voc tiver acesso a um Arduino, voc pode us-lo ao longo d
o tutorial para praticar os conceitos aprendidos, tornando a experincia muito mai
s legal. Voc s precisa de um Arduino, original ou compatvel, e mais nada. Ento vamos
l.
Este tutorial dividido nas seguintes partes:
Introduo
Computador
Programa de Computador
Linguagem de Programao
Algoritmo (Programa)
Varivel
Tipo de Dado
Atribuio
Operador
Funo
Chamada de Funo
Valor de Retorno
Parmetros
Comentrios
Estruturas de Controle
While
For
If
If-Else
Bibliotecas
Concluso
Introduo
O objetivo deste tutorial apresentar, de uma forma simples e rpida, o bsico de pro
gramao para que voc possa comear a utilizar o Arduino em seus projetos, sem ter que
ler muitos livros ou artigos sobre programao. O tema "desenvolvimento de software"
como um todo muito abrangente, ento vamos focar apenas nos conceitos que so impor
tantes para Arduino e sistemas embarcados em geral.
Existem muitas outras coisas para se aprender na parte de software que no vamos a

bordar aqui. No final do artigo ns colocamos links que voc pode seguir para aprend
er conceitos mais avanados ou conceitos de software que no so muito utilizados na p
rogramao de sistemas embarcados.
Vamos comear explicando como funciona um computador (lembre-se que o Arduino , no
fundo, um computador).
Computador
Um computador , de forma simplificada, uma mquina que processa instrues. Essas instr
ues so processadas no "crebro" do computador, que se chama microprocessador. Todo co
mputador possui pelo menos um microprocessador. O Arduino, por exemplo, nada mai
s do que um computador muito pequeno, e ele utiliza um microprocessador do model
o ATmega. Alguns microprocessadores, como o ATmega, tambm so chamados de microcont
roladores.
Programa de Computador
Um programa de computador, ou software, uma sequncia de instrues que so enviadas par
a o computador. Cada tipo de microprocessador (crebro) entende um conjunto de ins
trues diferente, ou seja, o seu prprio "idioma". Tambm chamamos esse idioma de lingu
agem de mquina.
As linguagens de mquina so, no fundo, as nicas linguagens que os computadores conse
guem entender, s que elas so muito difceis para os seres humanos entenderem. por is
so ns usamos uma coisa chamada linguagem de programao.
No caso de sistemas como o Arduino (os chamados sistemas embarcados), o software
que roda no microprocessador tambm chamado de firmware.
Linguagem de Programao
Ns seres humanos precisamos converter as nossas idias para uma forma que os comput
adores consigam processar, ou seja, a linguagem de mquina. Os computadores de hoj
e (ainda) no conseguem entender a linguagem natural que ns usamos no dia a dia, en
to precisamos de um outro "idioma" especial para instruir o computador a fazer as
tarefas que desejamos. Esse "idioma" uma linguagem de programao, e na verdade exi
stem muitas delas.

Essas linguagens de programao tambm so chamadas de linguagens de programao de alto nve


. A linguagem de programao utilizada no Arduino a linguagem C++ (com pequenas modi
ficaes), que uma linguagem muito tradicional e conhecida. Essa a linguagem que uti
lizaremos ao longo deste tutorial.
Para converter um programa escrito em uma linguagem de alto nvel para linguagem d
e mquina, ns utilizamos uma coisa chamada compilador. A ao de converter um programa
para linguagem de mquina chamada compilar. Para compilar um programa, normalmente
se utiliza um ambiente de desenvolvimento (ou IDE, do ingls Integrated Developme
nt Environment), que um aplicativo de computador que possui um compilador integr
ado, onde voc pode escrever o seu programa e compil-lo. No caso do Arduino, esse a
mbiente de desenvolvimento o Arduino IDE.
O texto contendo o programa em uma linguagem de programao de alto nvel tambm conheci
do como o cdigo fonte do programa.
Algoritmo (Programa)
Um algoritmo, ou simplesmente programa, uma forma de dizer para um computador o
que ele deve fazer, de uma forma que ns humanos conseguimos entender facilmente.
Os algoritmos normalmente so escritos em linguagens de programao de alto nvel. Isso
se aplica a praticamente qualquer computador, inclusive o Arduino, onde um algor
itmo tambm conhecido como sketch. Para simplificar, a partir de agora ns vamos nos
referir aos algoritmos, programas ou sketches simplesmente como "programas".

Um programa composto de uma sequncia de comandos, normalmente escritos em um arqu


ivo de texto. Para este tutorial, vamos usar como base os comandos do programa m
ais simples do Arduino, o Blink, que simplesmente acende e apaga um LED, e vamos
destrinch-lo ao longo do tutorial. Veja abaixo o cdigo fonte do Blink:
int led = 13;
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
Varivel
Uma varivel um recurso utizado para armazenar dados em um programa de computador.
Todo computador possui algum tipo de memria, e uma varivel representa uma regio da
memria usada para armazenar uma determinada informao. Essa informao pode ser, por ex
emplo, um nmero, um caractere ou uma sequncia de texto. Para podermos usar uma var
ivel em um programa Arduino, ns precisamos fazer uma declarao de varivel, como por ex
emplo:
int led;
Nesse caso estamos declarando uma varivel do tipo int chamada led. Em seguida ns f
alaremos mais sobre o tipo de dado de uma varivel.
Tipo de Dado
O tipo de dado de uma varivel significa, como o prprio nome diz, o tipo de informao
que se pode armazenar naquela varivel. Em muitas linguagens de programao, como C++,
obrigatrio definir o tipo de dado no momento da declarao da varivel, como vimos na
declarao da varivel led acima. No caso dos mdulos Arduino que usam processador ATmeg
a, os tipos mais comuns de dados que utilizamos so:
boolean: valor verdadeiro (true) ou falso (false)
char: um caractere
byte: um byte, ou sequncia de 8 bits
int: nmero inteiro de 16 bits com sinal (-32768 a 32767)
unsigned int: nmero inteiro de 16 bits sem sinal (0 a 65535)
long: nmero inteiro de 16 bits com sinal (-2147483648 a 2147483647)
unsigned long: nmero inteiro de 16 bits sem sinal (0 a 4294967295)
float: nmero real de preciso simples (ponto flutuante)
double: nmero real de preciso dupla (ponto flutuante)
string: sequncia de caracteres
void: tipo vazio (no tem tipo)
Para conhecer todos os tipos de dado suportados pelo Arduino, veja a seo "Data Typ
es" nessa pgina.
Atribuio
Atribuir um valor a uma varivel significa armazenar o valor nela para usar poster
iormente. O comando de atribuio em C++ o =. Para atriburmos o valor 13 varivel led q
ue criamos acima, fazemos assim:
led = 13;

Quando se armazena um valor em uma varivel logo na sua inicializao, chamamos isso d
e inicializao de varivel. Assim, no nosso programa de exemplo temos:
int led = 13;
O objetivo dessa linha de cdigo dizer que o pino 13 do Arduino ser utilizado para
acender o LED, e armazenar essa informao para usar depois ao longo do programa.
Os valores fixos usados no programa, como o valor 13 acima, so chamados de consta
ntes, pois, diferentemente das variveis, o seu valor no muda.
Operador
Um operador um conjunto de um ou mais caracteres que serve para operar sobre uma
ou mais variveis ou constantes. Um exemplo muito simples de operador o operador
de adio, o +. Digamos que queremos somar dois nmeros e atribuir a uma varivel x. Par
a isso, fazemos o seguinte:
x = 2 + 3;
Aps executar o comando acima, a varivel x ir conter o valor 5.
Cada linguagem de programao possui um conjunto de operadores diferente. Alguns dos
operadores mais comuns na linguagem C++ so:
Operadores aritmticos:
+: adio ("mais")
-: subtrao ("menos")
*: multiplicao ("vezes")
/: diviso ("dividido por")
Operadores lgicos:
&&: conjuno ("e")
||: disjuno ("ou")
==: igualdade ("igual a")
!=: desigualdade ("diferente de")
!: negao ("no")
>: "maior que"
<: "menor que"
>=: "maior ou igual a"
<=: "menor ou igual a"
Operadores de atribuio:
=: atribui um valor a uma varivel, como vimos acima.
Ao longo do desenvolvimento dos seus projetos, aos poucos voc se familiarizar com
todos esses operadores. Para uma lista completa, veja essa pgina da Wikipedia.
Funo

Uma funo , em linhas gerais, uma sequncia de comandos que pode ser reutilizada vrias
vezes ao longo de um programa. Para criar uma funo e dizer o que ela faz, ns precis
amos fazer uma declarao de funo. Veja como uma funo declarada no nosso programa de ex
mplo:
void setup() {
pinMode(led, OUTPUT);
}

Aqui estamos declarando uma funo com o nome setup(). O que ela faz executar os com
andos de uma outra funo pinMode(). A ao de executar os comandos de funo previamente de
clarada denominada chamada de funo. Ns no precisamos declarar a funo pinMode() porque
ela j declarada automaticamente no caso do Arduino.

Chamada de Funo
Chamar uma funo significa executar os comandos que foram definidos na sua declarao.
Uma vez declarada, uma funo pode ser chamada vrias vezes no mesmo programa para que
seus comandos sejam executados novamente. Para chamarmos a nossa funo setup(), po
r exemplo, ns usaramos o seguinte comando:
setup();
No entanto, no caso do Arduino, ns no precisamos chamar a funo setup(), porque ela c
hamada automaticamente. Quando compilamos um programa no Arduino IDE, ele chama
a funo setup() uma vez e depois chama a funo loop() repetidamente at que o Arduino se
ja desligado ou reiniciado.
Valor de Retorno
A palavra chave que vem antes do nome da funo na declarao define o tipo do valor de
retorno da funo. Toda vez que uma funo chamada, ela executada e devolve ou retorna u
m determinado valor - esse o valor de retorno, ou simplesmente retorno da funo. O
valor de retorno precisa ter um tipo, que pode ser qualquer um dos tipos de dado
s citados anteriormente. No caso da nossa funo setup(), o tipo de retorno void, o
que significa que a funo no retorna nada.
Para exemplificar, vamos criar uma funo que retorna alguma coisa, por exemplo um nm
ero inteiro. Para retornar um valor, ns utilizamos o comando return:
int f() {
return 1;
}
Quando chamada, a funo f() acima retorna sempre o valor 1. Voc pode usar o valor de
retorno de uma funo para atribu-lo a uma varivel. Por exemplo:
x = f();
Aps declarar a funo f() e chamar o comando de atribuio acima, a varivel x ir conter o
alor 1.
Parmetros
Um outro recurso importante de uma funo so os parmetros. Eles servem para enviar alg
um dado para a funo quando ela chamada. Vamos criar por exemplo uma funo que soma do
is nmeros:
int soma(int a, int b) {
return a + b;
}
Aqui acabamos definir uma funo chamada soma(), que aceita dois nmeros inteiros como
parmetros. Ns precisamos dar um nome para esses parmetros, e nesse caso escolhemos
a e b. Esses parmetros funcionam como varivel que voc pode usar dentro da funo. Semp
re que chamarmos a funo soma(), precisamos fornecer esses dois nmeros. O comando re
turn a + b; simplesmente retorna a funo com a soma dos dois nmeros. Vamos ento somar
2 + 3 e atribuir o resultado para uma varivel x:
x = soma(2, 3);
Aps a chamada acima, a varivel x ir conter o valor 5.
Comentrios
Um comentrio um trecho de texto no seu programa que serve apenas para explicar (d
ocumentar) o cdigo, sem executar nenhum tipo de comando no programa. Muitas vezes

, os comentrios so usados tambm para desabilitar comandos no cdigo. Nesse caso, dize
mos que o cdigo foi comentado.
Na linguagem C++, um comentrio pode ser escrito de duas formas:
Comentrio de linha: inicia-se com os caracteres //, tornando todo o resto da
linha atual um comentrio.
Comentrio de bloco: inicia-se com os caracteres /* e termina com os caractere
s */. Todo o texto entre o incio e o trmino se torna um comentrio, podendo ser comp
osto de vrias linhas.
Para facilitar a visualizao, os ambientes de desenvolvimento geralmente mostram os
comentrios em uma cor diferente. No caso do Arduino IDE, por exemplo, os comentri
os so exibidos na cor cinza. Vamos ento explicar o que o programa de exemplo faz,
inserindo nele vrios comentrios explicativos:
/*
Programao para Arduino - Primeiros Passos
Programa de exemplo: Blink
*/
/*
Declarao da varivel "led"
Indica que o LED est conectado no pino digital 13 do Arduino (D13).
*/
int led = 13;
/*
Declarao da funo setup()
Esta funo chamada apenas uma vez, quando o Arduino ligado ou reiniciado.
*/
void setup() {
// Chama a funo pinMode() que configura um pino como entrada ou sada
pinMode(led, OUTPUT); // Configura o pino do LED como sada
}
/*
Declarao da funo loop()
Aps a funo setup() ser chamada, a funo loop() chamada repetidamente at
o Arduino ser desligado.
*/
void loop() {
// Todas as linhas a seguir so chamadas de funo com passagem de parmetros
// As funes so executadas em sequncia para fazer o LED acender e apagar
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o
delay(1000);
// Espera 1000 milissegundos (um segundo)
digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o
delay(1000);
// Espera 1000 milissegundos (um segundo)
// Aps terminar a funo loop(), ela executada novamente repetidas vezes,
// e assim o LED continua piscando.
}
Estruturas de Controle
Estruturas de controle so blocos de instrues que alteram o fluxo de execuo do cdigo de
um programa. Com elas possvel fazer coisas como executar comandos diferentes de
acordo com uma condio ou repetir uma srie de comandos vrias vezes, por exemplo.
A seguir ns veremos algumas das estruturas de controle mais comuns usadas nas lin

guagens de programao em geral. Vamos tambm modificar o nosso programa de teste para
exemplificar melhor como essas estruturas funcionam.
While
O while uma estrutura que executa um conjunto de comandos repetidas vezes enquan
to uma determinada condio for verdadeira. While em ingls quer dizer "enquanto", e p
ronuncia-se "ui-ou". Ele segue o seguinte formato:
while(condio) {
...
}
Vamos ento fazer uma modificao no nosso programa para exemplificar melhor como o wh
ile funciona. O nosso objetivo agora fazer o LED piscar trs vezes, depois esperar
cinco segundos, piscar mais trs vezes e assim por diante. Ns vamos mudar o contedo
da funo loop() para o seguinte:
// Varivel para contar o nmero de vezes que o LED piscou
int i = 0;
// Pisca o LED trs vezes
while(i < 3) {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendoo
delay(1000);
// Espera 1000 milissegundos (um segundo)
digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagandoo
delay(1000);
i = i + 1;

// Espera 1000 milissegundos (um segundo)


// Aumenta o nmero de vezes que o LED piscou

}
delay(5000);

// Espera 5 segundos para piscar o LED de novo

Primeiro ns declaramos uma varivel i. Essa varivel vai contar quantas vezes o LED j
piscou desde o incio do programa ou desde a ltima pausa de cinco segundos. Ns vamos
inicializar essa varivel com zero porque no incio da funo loop() o LED ainda no pisc
ou nenhuma vez sob essas condies.
Em seguida ns inserimos o comando while, que deve ser seguido de uma condio definid
a entre parnteses. Enquanto essa condio for verdadeira, todo o bloco de comandos en
tre os caracteres { e } executado repetidamente. No caso do nosso programa, enqu
anto o nmero de "piscadas" do LED (representado pela varivel i) for menor do que t
rs, ns continuamos a executar os comandos que fazem o LED piscar. Isso representad
o pela expresso i < 3 dentro dos parnteses.
Entre os caracteres { e } ns colocamos o cdigo que faz o LED piscar, como anterior
mente, mas no podemos nos esquecer de somar 1 varivel que conta o nmero de "piscada
s". Isso feito na seguinte linha de cdigo:
i = i + 1;

// Aumenta o nmero de vezes que o LED piscou

Veja que aps executar todos os comandos entre { e }, sempre teremos na varivel i o
nmero de vezes que o LED piscou desde o incio da funo loop(). Vamos percorrer a seq
uncia de passos executada cada vez que a funo loop() chamada:
Atribumos 0 varivel i: o LED ainda no piscou nenhuma vez.
Comparamos se i < 3: como 0 menor do que 3, executamos os comandos entre { e
}:
Executamos os comandos para acender e apagar o LED.
Somamos 1 varivel i, tornando-a 1: sabemos que o LED piscou uma vez.

Voltamos ao incio do while e comparamos se i < 3: como 1 menor do que 3, exec


utamos os comandos entre { e } novamente:
Executamos os comandos para acender e apagar o LED.
Somamos 1 varivel i, tornando-a 2: sabemos que o LED piscou duas vezes.
Voltamos ao incio do while e comparamos se i < 3: como 2 menor do que 3, exec
utamos os comandos entre { e } novamente:
Executamos os comandos para acender e apagar o LED.
Somamos 1 varivel i, tornando-a 3: sabemos que o LED piscou trs vezes.
Voltamos ao incio do while e comparamos se i < 3: como 3 no menor do que 3, no
executamos mais os comandos entre { e } e prosseguimos prxima instruo.
Esperamos cinco segundos por meio da chamada delay(5000).
Aps esses passos, chegamos ao final da funo loop(), e como j sabemos, ela chamada no
vamente pelo sistema do Arduino. Isso reinicia o ciclo, executando os passos aci
ma indefinidamente.
Rode o programa modificado com as instrues acima no seu Arduino e tente variar o nm
ero de "piscadas" e o nmero
For
Agora que ns j aprendemos o comando while, fica muito fcil aprender o comando for,
pois ele quase a mesma coisa. Vamos modificar o contedo da funo loop() como fizemos
acima, porm usando o for no lugar do while:
// Varivel para contar o nmero de vezes que o LED piscou
int i;
// Pisca o LED trs vezes
for(i = 0; i < 3; i++) {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendoo
delay(1000);
// Espera 1000 milissegundos (um segundo)
digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagandoo
delay(1000);

// Espera 1000 milissegundos (um segundo)

}
delay(5000);

// Espera 5 segundos para piscar o LED de novo

A primeira modificao que fizemos foi declarar a varivel i sem inicializ-la com o val
or 0. Ns podemos fazer isso porque o comando for far isso para a gente. Ele segue
o seguinte formato:
for(inicializao; condio; finalizao) {
...
}
Vamos descrever cada item separadamente:

Condio: uma expresso verificada repetidamente, de forma idntica condio entre pa


ses do while. Enquanto ela for verdadeira, os comandos entre { e } continuam sen
do executados.
Inicializao: um comando executado apenas uma vez no incio do comando for.
Finalizao: um comando executado repetidas vezes ao final de cada execuo dos coma
ndos entre { e }.
Podemos ento verificar que o for nada mais do que um while acrescido de um comand
o de inicializao e um comando de finalizao. Para o nosso programa de teste, esses co
mandos so, respectivamente:

i = 0: inicializa a contagem do nmero de "piscadas".


i++: soma 1 varivel i ao final da execuo dos comandos entre { e }; nesse caso e
le equivalente ao comando i = i + 1. O operador ++ chamado de operador de increm
ento, e muito usado na linguagem C++.
Se executarmos o programa acima no Arduino, veremos que o resultado o mesmo que
obtivemos com o programa que fizamos anteriormente utilizando o while.
If
O if uma das estruturas mais bsicas de programao em geral. If significa "se" em ing
ls, e exatamente isso que ele faz: ele verifica uma expresso e, apenas se ela for
verdadeira, executa um conjunto de comandos. Em linguagem natural, ele executa u
ma lgica do tipo: "se isso for verdadeiro, ento faa aquilo"
Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faa a mes
ma coisa que fizemos com o while e o for acima, porm vamos fazer isso usando um i
f, que segue o seguinte formato:
if(condio) {
...
}
A lgica muito simples: sempre que a condio vor verdadeira, os comandos entre { e }
so executados, caso contrrio o programa prossegue sem execut-los. Vamos ver ento com
o fica a funo loop():
// Varivel para contar o nmero de vezes que o LED piscou
int i = 0;
void loop() {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do LED, acendendo-o
delay(1000);
// Espera 1000 milissegundos (um segundo)
digitalWrite(led, LOW); // Atribui nvel lgico baixo ao pino do LED, apagando-o
delay(1000);
// Espera 1000 milissegundos (um segundo)
i++;
if(i == 3) {
delay(5000);
i = 0;
}

// Incrementa o nmero de "piscadas"


// Espera 5 segundos para piscar o LED de novo
// Reinicia o contador de nmero de "piscadas"

}
Aqui a lgica um pouco diferente: ns vamos manter a funo loop() piscando o LED como n
o programa original, porm vamos inserir uma espera adicional de 5 segundos aps cad
a 3 piscadas. Para isso, criamos uma varivel i fora da funo loop(); ela precisa ser
declarada de fora da funo para poder reter o seu valor entre cada execuo da funo loop
(). Chamamos isso de varivel global. Quando a varivel declarada dentro do corpo da
funo, ela no retm o valor etnre cada execuo, sendo reiniciada a cada vez que a funo
executada. Chamamos isso de varivel local.
Ns usaremos ento essa varivel global i para contar, novamente, o nmero de vezes que
o LED acendeu e apagou. Na declarao da varivel, ns a inicializamos com o valor 0 par
a indicar que o LED no acendeu nenhuma vez ainda. A funo loop() ento comea a ser exec
utada, acendendo e apagando o LED. Para contar o nmero de vezes que o LED piscou,
ns adicionamos a seguinte linha de cdigo:
i++;

// Incrementa o nmero de "piscadas"

Em seguida utilizamos o if para verificar se acabamos de acender o LED pela terc


eira vez. Para isso, usamos a expresso i == 3 na condio do f. Se essa expresso for ve

rdadeira, isso que dizer que o LED j acendeu 3 vezes, ento inserimos uma pausa adi
cional de 5 segundos com a chamada delay(5000) e reiniciamos a contagem do nmero
de "piscadas" novamente com o seguinte comando:
i = 0;

// Reinicia o contador de nmero de "piscadas"

A partir da a funo loop() continua sendo chamada e o ciclo se inicia novamente.


If-Else
O if-else, tambm conhecido como if-then-else, pode ser visto como uma extenso do c
omando if. Else em ingls significa "caso contrrio", e ele faz exatamente o que o n
ome diz: "se isso for verdadeiro, ento faa aquilo, caso contrrio, faa outra coisa".
Ele segue o seguinte formato:
if(condio) {
...
} else {
...
}
Para exemplificar, vamos usar o programa do for que mostramos acima, mas vamos d
essa vez fazer o LED acender e apagar quatro vezes antes de dar uma pausa de cin
co segundos. Depois vamos fazer com que na terceira de cada uma dessas quatro "p
iscadas", o LED acenda por um perodo mais curto. Dentro da funo loop(), teremos o s
eguinte:
// Varivel para contar o nmero de vezes que o LED piscou
int i;
// Pisca o LED trs vezes
for(i = 0; i < 3; i++) {
if(i == 2) {
digitalWrite(led, HIGH);
o-o
delay(200);
digitalWrite(led, LOW);
o-o
delay(1800);
} else {
digitalWrite(led, HIGH);
o-o
delay(1000);
digitalWrite(led, LOW);
o-o
delay(1000);
}
}
delay(5000);

// Atribui nvel lgico alto ao pino do LED, acendend


// Espera 200 milissegundos (um segundo)
// Atribui nvel lgico baixo ao pino do LED, apagand
// Espera 1800 milissegundos (um segundo)
// Atribui nvel lgico alto ao pino do LED, acendend
// Espera 1000 milissegundos (um segundo)
// Atribui nvel lgico baixo ao pino do LED, apagand
// Espera 1000 milissegundos (um segundo)

// Espera 5 segundos para piscar o LED de novo

Aqui o que fazemos , toda vez que vamos acender o LED, verificar se a terceira ve
z que isso acontece, por meio do comando if com a condio i == 2. Se essa expresso f
or verdadeira, isso quer dizer que j acendemos o LED duas vezes e estamos prestes
a acend-lo pela terceira vez; nesse caso mudamos o tempo que o LED fica acaso pa
ra um valor menor, de 0,2 segundo (uma reduo de 0,8 segundo) e o tempo que ele fic
a apagado para um valor maior, de 1,8 segundos (aumento de 0,8 segundo).
Mas e se essa no for a terceira vez que o LED est sendo acionado? a que entra o els
e: se a condio do if for verdadeira, o bloco de comandos entre { e } logo aps o if
executado, caso contrrio, o bloco entre { e } aps o else executado. Isso quer dize

r que para a primeira, segunda e quarta "piscadas" ser usado o tempo padro de um s
egundo.
Bibliotecas
As coisas que aprendemos nas sees anteriores so importantes para implementar a lgica
do seu programa no Arduino, mas normalmente voc vai querer fazer mais coisas alm
de apenas acender um LED. Quando se faz tarefas mais complexas ou se utiliza alg
um outro circuito conectado ao seu Arduino, um recurso muito importante so as bib
liotecas.
Uma biblioteca basicamente composta de cdigo fonte adicional que voc adiciona ao s
eu projeto por meio do comando include. Vejamos como adicionar, por exemplo, uma
biblioteca para controle de um display de cristal liquido (LCD):
#include <LiquidCrystal.h>
Uma biblioteca do Arduino se apresenta normalmente como uma ou mais classes que
possuem funes, os mtodos, para acionar dispositivos, configur-los ou executar alguma
outra tarefa. Continuando com o exemplo do display de cristal lquido, para us-lo
no seu programa, primeiro preciso inicializ-lo. O que fazemos nesse caso criar um
objeto para acessar o LCD (tecnicamente isso se chama instanciar um objeto). Ve
jamos como isso feito:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
Quando fazemos isso, lcd se torna um objeto da classe LiquidCrystal. Isso o equi
valente a criar uma varivel do tipo LiquidCrystal. Os parmetros que so passados ent
re parnteses servem para inicializar a configurao desse objeto, e nesse caso corres
pondem aos nmeros dos pinos que foram utilizados para conectar o LCD ao Arduino.
Quase sempre as bibliotecas de Arduino possuem um mtodo begin(), que serve para f
azer a configurao inicial do dispositivo que est sendo controlado. Para chamar a fu
no begin() do objeto lcd que criamos, fazemos o seguinte:
lcd.begin(16, 2);
Normalmente esse mtodo begin() chamado de dentro da funo setup(), ou seja, durante
a inicializao do programa. Os parmetros do mtodo begin(), nesse caso, correspondem a
o nmero de colunas e o nmero de linhas do LCD, respectivamente.
Feitos esses passos, j podemos escrever texto no LCD. Fazemos isso usando o mtodo
print() do objeto lcd, sempre que precisarmos ao longo do programa:
lcd.print("Oi!");
O mtodo print() apenas um dos vrios mtodos disponveis na blblioteca LiquidCrystal. P
ara saber todos os mtodos fornecidos por uma determinada biblioteca, preciso cons
ultar a documentao fornecida com ela.
Este o processo bsico de utilizao de bibliotecas no Arduino. Para mais informaes, lei
a a documentao fornecida com a biblioteca que voc est usando.
Classes, objetos e mtodos so conceitos de programao orientada a objetos. No vamos exp
licar tudo em detalhes aqui, mas se voc quiser aprender mais sobre isso, siga os
links relacionados no final da pgina.
Concluso
Neste tutorial ns vimos os conceitos bsicos de programao necessrios para programar um
Arduino ou mesmo outras plataformas de hardware embarcado. Mas isso s o comeo, e
ainda h muitas coisas a se aprender, tanto na parte de hardware quanto na parte d

e software. Segue ento uma lista para outros artigos e tutoriais interessantes pa
ra que voc possa aprender conceitos mais avanados e expandir as suas possibilidade
s:
Programao em C
Instalando o ambiente de desenvolvimento (PUC-RS)
Introduo programao C (PUC-RS)
Curso de Programao em C (Unicamp)
C Programming (em ingls)
Programao orientada a objetos em C++
C++ como uma linguagem de programao orientada a objetos (Unicamp)
Entendendo C++ - verso original em ingls aqui
Escrevendo bibliotecas para o Arduino (em ingls)

Vous aimerez peut-être aussi