You are on page 1of 19

Neste tutorial vamos apresentar os conceitos bsicos de programao necessrios

para comear a utilizar o Arduino, e tambm outros tipos de de sistemas


embarcados semelhantes. Para conhecer o que possvel construir com esses
sistemas, veja a nossa seo de projetos. 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
modificaes ao longo do tutorial. Se voc tiver acesso a um Arduino, voc pode
us-lo ao longo do tutorial para praticar os conceitos aprendidos, tornando a
experincia muito mais 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
o

Tipo de Dado

Atribuio

Operador

Funo
o

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
programao 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 importantes para Arduino e sistemas
embarcados em geral.
Existem muitas outras coisas para se aprender na parte de software que no
vamos abordar aqui. No final do artigo ns colocamos links que voc pode seguir
para aprender conceitos mais avanados ou conceitos de software que no so
muito utilizados na programao 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 instrues so processadas no "crebro" do computador, que se
chama microprocessador. Todo computador possui pelo menos um
microprocessador. O Arduino, por exemplo, nada mais do que um computador
muito pequeno, e ele utiliza um microprocessador do modelo ATmega. Alguns
microprocessadores,
como
o
ATmega,
tambm
so
chamados
de microcontroladores.

Programa de Computador
Um programa de computador, ou software, uma sequncia de instrues que
so enviadas para o computador. Cada tipo de microprocessador (crebro)
entende um conjunto de instrues diferente, ou seja, o seu prprio "idioma".
Tambm chamamos esse idioma de linguagem de mquina.
As linguagens de mquina so, no fundo, as nicas linguagens que os
computadores conseguem entender, s que elas so muito difceis para os seres
humanos entenderem. por isso 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 computadores consigam processar, ou seja, a linguagem de mquina. Os
computadores de hoje (ainda) no conseguem entender a linguagem natural que
ns usamos no dia a dia, ento 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 existem muitas delas.
Essas linguagens de programao tambm so chamadas de linguagens de
programao de alto nvel. A linguagem de programao utilizada no Arduino a
linguagem C++ (com pequenas modificaes), que uma linguagem muito
tradicional e conhecida. Essa a linguagem que utilizaremos ao longo deste
tutorial.
Para converter um programa escrito em uma linguagem de alto nvel para
linguagem de 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 Development Environment), que
um aplicativo de computador que possui um compilador integrado, onde voc pode
escrever o seu programa e compil-lo. No caso do Arduino, esse ambiente de
desenvolvimento o Arduino IDE.
O texto contendo o programa em uma linguagem de programao de alto nvel
tambm conhecido 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 algoritmo 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 arquivo de texto. Para este tutorial, vamos usar como base os comandos
do programa mais 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 exemplo, um nmero, um caractere ou
uma sequncia de texto. Para podermos usar uma varivel em um programa
Arduino, ns precisamos fazer uma declarao de varivel, como por exemplo:
int led;

Nesse caso estamos declarando uma varivel do tipo int chamada led. Em
seguida ns falaremos 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 ATmega, os tipos mais comuns de
dados que utilizamos so:

boolean:

char:

um caractere

byte:

um byte, ou sequncia de 8 bits

int:

unsigned int:

valor verdadeiro (true) ou falso (false)

nmero inteiro de 16 bits com sinal (-32768 a 32767)


nmero inteiro de 16 bits sem sinal (0 a 65535)

long:

unsigned long:

float:

double:

nmero real de preciso dupla (ponto flutuante)

string:

sequncia de caracteres

void:

nmero inteiro de 16 bits com sinal (-2147483648 a 2147483647)


nmero inteiro de 16 bits sem sinal (0 a 4294967295)

nmero real de preciso simples (ponto flutuante)

tipo vazio (no tem tipo)

Para conhecer todos os tipos de dado suportados pelo Arduino, veja a seo "Data
Types" nessa pgina.

Atribuio
Atribuir um valor a uma varivel significa armazenar o valor nela para usar
posteriormente. O comando de atribuio em C++ o =. Para atriburmos o
valor 13 varivel led que criamos acima, fazemos assim:
led = 13;

Quando se armazena um valor em uma varivel logo na sua inicializao,


chamamos isso de 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 constantes, 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. Para isso, fazemos o seguinte:
x = 2 + 3;

Aps executar o comando acima, a varivel

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:
o

&&:

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:
o

=:

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 precisamos fazer uma declarao de funo. Veja como uma
funo declarada no nosso programa de exemplo:
void setup() {
pinMode(led, OUTPUT);
}

Aqui estamos declarando uma funo com o nome setup(). O que ela faz
executar os comandos de uma outra funo pinMode(). A ao de executar os
comandos de funo previamente declarada 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(), por exemplo, ns usaramos o seguinte
comando:
setup();

No entanto, no caso do Arduino, ns no precisamos chamar a funo setup(),


porque ela chamada 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 seja 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 um 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 dados 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 nmero 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 valor 1.

Parmetros

Um outro recurso importante de uma funo so os parmetros. Eles servem para


enviar algum dado para a funo quando ela chamada. Vamos criar por exemplo
uma funo que soma dois 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. Sempre que chamarmos a funo soma(),
precisamos fornecer esses dois nmeros. O comando return 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

ir conter o valor 5.

Comentrios
Um comentrio um trecho de texto no seu programa que serve apenas para
explicar (documentar) o cdigo, sem executar nenhum tipo de comando no
programa. Muitas vezes, os comentrios so usados tambm para desabilitar
comandos no cdigo. Nesse caso, dizemos que o cdigo foi comentado.
Na linguagem C++, um comentrio pode ser escrito de duas formas:

Comentrio de linha: inicia-se com os caracteres


da linha atual um comentrio.

Comentrio de bloco: inicia-se com os caracteres /* e termina com os


caracteres */. Todo o texto entre o incio e o trmino se torna um comentrio,
podendo ser composto de vrias linhas.

//,

tornando todo o resto

Para facilitar a visualizao, os ambientes de desenvolvimento geralmente


mostram os comentrios em uma cor diferente. No caso do Arduino IDE, por
exemplo, os comentrios 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 rei
niciado.
*/
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 repetidam
ente 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);
digitalWrite(led, LOW);
LED, apagando-o
delay(1000);

// Espera 1000 milissegundos (um segundo)


// Atribui nvel lgico baixo ao pino do

// 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 linguagens 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
enquanto uma determinada condio for verdadeira. While em ingls quer dizer
"enquanto", e pronuncia-se "ui-ou". Ele segue o seguinte formato:
while(condio) {
...

Vamos ento fazer uma modificao no nosso programa para exemplificar melhor
como o while 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, acendendo-o
delay(1000);
digitalWrite(led, LOW);
LED, apagando-o
delay(1000);
i = i + 1;
piscou

// Espera 1000 milissegundos (um segundo)


// Atribui nvel lgico baixo ao pino do

// Espera 1000 milissegundos (um segundo)


// Aumenta o nmero de vezes que o LED

delay(5000);
novo

// Espera 5 segundos para piscar o LED de

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 piscou nenhuma vez sob essas condies.
Em seguida ns inserimos o comando while, que deve ser seguido de
uma condio definida entre parnteses. Enquanto essa condio for verdadeira,
todo o bloco de comandos entre os caracteres { e } executado repetidamente.
No caso do nosso programa, enquanto o nmero de "piscadas" do LED
(representado pela varivel i) for menor do que trs, ns continuamos a executar

os comandos que fazem o LED piscar. Isso representado pela expresso


3 dentro dos parnteses.

i <

Entre os caracteres { e } ns colocamos o cdigo que faz o LED piscar, como


anteriormente, mas no podemos nos esquecer de somar 1 varivel que conta o
nmero de "piscadas". Isso feito na seguinte linha de cdigo:
i = i + 1;
piscou

// Aumenta o nmero de vezes que o LED

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 sequncia de passos executada cada vez que a
funo loop() chamada:
1.

Atribumos 0 varivel i: o LED ainda no piscou nenhuma vez.

2.

Comparamos se i < 3: como 0 menor do que 3, executamos os


comandos entre { e }:
1.
2.

3.

2.

2.

6.

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, executamos os comandos entre { e } novamente:
1.

5.

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, executamos os comandos entre { e } novamente:
1.

4.

Executamos os comandos para acender e apagar o LED.

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 novamente pelo sistema do Arduino. Isso reinicia o ciclo, executando
os passos acima indefinidamente.
Rode o programa modificado com as instrues acima no seu Arduino e tente
variar o nmero 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, acendendo-o
delay(1000);
digitalWrite(led, LOW);
LED, apagando-o
delay(1000);

// Espera 1000 milissegundos (um segundo)


// Atribui nvel lgico baixo ao pino do

// Espera 1000 milissegundos (um segundo)

delay(5000);
novo

// Espera 5 segundos para piscar o LED de

A primeira modificao que fizemos foi declarar a varivel i sem inicializ-la com o
valor 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 parnteses do while. Enquanto ela for verdadeira, os
comandos entre { e } continuam sendo 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 comandos entre { e }.

Podemos ento verificar que o for nada mais do que um while acrescido de um
comando de inicializao e um comando de finalizao. Para o nosso programa de
teste, esses comandos so, respectivamente:

i = 0:

i++:

inicializa a contagem do nmero de "piscadas".

soma 1 varivel i ao final da execuo dos comandos entre { e };


nesse caso ele equivalente ao comando i = i + 1. O operador ++
chamado de operador de incremento, 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 ingls, 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 uma lgica do tipo: "se isso for verdadeiro, ento faa aquilo"
Para ilustrar, vamos modificar o nosso programa de exemplo para que ele faa a
mesma coisa que fizemos com o while e o for acima, porm vamos fazer isso
usando um if, 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 como 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);
digitalWrite(led, LOW);
LED, apagando-o

// Espera 1000 milissegundos (um segundo)


// Atribui nvel lgico baixo ao pino do

delay(1000);

// Espera 1000 milissegundos (um segundo)

i++;

// Incrementa o nmero de "piscadas"

if(i == 3) {
delay(5000);

// Espera 5 segundos para piscar o LED de

novo
i = 0;
"piscadas"

// Reinicia o contador de nmero de

}
}

Aqui a lgica um pouco diferente: ns vamos manter a funo loop() piscando o


LED como no programa original, porm vamos inserir uma espera adicional de 5
segundos aps cada 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 re-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 para indicar que o LED no acendeu nenhuma vez
ainda. A funo loop() ento comea a ser executada, 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


terceira vez. Para isso, usamos a expresso i == 3 na condio do f. Se essa
expresso for verdadeira, isso que dizer que o LED j acendeu 3 vezes, ento
inserimos uma pausa adicional de 5 segundos com a chamada delay(5000) e
reiniciamos a contagem do nmero de "piscadas" novamente com o seguinte
comando:
i = 0;
"piscadas"

// Reinicia o contador de nmero de

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 comando if. Else em ingls significa "caso contrrio", e ele faz
exatamente o que o nome 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 dessa vez fazer o LED acender e apagar quatro vezes antes de dar uma
pausa de cinco segundos. Depois vamos fazer com que na terceira de cada uma
dessas quatro "piscadas", o LED acenda por um perodo mais curto. Dentro da
funo loop(), teremos o seguinte:
// 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); // Atribui nvel lgico alto ao pino do
LED, acendendo-o

delay(200);
segundo)

// Espera 200 milissegundos (um

digitalWrite(led, LOW);
do LED, apagando-o

// Atribui nvel lgico baixo ao pino

delay(1800);
segundo)

// Espera 1800 milissegundos (um

} else {
digitalWrite(led, HIGH); // Atribui nvel lgico alto ao pino do
LED, acendendo-o
delay(1000);
segundo)

// Espera 1000 milissegundos (um

digitalWrite(led, LOW);
do LED, apagando-o

// Atribui nvel lgico baixo ao pino

delay(1000);
segundo)

// Espera 1000 milissegundos (um

}
}

delay(5000);
novo

// Espera 5 segundos para piscar o LED de

Aqui o que fazemos , toda vez que vamos acender o LED, verificar se a terceira
vez que isso acontece, por meio do comando if com a condio i == 2. Se essa
expresso for 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 para um valor menor, de 0,2 segundo (uma reduo de 0,8
segundo) e o tempo que ele fica 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 else: se a condio do iffor verdadeira, o bloco de comandos
entre { e } logo aps o if executado, caso contrrio, o bloco entre {e } aps
o else executado. Isso quer dizer que para a primeira, segunda e quarta
"piscadas" ser usado o tempo padro de um segundo.

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 algum outro circuito conectado ao seu Arduino, um
recurso muito importante so as bibliotecas.
Uma biblioteca basicamente composta de cdigo fonte adicional que voc
adiciona ao seu 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 inicializlo. O que fazemos nesse caso criar um objeto para acessar o LCD
(tecnicamente isso se chama instanciar um objeto). Vejamos como isso feito:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Quando fazemos isso, lcd se torna um objeto da classe LiquidCrystal. Isso o


equivalente a criar uma variveldo tipo LiquidCrystal. Os parmetros que so
passados entre parnteses servem para inicializar a configurao desse objeto, e
nesse caso correspondem 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 fazer a configurao inicial do dispositivo que est sendo controlado. Para
chamar a funo 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 ao 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. Para saber todos os mtodos fornecidos por uma
determinada biblioteca, preciso consultar a documentao fornecida com ela.
Este o processo bsico de utilizao de bibliotecas no Arduino. Para mais
informaes, leia a documentao fornecida com a biblioteca que voc est
usando.

Classes, objetos e mtodos so conceitos de programao orientada a objetos.


No vamos explicar 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 de software. Segue ento uma lista para outros artigos e
tutoriais interessantes para que voc possa aprender conceitos mais avanados e
expandir as suas possibilidades:

Programao em C
o

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++


o

C++ como uma linguagem de programao orientada a


objetos (Unicamp)
Entendendo C++ - verso original em ingls aqui

Escrevendo bibliotecas para o Arduino (em ingls)