Você está na página 1de 48

1.

INTRODUO
O objetivo deste manual apresentar, de uma forma simples e rpida, o bsico
de programao, sendo assim iremos focar apenas nos conceitos que so
importantes para Arduino e sistemas embarcados em geral.
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 seqncia 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.

www.meccomeletronica.com

Pgina 1

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 seqncia de comandos,
normalmente escritos em um arquivo de texto.
VARIVEL
Uma varivel um recurso utilizado 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 carter ou uma seqncia 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.

www.meccomeletronica.com

Pgina 2

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 Arduino que usam processador ATmega, os tipos mais comuns de
dados que utilizamos so:

boolean: valor verdadeiro (true) ou falso (false)

char: um caracter

byte: um byte, ou seqncia 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: seqncia de caracteres

void: tipo vazio (no tem tipo)

ATRIBUIO
Atribuir um valor a uma varivel significa armazenar o valor nela para usar
posteriormente. O comando de atribuio em C++ o =. Para atribuirmos 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.

www.meccomeletronica.com

Pgina 3

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

www.meccomeletronica.com

Pgina 4

Ao longo do desenvolvimento dos seus projetos, aos poucos voc se


familiarizar com todos esses operadores.
FUNO
Uma funo , em linhas gerais, uma seqncia 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.

www.meccomeletronica.com

Pgina 5

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 x 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.

www.meccomeletronica.com

Pgina 6

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


caracteres */. Todo o texto entre o incio e o trmino se torna um comentrio,
podendo ser composto 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 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
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
}
www.meccomeletronica.com

Pgina 7

/*
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 seqncia para fazer o LED acender e
apagar
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)

// Aps terminar a funo loop(), ela executada novamente repetidas vezes,


// e assim o LED continua piscando.
}

www.meccomeletronica.com

Pgina 8

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 owhile 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);

// Espera 1000 milissegundos (um segundo)

digitalWrite(led, LOW);
apagando-o
delay(1000);
i = i + 1;

// Atribui nvel lgico baixo ao pino do LED,

// Espera 1000 milissegundos (um segundo)


// Aumenta o nmero de vezes que o LED piscou

}
www.meccomeletronica.com

Pgina 9

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 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 i < 3 dentro dos parnteses.
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;

// 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 seqncia 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.

Executamos os comandos para acender e apagar o LED.

2.
vez.

Somamos 1 varivel i, tornando-a 1: sabemos que o LED piscou uma

3.
Voltamos ao incio do while e comparamos se i < 3: como 1 menor do
que 3, executamos os comandos entre { e } novamente:
1.

Executamos os comandos para acender e apagar o LED.

2.
Somamos 1 varivel i, tornando-a 2: sabemos que o LED piscou duas
vezes.
4.
Voltamos ao incio do while e comparamos se i < 3: como 2 menor do
que 3, executamos os comandos entre { e } novamente:
1.

Executamos os comandos para acender e apagar o LED.

www.meccomeletronica.com

Pgina 10

2.
Somamos 1 varivel i, tornando-a 3: sabemos que o LED piscou trs
vezes.
5.
Voltamos ao incio do while e comparamos se i < 3: como 3 no menor
do que3, no executamos mais os comandos entre { e } e prosseguimos
prxima instruo.
6.

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);

// Espera 1000 milissegundos (um segundo)

digitalWrite(led, LOW);
apagando-o
delay(1000);

// Atribui nvel lgico baixo ao pino do LED,

// Espera 1000 milissegundos (um segundo)

}
delay(5000);

// Espera 5 segundos para piscar o LED de novo

www.meccomeletronica.com

Pgina 11

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) {

...
}
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 executlos. 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, 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)

www.meccomeletronica.com

Pgina 12

i++;

// Incrementa o nmero de "piscadas"

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

// 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 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 entre 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 0para 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;

// Reinicia o contador de nmero de "piscadas"

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


novamente.

www.meccomeletronica.com

Pgina 13

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);

// Espera 200 milissegundos (um segundo)

digitalWrite(led, LOW);
apagando-o
delay(1800);

// Atribui nvel lgico baixo ao pino do LED,

// Espera 1800 milissegundos (um segundo)

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

// Espera 1000 milissegundos (um segundo)

www.meccomeletronica.com

Pgina 14

digitalWrite(led, LOW);
apagando-o
delay(1000);

// Atribui nvel lgico baixo ao pino do LED,

// Espera 1000 milissegundos (um segundo)

}
}

delay(5000);

// Espera 5 segundos para piscar o LED de novo

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
inicializ-lo. 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 varivel do tipo LiquidCrystal. Os parmetros que so
passados entre parnteses servem para inicializar a configurao esse 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 funobegin() do objeto lcd que criamos, fazemos o
seguinte:
www.meccomeletronica.com

Pgina 15

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 mtodoprint() do objeto lcd, sempre que precisarmos ao longo do programa:
lcd.print("Oi!");
O mtodo print() apenas um dos vrios mtodos disponveis na
blbliotecaLiquidCrystal. 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.

www.meccomeletronica.com

Pgina 16

O QUE O ARDUINO?
Arduino uma plataforma de prototipagem eletrnica criado com o objetivo de
permitir o desenvolvimento de controle de sistemas interativos, de baixo custo
e acessvel a todos. Alm disso, todo material (software, bibliotecas, hardware)
open-source, ou seja,
eja, pode ser reproduzido e usado por todos sem a
necessidade de pagamento de direitos autorais. Sua plataforma composta
essencialmente de duas partes: O Hardware e o Software.

www.meccomeletronica.com

Pgina 17

2. O Hardware

Arquitetura do Arduino

www.meccomeletronica.com

Pgina 18

O hardware do Arduino muito simples, porm muito eficiente. Vamos analisar


a partir deste momento, o hardware do Arduino UNO. Esse hardware
composto dos seguintes blocos:

Pinos digitais
0 ou 1, low ou high

Pinos analgicos
(0,1,2,3.....1021,1022,1023)

www.meccomeletronica.com

Pgina 19

2.1 Fonte de Alimentao


Responsvel por receber a energia de alimentao externa, que pode ter uma
tenso de no mnimo 7 Volts e no mximo 35 Volts e uma corrente mnima de
300mA. A fonte filtra e depois regula a tenso de entrada para duas sadas: 5
Volts e 3,3 Volts. O requisito deste bloco entregar as tenses de 5 e 3,3 Volts
para que a CPU e os demais circuitos funcionem.
2.2 Ncleo CPU:
O ncleo de processamento de uma placa Arduino um micro controlador,
uma CPU, um computador completo, com memria RAM, memria de
programa (ROM), uma unidade de processamento de aritmtica e os
dispositivos de entrada e sada. Tudo em um chip s. E esse chip que possui
todo hardware para obter dados externos, processar esses dados e devolver
para o mundo externo.
Os desenvolvedores do Arduino optaram em usar a linha de micro
controladores da empresa ATMEL. A linha utilizada a ATMega. Existem
placas Arduino oficiais com diversos modelos desta linha, mas os mais comuns
so as placas com os chips ATMega8, ATMega162 e ATMega328p. Esses
modelos diferem na quantidade de memria de programa (ROM) e na
configurao dos mdulos de entrada e sada disponveis.
2.3 Entradas e Sadas
Comentamos acima que basicamente toda eletrnica ativa est dentro do chip
micro controlador. Para entender o que seria essa eletrnica, vamos considerar
o chip mais simples usado no Arduino: o ATMega8.

Micro controlador ATMega8

O chip acima possui 28 pinos de conexes eltricas, 14 de cada lado.


atravs desses pinos que podemos acessar as funes do micro controlador,
enviar dados para dentro de sua memria e acionar dispositivos externos.

www.meccomeletronica.com

Pgina 20

No Arduino, os 28 pinos deste micro controlador so divididos da seguinte


maneira:
14 pinos digitais de entrada ou sada (programveis)
6 pinos de entrada analgica ou entrada/sada digital (programveis)
5 pinos de alimentao (gnd, 5V, ref analgica)
1 pino de reset
2 pinos para conectar o cristal oscilador
Os dois primeiros itens da lista so os pinos teis, disponveis para o usurio
utilizar. Atravs destes pinos que o Arduino acoplado eletrnica externa.
Entre os 14 pinos de entrada/sada digitais temos 2 pinos que correspondem
ao mdulo de comunicao serial USART. Esse mdulo permite comunicao
entre um computador (por exemplo) e o chip.
Todos os pinos digitais e os analgicos possuem mais de uma funo. Os
pinos podem ser de entrada ou de sada, alguns podem servir para leituras
analgicas e tambm como entrada digital. As funes so escolhidas pelo
programador, quando escreve um programa para a sua placa.
Na placa do Arduino, os pinos teis do micro controlador so expostos ao
usurio atravs de conectores fmea (com furinhos) onde podem ser
encaixados conectores para construir o circuito externo placa do Arduino.
2.3.1 Entradas Digitais
No total temos disponveis 20 pinos que podem ser utilizados como entradas
digitais. Os 14 pinos digitais mais os 6 pinos analgicos, podem ser
programados para serem entradas digitais. Quando um pino programado
para funcionar como entrada digital, atravs do programa que escrevemos
colocamos um comando que ao ser executado efetua a "leitura" da tenso
aplicada ao pino que est sendo lido. Ento, aps a execuo deste comando,
sabemos se o pino encontra-se em um estado "alto" ou "baixo".
Na prtica, o programa pode saber se um pino est alimentado com 0 (zero) ou
5 Volts. Essa funo utilizada geralmente para identificar se um boto est
pressionado, ou um sensor est "sentindo" alguma coisa no mundo externo.
Note que a funo de entrada digital apenas entrega 0 ou 1, sem tenso ou
com tenso. No possvel saber quanta tenso est sendo aplicada no pino.
Para isso usamos as entradas analgicas.

www.meccomeletronica.com

Pgina 21

2.3.2 Entradas Analgicas


Temos disponveis no Arduino Uno 6 entradas analgicas. Ao contrrio de uma
entrada digital, que nos informa apenas se existe ou no uma tenso aplicada
em seu pino, a entrada analgica capaz de medir a tenso aplicada. Atravs
da entrada analgica, conseguimos utilizar sensores que convertem alguma
grandeza fsica em um valor de tenso que depois lido pela entrada
analgica.

2.3.3 Sadas Digitais


Com uma sada digital podemos fazer com que um pino libere 0 volts ou 5
volts. Com um pino programado como sada digital, podemos acender um led,
ligar um rel, acionar um motor, dentre diversas outras coisas. Podemos
programar o Arduino para no mximo 20 sadas digitais, porm podemos
utilizar um ou mais pinos para controlar um bloco de pinos.
2.4 Pinos com funes especiais
Existem pinos do Arduino que possuem caractersticas especiais, que podem
ser usadas efetuando as configuraes adequadas atravs da programao.
So eles:
PWM: Tratado como sada analgica, na verdade uma sada digital que gera
um sinal alternado (0 e 1) onde o tempo que o pino fica em nvel 1 (ligado)
controlado. usado para controlar velocidade de motores, ou gerar tenses
com valores controlados pelo programa. Pinos 3, 5, 6, 9, 10 e 11.
Porta Serial USART: Podemos usar um pino para transmitir e um pino para
receber dados no formato serial assncrono (USART). Podemos conectar um
mdulo de transmisso de dados via bluetooth por exemplo e nos
comunicarmos com o Arduino remotamente. Pinos 0 (rx recebe dados) e pino 1
(tx envia dados).
Comparador analgico: Podemos usar dois pinos para comparar duas tenses
externas, sem precisar fazer um programa que leia essas tenses e as
compare. Essa uma forma muito rpida de comparar tenses e feita pelo
hardware sem envolver programao. Pinos 6 e 7.
Interrupo Externa: Podemos programar um pino para avisar o software sobre
alguma mudana em seu estado. Podemos ligar um boto a esse pino, por
exemplo, e cada vez que algum pressiona esse boto o programa rodando
dentro da placa desviado para um bloco que voc escolheu. Usado para
detectar eventos externos placa. Pinos 2 e 3.

www.meccomeletronica.com

Pgina 22

Porta SPI: um padro de comunicao serial Sncrono, bem mais rpido que
a USART. nessa porta que conectamos cartes de memria (SD) e muitas
outras coisas. Pinos 10 (SS), 11 (MOSI), 12 (MISO) e 13 (SCK).
2.5 Firmware
simplesmente um software que carregado dentro da memria do micro
controlador. Tecnicamente o firmware a combinao de uma memria ROM,
somente para leitura, e um programa que fica gravado neste tipo de memria.
E esse o caso do micro controlador que a placa Arduino usa.

3. O Software
Quando tratamos de software na plataforma do Arduino, podemos referir-nos:
ao ambiente de desenvolvimento integrado do Arduino e ao software
desenvolvido por ns para enviar para a nossa placa. O ambiente de
desenvolvimento do Arduino um compilador gcc (C e C++) que usa uma
interface grfica construda em Java.
Basicamente se resume a um programa IDE muito simples de se utilizar e de
estender com bibliotecas que podem ser facilmente encontradas. As funes
da IDE do Arduino so basicamente duas: Permitir o desenvolvimento de um
software e envi-lo placa para que possa ser executado.
Para realizar o download do software basta ir at a pgina oficial do Arduino
(http://www.arduino.cc/), escolher o seu SO (existe pra Linux, Mac e Windows)
e baixa-lo. Obviamente, por ser open source, gratuito. Depois de baixado no
necessita de nenhuma instalao, s abrir o IDE e comear a utilizar.

www.meccomeletronica.com

Pgina 23

Para comear a utilizar, devemos escolher qual placa estamos utilizando,


assim vamos em Tools > Board e escolhemos. O IDE possui tambm uma
quantidade imensa de exemplos. Para utiliz-los basta ir a File > Examples e
escolher qual deles voc quer testar, de acordo com sua necessidade.
3.1 Estrutura do programa
Aproveitando os exemplos que o IDE fornece, nosso primeiro programa vai ser
acender um led.

www.meccomeletronica.com

Pgina 24

O programa para o Arduino dividido em duas partes principais: Setup e Loop,


como indicam as setas na imagem.
A funo setup serve para inicializao da placa e do programa. Esta
sesso executada uma vez quando a placa ligada ou resetada
atravs do boto. Aqui, informamos para o hardware da placa o que
vamos utilizar dele. No exemplo, vamos informar para a placa que o pino
13 ser uma sada digital onde est conectado um LED (no Arduino
UNO o pino 13 possui um led integrado).
A funo loop como se fosse a main () da placa. O programa escrito
dentro da funo loop executado indefinidamente, ou seja, ao terminar
a execuo da ltima linha desta funo, o programa inicia novamente a
partir da primeira linha da funo loop e continua a executar at que a
placa seja desligada ou o boto de reset seja pressionado.
Analisando o resto do programa, o comando digitalWrite escreve na sada do
pino 13 o nvel de tenso HIGH (5v), acendendo o Led. O comando delay
apenas para o programa aguardar 1000 milsimos. Em seguida, o nvel de
tenso alterado para LOW (0v) e o Led apaga. E assim repetido
infinitamente, at ser desligado.
Com o programa feito, compilamos o mesmo para verificarmos se no existe
nem um erro. Caso no contenha erro, agora temos que envi-lo para placa
atravs do boto de upload (os botes esto especificados na figura 4). Aps o
envio os Leds RX e TX devero piscar, informando que o cdigo est sendo
carregado. Logo aps o Arduino comear a executar o programa que lhe foi
enviado.

www.meccomeletronica.com

Pgina 25

3.2 Serial Monitor


Esse monitor usado para que possamos comunicar nossa placa com o
computador, mas tambm muito til para a depurao do programa.
Basicamente conectamos a placa no computador e atravs desta tela podemos
ver as informaes enviadas pela placa.

www.meccomeletronica.com

Pgina 26

No exemplo, o comando Serial.begin(9600) inicializa a comunicao com uma


taxa de 9600 baunds (taxa de bits). O comando Serial.println (argumento)
envia a mensagem para o computador.
Aps compilar e enviar o programa para placa, abrimos o serial monitor. As
informaes enviadas pela nossa placa Arduino aparecem no console.

www.meccomeletronica.com

Pgina 27

3.3 Outros comandos


Como j foi informado, e vocs j devem ter observado, a linguagem base para
a programar um Arduino C. Logo, suas estruturas de controle (if, else, while,
for...), seus elementos de sintaxe ( #define, #include, {}...), operadores
aritmticos (+, -, *, ^ ...), operadores de comparao (==, !=, <, > ...), enfim,
todos so utilizados aqui no IDE. Portanto, saber C primordial para programar
o Arduino em alto nvel.
Abaixo segue as principais funes para controlar o arduno (algumas j foram
especificados acima):
pinMode (pin, mode): Configura o pino especificado para que se comporte
como entrada ou sada, sendo Pin = nmero do pino e mode = INPUT ou
OUTPUT
digitalWrite (pin,value): escreve um valor HIGH ou LOW em um pino digital.
Se o pino foi configurado como sada sua voltagem ser determinada ao valor
correspondente: 5V para HIGH e 0V para LOW. Se o pino estiver configurado
como entrada escrever um HIGH levantar o resistor interno de 20k. Escrever
um LOW rebaixar o resistor. Obviamente pin = numero do pino e valor = HIGH
ou LOW.
int digitalRead (pin): L o valor de um pino digital especificado, HIGH ou
LOW. Pin = numero do pino. Retorna HIGH ou LOW.
Int analogRead (pin): L o valor de um pino analgico especificado. Pode
mapear voltagens entre 0 a 5v, sendo 4,9mV por unidade.
analogWrite (pin, value): Escreve um valor analgico (onda PWM,
explicaremos mais abaixo). Pode ser utilizada para acender um LED variando o
brilho ou girar um motor a velocidade varivel. Aps realizar essa funo o pino
vai gerar uma onda quadrada estvel com ciclo de rendimento especificado at
que o prximo analogWrite() seja realizado (ou que seja realizado um
digitalRead() ou digitalWrite() no mesmo pino).

www.meccomeletronica.com

Pgina 28

4. UTILIZANDO UM PROTOBOARD

At aqui j acendemos um Led interno do arduno, utilizando o Led j incluso


do pino 13. Agora vamos acender outro Led, agora utilizando o protoboard.
Primeiro devemos saber qual a tenso necessria para acender o Led. Para
isso utilizamos a tabela abaixo, sendo que cada cor tem a sua tenso
especfica Vermelho Laranja Amarelo Verde Azul Branco

Sabemos que a porta digital escreve HIGH (5v) ou LOW (0v). Logo, se
colocarmos 5v o Led ir queimar. Portanto devemos colocar um resistor em
srie com o Led para limitarmos a corrente que passa por ele. Essa corrente
deve ser de algo em torno de 20mA. Assim, utilizando um pouquinho de teoria
de circuitos temos:

Assim teremos a tenso do Led mais a tenso do resistor igual a 5v (tenso da


fonte), e nosso Led estar seguro contra sobre corrente. Nem sempre vamos
conseguir encontrar um resistor igual ao valor calculado, pois ele pode ser um
valor no comercial. Quando isso ocorrer, basta associar resistores ou utilizar
algum outro um pouco acima do valor encontrado.
Outro ponto importante a polaridade do Led (ou de qualquer outro
componente). Observe que este possui uma perna maior que a outra. A maior
positivo e a menor negativo. Portanto na hora de ligar, no podemos
confundir caso contrrio isso tambm queimar o Led. Aqui o exemplo foi um
Led, mas poderia ser um sensor, um motor ou algum outro componente.
Portanto preciso ateno para no queimarmos nossos equipamentos.
Bom, calculado o valor do resistor, devemos escolher um pino (aqui vamos
manter o pino 13) para que seja ligado nosso circuito. Com auxlio de jumpers
ligue semelhante a figura abaixo:

www.meccomeletronica.com

Pgina 29

Ligado o circuito conforme a figura 8, podemos passar para o Arduino o cdigo


da figura 5 (o exemplo de como acender Led) que o nosso Led externo vai
acender assim como o interno.
Este exemplo de Led externo no tem a inteno de aprimorar a programao,
e sim chamar ateno para alguns detalhes citados acima que pode danificar
seus componentes. Perder um Led no um alarde, pois este bem barato,
porm, se no tomados os devidos cuidados, voc pode perder motores,
sensores, dentre outros componentes bem mais caros.

www.meccomeletronica.com

Pgina 30

5. Utilizando o PWM
PWM significa modulao por largura de pulso (Pulse Width modulation) e
basicamente uma tcnica para obtermos resultados analgicos em com meios
digitais. O controle digital usado para criar uma onda quadrada, um sinal
alternado entre ligado e desligado. Assim a tcnica consiste em manipularmos
a razo cclica de um sinal, o duty cycle afim de transportar informao ou
controlar a potncia de algum outro circuito. Com isso, teremos um sinal digital
que oscila entre 0v e 5v com determinada freqncia (o Arduino trabalha com
um padro prximo a 500Hz). O duty cycle a razo do tempo em que o sinal
permanece em 5v sobre o tempo total de oscilao, como est ilustrado na
figura abaixo:

Portanto, o que controlamos atravs do software justamente o duty cycle, ou


seja, o percentual de tempo em que o sinal fica em 5v. Dessa forma, podemos
utilizar essa tcnica para limitar a potncia de algum circuito, como por
exemplo, controlar um servo motor.
Para exemplificar, vamos controlar a luminosidade de um Led. Mas antes,
relembrando o que j foi dito acima, os pinos que possuem PWM so os pinos
2, 5, 6, 9, 10 e 11 (no Arduino UNO). Faa as ligaes necessrias
(semelhante como j foi explicando anteriormente) e execute o exemplo
abaixo.

www.meccomeletronica.com

Pgina 31

A funo analogWrite (), apesar de estarmos utilizando uma porta digital, a


responsvel pelo PWM e recebe como parmetro o pino e um valor entre 0
255, em que o 0 corresponde a 0% e 255 corresponde a 100% do duty cycle.
Quando rodarmos o cdigo, podemos observar que o LED acender de
maneira mais suave. Cada etapa de luminosidade diferente corresponde a uma
iterao do for. Agora, tente modificar o cdigo para que o LED tambm
apague suavemente.

www.meccomeletronica.com

Pgina 32

6. SHIELDS
O Arduino possui o que chamamos de Shields, que so nada mais, nada
menos do que outras plaquinhas que se acoplam placa original, agregando
diversas outras funcionalidades.
Existe diversos Shields, com diversas
funes. Alguns servem como entrada, como sada e outros como entradas e
sada. Com eles conseguimos, por exemplo, fazer com que o Arduino se
comunique numa rede Ethernet ou via USB com um celular Android.
Funcionalidades de alto nvel
Encaixados em cima do Arduino
Utilizam alguns pinos encaminham os outros

Alguns Shields possuem circuitos integrados prontos para controlarmos


motores sem que precisemos nos preocupar com complicaes eletrnicas
envolvidas.

www.meccomeletronica.com

Pgina 33

7. CONTROLANDO UM ULTRASSOM
O Arduino possui muitos sensores. Aqui vamos aprender a controlar o
Ultrassom. Primeiramente vamos entender como o ultrassom funciona. Este
sensor emite um sinal na faixa de freqncia do ultrassom (por volta de 30kHz).
Este sinal se propaga pelo ar at encontrar
encontrar um obstculo. Ao colidir com o
obstculo uma parte do sinal refletida e captada pelo sensor. Portanto, um
nico sensor de ultrassom, possui um receptor e um emissor.

www.meccomeletronica.com

Pgina 34

Como temos um receptor e um emissor, precisaremos de dois pinos um para


cada (existe ultrassons que possuem um pino para os dois, porm os mais
comuns utilizam dois). Portanto declaramos dois pinos, um como sada (que
emite o sinal) e outro como entrada (que recebe o sinal). O pino que envia o
pulso chamado de trigger e o que recebe echo. Observe o cdigo abaixo
(bastante comentado):

Observe que comeamos com o trigger desligado, e logo aps 2


microssegundos o trigger emite o sinal. Aps 10 microssegundos o trigger volta
a ser desligado. Na varivel duration fica armazenando o tempo entre a
emisso do sinal at o echo entrar em HIGH. Assim, a distncia calculada
utilizando a formula de velocidade V = S/t. Como o tempo de ida e volta,
devemos dividir o mesmo por 2. A velocidade do som no ar de
aproximadamente 340 m/s. Aps algumas converses de unidades temos que
www.meccomeletronica.com

Pgina 35

para que o resultado saia em centmetros, temos que dividir o tempo (duration)
por 29. Por fim o resultado impresso no serial monitor.
Para ligarmos o sensor precisaremos de auxlio de um protoboard. Observe
que no sensor vem especificado, trigger, echo, vcc e gnd. Agora s ligar cada
pino em seu correspondente e testar o seu programa.

www.meccomeletronica.com

Pgina 36

8. Utilizando a interrupo
Uma interrupo de entrada e sada (IO) uma funo que executada
quando existe uma mudana estado no pino correspondente, independente do
ponto em que se encontra a execuo do programa. O Arduino UNO possui
dois pinos que podem ser ligados como interrupo, os pinos 2 e 3 (no Arduino
mega temos 6 interrupes).
A funo attachInterrupt (interrupcao,funcao,modo) permite configurar uma
funo para ser executada caso haja uma mudana no pino de IO
correspondente. Os parmetros da funo so utilizados da seguinte forma:
1 - Interrupo: um inteiro que informa o nmero da interrupo, sabendo que
a interrupo 0 est associada ao pino 2 e a interrupo 1 est associada ao
pino 3.
2 - Funo: a funo a ser chamada caso ocorra a interrupo. Essa funo
no deve ter parmetros e nem retornar nada. conhecida como rotina de
servio de interrupo.
3 - Modo: Define quando a interrupo deve ser acionada. Quatro constantes
so pr-definidas como valores vlidos: LOW para acionar a interrupo
sempre que o pino for baixo, CHANGE para chamar uma interrupo sempre
que o pino sofrer alguma alterao de valor, RISING para acionar quando o
pino vai LOW para HIGH e por fim FALLING para acionar quando o pino vai de
HIGH para LOW.
Segue o exemplo abaixo em que um Led acendido ou apagado quando
ocorre alguma alterao no pino 13:

www.meccomeletronica.com

Pgina 37

9. Adicionando uma biblioteca


Possivelmente algum dia voc ir precisar adicionar uma biblioteca para
trabalhar com seu com algum sensor ou outro componente no seu Arduino.
Existem diversas bibliotecas disponveis na internet, que voc pode baixar e
utiliz-las. Entretanto voc tem que adicion-las ao seu IDE para que o mesmo
reconhea os comandos dela que voc est utilizando.
Para mostrar como proceder, vamos adicionar a biblioteca MsTimer2.h como
exemplo.
Primeiro
vamos
baix-la
na
pgina
do
Arduino
(http://arduino.cc/playground/Main/MsTimer2).
Feito isso, descompacte o arquivo.zip que foi baixado. Agora v at a pasta
onde voc instalou o seu IDE para o Arduino e procure pela pasta libraries.
Dentro deste diretrio copie a pasta que foi extrada anteriormente. Por fim,
vamos verificar se a biblioteca foi mesmo detectada pelo IDE. V em Files >
Examples e verifique se a biblioteca que acabamos de adicionar est ali.
Se sim, a instalao ocorreu tudo bem e voc j pode comear a utilizar a sua
nova biblioteca. Agora s cham-la no seu cdigo, que neste caso ficaria:
#include <MsTimer2.h>. Vale a pena destacar que na prpria pgina onde voc
baixou a biblioteca, possui as instrues de como utilizar a mesma.

www.meccomeletronica.com

Pgina 38

10. Explorando um servomotor


O servomotor um dispositivo eletromecnico que, a partir de um sinal eltrico
em sua entrada, pode ter seu eixo posicionado em uma determinada posio
angular. Ou seja, eles no foram feitos para girar livremente, e sim para ir para
uma posio escolhida de acordo com um limite, que geralmente 180 graus.
Por serem pequenos, compactos, alm de permitir um posicionamento preciso
de seu eixo, os ser servomotores so largamente utilizado em robtica e
modelismo. O IDE do Arduino j possui uma biblioteca de fbrica para
controlarmos o servomotor, que a Servo.h.

Como podem observar na figura acima, o servomotor possui 3 fios: 2 para


alimentao (vcc e gnd) e um para controlar sua posio. Este controle da
posio feito atravs do PWM.
A conexo do servo no Arduino simples. O fio escuro (geralmente preto ou
marrom) o gnd e obviamente deve ser ligado no pino gnd. O vermelho o vcc
e deve ser ligado no pino de 5v. E por fim o fio amarelo ou laranja o fio de
controle e deve ser ligado em algum pino que possua PWM.

Com as ligaes devidamente realizadas agora vamos controlar o nosso


servomotor utilizando a biblioteca j inclusa no Arduino. Antes de mais nada,
temos que import-la. Como em C, utilizamos o comando #include <Servo.h>.
Mas e agora, como se utiliza essa biblioteca ?

www.meccomeletronica.com

Pgina 39

1 - Para comear declaramos uma varivel do tipo Servo: Servo motor1; por
exemplo. No nosso caso de Arduino UNO podemos criar no mximo 8 servos.
2 - Temos que associar a varivel ao pino que ligamos anteriormente, e isso
feito da seguinte forma: motor1.attach(pino);
3 - Temos que escrever o ngulo para o qual o servo dever girar (entre 0 e
180): motor1.write(ngulo);
4 - Podemos tambm desejar saber o ngulo que o meu servo se encontra,
para isso: ang = motor1.read ();
5 - Podemos utilizar tambm as funes motor1.attached() para checar se o
servo est associado a algum pino e tambm a motor1.detach() para
desassociar o servo ao seu pino declarado do item 2 acima.

www.meccomeletronica.com

Pgina 40

www.meccomeletronica.com

Pgina 41

LOCALIZANDO O ARQUIVO .HEX


Abrir a IDE do Arduino, selecionar File, Preferncias.

www.meccomeletronica.com

Pgina 42

Marque a opo Compilation

www.meccomeletronica.com

Pgina 43

Selecione a opo Upload, o programa nesse momento ira conferir o cdigo,


estando tudo certo, far o processo de envio do arquivo .hex, neste caso como
no h uma placa conectado ele apontara um erro.

www.meccomeletronica.com

Pgina 44

Use a barra de rolagem e encontre na antepenltima linha o caminho da pasta


temporria com o nome completo e o seu arquivo .hex gerado.

www.meccomeletronica.com

Pgina 45

Abra o proteus, selecione o modelo de arduino. Sempre insira os pinos de fonte


na placa do arduino.

www.meccomeletronica.com

Pgina 46

PARA SELECIONAR O ARQUIVO .HEX


D um duplo clique no ATmega da placa arduino, aps isso aparecer a janela
Edit Component.
Verifique as configuraes de acordo com a imagem abaixo e no altere, a no
ser o caminho do arquivo .hex

Basta colar o caminho da encontrado na antepenltima linha do cdigo em


Program File, e pressionar a tecla OK.

www.meccomeletronica.com

Pgina 47