Escolar Documentos
Profissional Documentos
Cultura Documentos
ApostilaArduinoIntroducao PDF
ApostilaArduinoIntroducao PDF
APOSTILA ARDUINO
Com aplicaes baseada na placa:
ARDUINO UNO
www.fbseletronica.com.br
V0RV1
1
www.facebook.com/fbseletronica
Sumrio
1
Termos de uso.................................................................................................... 5
Objetivos ........................................................................................................... 6
Introduo ......................................................................................................... 6
6.2
6.2.1
7
Programao ..................................................................................................... 13
7.1
7.2
Funes ....................................................................................................... 13
7.3
Constantes................................................................................................... 15
7.3.1
7.3.2
7.3.3
7.4
Variveis ..................................................................................................... 16
7.5
Escopo de variveis....................................................................................... 16
7.6
7.6.1
static ..................................................................................................... 17
7.6.2
volatile................................................................................................... 17
7.6.3
const ..................................................................................................... 18
7.7
7.7.1
void ....................................................................................................... 19
7.7.2
Boolean ................................................................................................. 19
7.7.3
char ...................................................................................................... 20
7.7.4
2
www.facebook.com/fbseletronica
7.7.5
byte ...................................................................................................... 20
7.7.6
int ......................................................................................................... 20
7.7.7
7.7.8
word ...................................................................................................... 21
7.7.9
long ....................................................................................................... 21
7.7.10
7.7.11
short................................................................................................... 22
7.7.12
float.................................................................................................... 22
7.7.13
double ................................................................................................ 22
7.8
Vetores ....................................................................................................... 22
7.8.1
7.9
7.10
7.11
Operadores ............................................................................................... 24
7.11.1
Atribuio ............................................................................................ 25
7.11.2
Aritmticos .......................................................................................... 25
7.11.3
7.11.4
7.11.5
7.12
7.13
if .............................................................................................................. 30
7.14
switch....................................................................................................... 31
7.15
for ........................................................................................................... 32
7.16
while ........................................................................................................ 33
7.17
do - while ................................................................................................. 34
7.18
7.18.1
#define ............................................................................................... 34
7.18.2
#include .............................................................................................. 35
3
www.facebook.com/fbseletronica
7.19
7.19.1
7.19.2
7.19.3
7.19.4
7.19.5
Funes matemticas............................................................................ 44
7.19.6
Projetos ............................................................................................................ 50
8.1
8.2
8.3
8.4
8.5
REFERNCIAS ................................................................................................... 70
4
www.facebook.com/fbseletronica
2 TERMOS DE USO
Este material de domnio pblico podendo ser livremente distribudo.
proibida a venda deste material.
Pode ser usado livremente, s pedimos que seja citadas na referncias quando usada para
compor outros artigos.
E-mail do desenvolvedor: fbseletronica@hotmail.com
5
www.facebook.com/fbseletronica
3 OBJETIVOS
O objetivo desta apostila apresentar a plataforma ARDUINO. Ser baseada na
plataforma ARDUINO UNO onde sero abordados os conceitos bsicos de hardware e
software com exemplos prticos.
4 INTRODUO
A plataforma Arduino est presente em muitos artigos na internet, porm para quem est
iniciando na programao dessa plataforma geralmente sente dificuldade de um ter um
ponto de partida. A fonte de principal de pesquisa deve ser o site do prprio Arduino, l
esto as informaes bsicas para iniciar. Um fator que bloqueia os iniciantes o fato desse
site ser em ingls. Essa apostila usa como referncia principal o site do Arduino, e o
objetivo apresentar para os iniciantes um ponto de partida para essa plataforma.
abordado a teoria bsica da plataforma, assim como a linguagem de programao e so
apresentados no captulo final alguns exemplos para colocar em prtica.
Esperamos que essa apostila colabore com a comunidade que a cada dia que passa cresce
mais.
Bons estudos!!
Caso encontrem erros (tero muitos), por gentileza nos enviem um e-mail para correo.
e-mail: fbseletronica@hotmail.com
6
www.facebook.com/fbseletronica
5 O QUE ARDUINO?
ARDUINO uma plataforma flexvel open-source de hardware e software para
prototipagem eletrnica. destinada a designers, hobbistas, tcnicos, engenheiros e
pessoas interessadas em criar projetos ou ambientes interativos.
ARDUINO pode receber entradas de uma variedade de sensores e pode atuar o
ambiente ao seu redor por controladores de iluminao, motores e uma infinidade de
atuadores. O microcontrolador presente na placa programado usando a linguagem de
programao do ARDUINO (baseada em wiring) e o ambiente de desenvolvimento
ARDUINO (baseada em processing). Os projetos com ARDUINO podem ser STANDALONE ou comunicar com um software rodando no PC. Os kits de desenvolvimento
podem ser montados pelo prprio projetista ou podem ser compradas e o software pode
ser baixado gratuitamente no site do ARDUINO. Os projetos de hardware para
referncias esto disponveis em www.arduino.cc, sob licena open-source, onde est
livre para adaptao as suas necessidades.
7
www.facebook.com/fbseletronica
Conforme visto na imagem acima a placa Arduino UNO possui diversos conectores que
servem para interface com o mundo externo. A seguir e dada uma explicao de como cada
pino da placa pode ser utilizado.
8
www.facebook.com/fbseletronica
So pinos digitais que podem ser programados para ser utilizados como
sadas analgicas, utilizando modulao PWM.
A alimentao da placa pode ser feita a partir da porta USB do computador ou atravs
de um adaptador AC. Para o adaptador AC recomenda-se uma tenso de 9 volts com
pino redondo de 2,1 mm e centro positivo.
9
www.facebook.com/fbseletronica
10
OBS.: Caso o sistema operacional utilizado seja diferente do Windows, pode haver algumas
diferenas, mas o IDE basicamente o mesmo.
O IDE dividido em trs partes: A Toolbar no topo, o cdigo ou a Sketch Window no
centro, e a janela de mensagens na base, conforme exibido na figura abaixo:
10
www.facebook.com/fbseletronica
11
Verify
o Verifica se existe erro no cdigo digitado.
Upload
o Compila o cdigo e grava na placa Arduino se corretamente conectada;
New
o Cria um novo sketch em branco.
Open
11
www.facebook.com/fbseletronica
12
Save
o Salva o sketch ativo
Seria monitor
o Abre o monitor serial.
Os demais comandos presentes na barra de menus podem ser consultados atravs do help
do IDE.
12
www.facebook.com/fbseletronica
13
7 PROGRAMAO
7.1 Estrutura de um programa ARDUINO
A estrutura bsica de um programa para ARDUINO extremamente simples e dividida em
dois blocos de funes. Primeiro bloco de funo chamado de setup () e o segundo
chamado de loop (). A estrutura exibida a seguir:
void setup()
{
procedimentos;
}
void loop()
{
procedimentos;
}
A funo setup() responsvel pela configurao inicial do ARDUINO e a funo loop()
responsvel pela execuo das tarefas. Ambas as funes so requeridas para o correto
funcionamento do ARDUINO.
A funo setup segue logo abaixo da declarao de variveis no inicio do programa. Esta
a primeira funo a ser executada e usada para configurao dos pinos ou inicializao da
comunicao serial.
A funo loop vem em seguida e inclui os comandos que sero executados durante o
funcionamento do ARDUINO, por exemplo: leitura de entradas, acionamento de sadas, etc.
Essa a funo principal do ARDUINO onde executada a maior parte dos comandos.
7.2 Funes
Funo um bloco de cdigo que possui um nome e procedimentos que so
executados quando a mesma chamada. As funes setup() e loop() foram explicados
anteriormente e as demais funes do compilador sero apresentadas mais a frente neste
captulo.
Funes customizadas podem ser escritas para simplificar em tarefas repetitivas reduzindo
repeties na programao. Funes so declaradas primeiramente definindo o seu tipo,
que dir qual o tipo de dado retornado pela funo. Depois de definido o tipo de retorno
13
www.facebook.com/fbseletronica
14
deve dar um nome a funo e definir entre parntese se algum parmetro deve ser passado
para a funo, conforme exemplo de cdigo a seguir:
tipo NomedaFuno(parametros)
{
Comandos;
}
A seguinte funo do tipo inteiro chamada delayVal() usada para atribuir um valor no
programa atravs da leitura de um potencimetro. Dentro do bloco da funo
primeiramente declarado a varivel local do tipo inteira chamada v, depois atribudo o
valor lido do potencimetro pela funo analogRead(pot) que retorna um valor entre 0 e
1023, depois este valor divido por 4 para dar um resultado final entre 0 e 255.
Finalmente retornado este valor para o programa principal.
int delayVal()
{
int v;
v = analogRead(pot);
v /= 4;
return v;
}
Os seguintes smbolos so utilizados na construo de funes:
{ } as chaves so utilizadas para delimitar os blocos de funes, dentro das chaves se
encontram os procedimentos da funo:
tipo funo ()
{
procedimentos;
}
14
www.facebook.com/fbseletronica
15
/*........*/ - qualquer texto entre esses smbolos ignorado pelo compilador, usado
para comentar varias linhas.
/* comentrio de mltiplas
Linhas geralmente utilizado
Para documentao ou para
Ignorar uma sequncia de
Cdigos*/
7.3 Constantes
A linguagem Arduino possui algumas
programao. So divididas em grupos:
constantes
pr-definidas
que
auxiliam
na
false
true
15
www.facebook.com/fbseletronica
16
7.4 Variveis
Variveis so posies na memria de programa do ARDUINO marcadas com um nome e o
tipo de dado que iro ser armazenados nessa posio. Essa posio de memria pode
receber valores durante a execuo do programa e podem ser alterados a qualquer
momento pelo programa e deve ser respeitado o tipo de dado da varivel.
Ates de ser utilizada uma varivel ela deve ser declara com um tipo e nome, e
opcionalmente pode ser atribuir um valor a ela. E seguida apresentado um trecho de
cdigo onde declarada uma varivel do tipo inteira chamada entradaAnalog e atribudo
incialmente o valor zero e em seguida atribudo o valor da entrada analgica 2 a esta
varivel, vejamos:
Int entradaAnalog = 0;
entradaAnalog = analogRead(2);
OBS.: Os nomes dados as variveis podem descrever sua aplicao, para ficar mais fcil o
entendimento do cdigo durante o desenvolvimento ou em uma manuteno do mesmo no
futuro.
void setup()
{
}
void loop()
16
www.facebook.com/fbseletronica
17
{
for (int i=0; i<20;)
{
i++;
}
float f;
}
Exemplo:
static int valor;
7.6.2
volatile
um qualificador de varivel que usado antes do tipo de dado para modificar o modo pelo
qual o compilador e programa subsequente trata essa varivel.
Especificamente, ele orienta o compilador a carregar a varivel a partir da RAM e no a
partir de um registador de armazenamento, o que uma localizao de memria
temporria em que as variveis do programa so armazenadas e manipuladas. Sob certas
condies o valor de uma varivel armazenada em registros pode ser imprecisa.
Uma varivel deve ser declarada voltil sempre que o seu valor pode ser alterado por algo
alm do controle da seo de cdigo em que ela aparece como na carente thread
executada. No Arduino, o nico lugar que isto provvel de ocorrer em sees de cdigo
associado com interrupes, chamado de rotina de servio de interrupo.
Exemplo:
// Inverte estado do LED quando interrupo executada
int pin = 13;
volatile int state = LOW;
void setup()
{
17
www.facebook.com/fbseletronica
18
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
7.6.3
const
um qualificador que modifica o comportamento da varivel, tornando uma varivel "readonly". Isto significa que a varivel pode ser utilizada tal como qualquer outra varivel do
seu tipo, mas o seu valor no pode ser alterado. Voc receber um erro do compilador se
voc tentar atribuir um valor a uma varivel const.
Constantes definidas com a palavra-chave const obedecer as regras de escopo de variveis
que governam outras variveis.
Exemplo:
const float pi = 3.14;
float x;
// ....
x = pi * 2;
pi = 7;
Voc pode usar const ou #define para criar constates numricas ou constantes de textos.
Para vetores voc vai precisar usar const. Em geral prefervel a const a #define para
definir constantes.
18
www.facebook.com/fbseletronica
19
7.7.1
void
A palavra reservada void usada em declaraes de funes. Este tipo indica que a funo
no retorna nenhum valor quando executada.
Exemplo:
// as funes setup e loop no retornam valores quando so executadas
void setup()
{
// ...
}
void loop()
{
// ...
}
7.7.2
Boolean
// LED no pino 5
// chave no 13
//varivel booleana
void setup()
{
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH);
}
void loop()
{
if (digitalRead(switchPin) == LOW) //se pino em nvel baixo
{
// switch is pressed
// pullup keeps pin high
//normally
delay(100);
running = !running;
digitalWrite(LEDpin, running)
}
}
19
www.facebook.com/fbseletronica
20
7.7.3
char
7.7.4
unsigned char
unsigned char armazena valores de 1 byte no sinalizados, mesmo que utiliza o tipo byte.
A faixa de valores vai de 0 a 255.
Para programao consistente no estilo Arduino o tipo byte preferido para esse tipo de
dado.
Exemplo
unsigned char myChar = 240;
7.7.5 byte
Armazena valores de 8 bits no sinalizados de 0 a 255.
Exemplo
byte b = B10010;
// B10010 = 18 decimal
7.7.6 int
Inteiros so tipos primrios de armazenamento. No Arduino Uno ( e em outras placas
baseadas em ATMEGA) um int armazena valores de 16 bits(2 bytes). Esse tipo compreende
valores de -32768 a 32767. J no Arduino Due, um int armazena valores de 32 bits (4
bytes) que compreende valores de -2147483648 a 2,147483647.
Exemplo:
int ledPin = 13;
Quando o valor contido na varivel excede o seu valor mximo o seu valor reiniciado para
o mnimo. Exemplo
int x;
x = -32768;
x = x - 1;
20
www.facebook.com/fbseletronica
21
x = 32767;
x = x + 1;
7.7.8 word
O tipo armazena valores de 16 bis no sinalizados que compreendem valores de 0 a 65535.
Exemplo
word w = 10000;
7.7.9 long
O tipo de dado Long armazena valores inteiros sinalizados de 32 bits (4 bytes) que
compreendem a faixa de -2147483648 a 2147483647
Exemplo
long speedOfLight = 186000L;
7.7.10
unsigned long
21
www.facebook.com/fbseletronica
22
{
Serial.print("Time: ");
time = millis();
Serial.println(time);
delay(1000);
}
7.7.11
short
7.7.12
float
O tipo float armazena valor em ponto flutuante, ou seja, um valor que possui casas
decimais. O tipo float armazena valores de 32 bits (4 bytes) e compreendem a faixa de 3,4028235 E+38 a 3,4028235 E+38.4.
A matemtica em ponto flutuante requer muito processamento, por exemplo, se for feita
uma operao em ponto flutuante dentro de um loop, ocorrer um atraso maior, do que se
fosse feita uma operao com inteiros. Deve-se ficar atento ao uso do tipo float tanto na
questo de espao de memria quanto no processamento. As funes de manipulao do
tipo float requerem muito processamento,
Exemplos
float myfloat;
float sensorCalbrate = 1.117;
7.7.13
double
O tipo double tambm armazena valores de ponto flutuante, porm no Arduino Uno e
outras placas baseadas em ATMEGA esse tipo exatamente o mesmo que o tipo float, sem
ganho de preciso, j no Arduino Due o tipo double pussui 64 bits (8 bytes) provendo maior
preciso, seu valor mximo pode chegar a 1,7976931348623157 x 10308.
7.8 Vetores
Uma matriz uma coleo de variveis que so acessadas por meio de um ndice. Matrizes
em um programa em linguagem C, na qual o Arduino baseado, pode ser um pouco
22
www.facebook.com/fbseletronica
23
complicado. Mas utilizando uma matriz de linha simples, conhecida como vetores, pode
tornar a programao mais simples.
23
www.facebook.com/fbseletronica
24
Inicializar vetor com tamanho determinado e atribuir uma string para inicializar.
Importante observar que o tamanho deve ser suficiente para conter o caractere nulo:
char Str5[8] = "arduino";
Inicializar o vetor com tamanho extra e inicializar com uma string de quantidades de
caracteres menor que a quantidades de variveis no vetor:
char Str6[15] = "arduino";
7.11 Operadores
A linguagem C muito rica em operadores sendo possivelmente uma das linguagens com
maior numero de operadores disponveis. Possui operadores encontrados em linguagens de
alto nvel como operadores encontrados em linguagens de baixo nvel como o Assembly.
Os operadores so divididos nas seguintes categorias: Atribuio, aritmticos,
relacionais, lgicos, lgicos bit a bit.
24
www.facebook.com/fbseletronica
25
7.11.1
Atribuio
Verificando as linhas anteriores duas operaes de atribuio foram feitas. Primeiro foi
atribudo o valor 10 a varivel x, e na segunda foi atribudo o resultado da soma entre a
varivel x(que 10) com o valor 3, portanto ao final desta operao ser atribudo o valor
13 a varivel y. A atribuio sempre feita da direita para a esquerda.
7.11.2
Aritmticos
AO
Adio
Subtrao
Multiplicao
Diviso
Resto de diviso inteira
Incremento
Decremento
25
www.facebook.com/fbseletronica
26
7.11.3
Operadores Relacionais
AO
Maior que
Maior ou igual que
Menor que
Menor ou igual que
Igual a
Diferente de
7.11.4
Operadores Lgicos
AO
AND(E)
OR(OU)
NOT(NO)
26
www.facebook.com/fbseletronica
27
7.11.5
Os operadores Lgicos bit a bit so utilizados para operaes lgicas entre elementos
ou variveis. So os seguintes:
OPERADOR
&
|
^
~
>>
<<
AO
AND(E)
OR(OU)
XOR (OU EXCLUSIVO)
NOT (NO)
Deslocamento direita
Deslocamento esquerda
O operador & (AND) faz a operao booleana AND para cada bit dos operandos.
Exemplo:
int v1, v2;
v1 = 0x5A;
v2 = v1 & 0x0F;
= 0 1 0 1 1 0 1 0 binrio
AND(&)
0x0F Hexadecimal
Resultado
= 0 0 0 0 1 1 1 1 binrio
= 0 0 0 0 1 0 1 0 binrio = 0x0A hexadecimal
= 0 0 0 0 0 0 0 1 binrio
27
www.facebook.com/fbseletronica
28
OR(||)
0x04 Hexadecimal
= 1 1 1 1 0 0 0 0 binrio
= 0 1 0 1 0 0 0 0 binrio
XOR(^)
0x04 Hexadecimal
= 0 1 0 1 0 0 0 0 binrio
Resultado = 0 0 0 0 0 0 0 0
binrio = 0x00hexadecimal
x , y;
x = 0b00001111;
y = ~x;
O resultado desta operao ser:
y = 0b11110000;
O operador NOT muito utilizado para inverter estados de bit em variveis, registradores e
pinos de I/O.
Os operadores de deslocamento so utilizados para deslocar determinadas quantidades de
bits para direita ou esquerda. A forma geral para o uso destes operadores :
Valor >> quantidade de bits a ser deslocados para a direita;
28
www.facebook.com/fbseletronica
29
Forma
reduzida
x += y
x
x
x
x
x
x
x
-=
*=
/=
%=
&=
|=
^=
y
y
y
y
y
y
y
29
www.facebook.com/fbseletronica
30
x = x<< y
x = x>>y
x <<= y
x >>= y
7.13 if
O comando if utilizado para executar um comando ou bloco de comandos no caso de uma
determinada condio ser avaliada como verdadeira.
A forma geral do comando if :
if (condio)
comandoA;
Caso seja necessrio executar um comando se a condio for avaliada com Falsa usa
a clausula else junto com o comando if, o comando ficar da seguinte forma:
if (condio)
comandoA;
else
comandoB;
Deve-se ficar claro que a clausula else no necessria para o funcionamento do comando
if, funciona apena como uma opo para tomar uma ao se a condio testada for
avaliada como falsa. Desta forma a maneira mais simples de seu utilizar o comando if :
if(condio) comandoA;
H a possibilidade de aninhar diversos comandos if, um dentro do outro para executar uma
sequncia de testes, exemplo:
if(condio1) comandoA;
else if(condio2) comandoB;
30
www.facebook.com/fbseletronica
31
Neste caso a condio1 avaliada caso verdadeira ser avaliada a condio2. Caso
a condio1 seja avaliada como falsa ser avaliada a condio3.
7.14 switch
Em alguns caso, como na comparao de uma determinada varivel com diversos valores
diferentes o comando if pode torna-se extenso, confuso e pouco eficiente.
O comando switch permite a realizao de comparaes sucessivas de uma forma
elegante, clara e eficiente. O formato do comando switch :
switch(varivel)
{
case constante1:
31
www.facebook.com/fbseletronica
32
comandoA;
. . .
break;
case constante2:
comandoB;
. . .
break;
. . .
. . .
default:
comandoX;
}
O valor da varivel testado com os valores especificados pelas clausulas case. Caso a
varivel possua o mesmo valor de uma das constantes, os comandos seguintes quela
clausula case sero executados. Caso o valor da varivel no for igual a nenhum valor das
constantes especificadas ento os comandos aps clausula default sero executados.
Em cada sequncia de comandos da clausula case encerrado por uma clausula
break. Est clausula tem a funo de interromper o a estrutura switch de realizar outros
testes. Caso esta clausula seja omitida os comandos seguintes de outra clausula case sero
executados at ser encontrada uma clausula break ou chegar ao fim do switch. Portanto
deve-se ficar atento ao uso da clausula break para determinar o fim dos comandos de cada
clausula case.
Algumas caractersticas importantes do comando switch devem ser observadas:
7.15 for
O comando for uma das mais comuns estruturas de repetio utilizadas, sendo
bem poderosa na linguagem C em relao a outras linguagens de programao.
A forma geral do for :
for( inicializao;condio;incremento) comando;
ou
for( inicializao;condio;incremento)
{
Comando1;
Comando2;
. . .
32
www.facebook.com/fbseletronica
33
ComandoN;
}
Cada uma das trs sees do comando for possui uma funo distinta conforme em
seguida:
Inicializao: esta seo conter uma expresso valida utilizada normalmente pra
inicializar a varivel de controle do lao.
Condio: esta seo pode conter a condio a ser avaliada para deciso de continuidade
do lao de repetio. Enquanto a condio for avaliada como verdadeira o lao permanecer
em execuo.
Incremento: esta seo pode conter uma declarao para incremento da varivel de
controle do lao.
O funcionamento bsico do comando for o seguinte:
Primeiramente a seo de inicializao executada, em seguida a condio testada
e se for verdadeira o comando ou bloco de comandos so executados, aps o fim dos
comandos o lao executa a seo de incremento da varivel de controle.
possvel utilizar a clausula break para encerrar a execuo do lao for
independente de a condio de repetio ser avaliada, desta forma quando o comando
break for executado dentro de um lao de repetio for, este lao interrompido
imediatamente.
7.16 while
Outro tipo de estrutura de repetio da linguagem C comando while, que
utilizado para repetir um comando ou um conjunto de instrues enquanto uma condio
for avaliada como verdadeira. No comando while existe apenas o teste condicional,
diferentemente do comando for que possui ciclos definidos. A estrutura do comando while
a seguinte:
while(condio)
{
comando1;
comando2;
...
comandoN;
}
33
www.facebook.com/fbseletronica
34
novamente. Caso seja avaliada como verdadeira o lao repetido, quando avaliada como
falsa o lao interrompido.
Assim como no comando for possvel usar a clausula break para interromper
prematuramente um lao while.
7.17 do - while
O comando do-while utilizado para criar uma estrutura de repetio com funcionamento
ligeiramente diferente do while e for tradicionais.
De fato, a diferena entre a estrutura while e a estrutura do-while que esta ltima
realiza a avaliao da condio de teste no final de cada ciclo de iterao do lao de
repetio, ao contrrio do comando while, que realiza o teste no incio de cada ciclo.
A forma geral da estrutura do-while :
do
comando;
while (condio);
Ou
do
{
comandoA;
comandoB;
...
comandoN;
} while (condio);
#define
uma ferramenta que permite ao programador dar um nome a um valor constante antes
de de iniciar a programao. O compilador substituir esse a constante no lugar deste
nome na hora da compilao. Isto facilita na programao e deixa o cdigo mais agradvel.
A sintaxe mesma da linguagem C:
#define constantName valor
34
www.facebook.com/fbseletronica
35
Exemplo:
#define ledPin 3
7.18.2
#include
utilizado para incluir bibliotecas externas ao scketch. Dessa forma pode-se acessar um
grande nmero de bibliotecas seja ela do padro da linguagem C ou as feitas especialmente
para Arduino, ou at mesmo bibliotecas feitas pelo programador.
Exemplo:
#include <biblioteca.h >
35
www.facebook.com/fbseletronica
36
7.19.1
pinMode()
Configura um pino especifico para ser entrada ou sada digital.
Sintaxe:
pinMode(pino, modo)
Parametros:
Pino: deve-se colocar o numero correspondente ao pino que se deseja configurar, conforme
placa que est trabalhando.
Modo: deve-se
INPUT_PULLUP.
colocar
modo
que
deseja
configurar
pino.
INPUT,
OUTPUT,
Exemplo:
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH); //sets the LED on
delay(1000);
// waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000);
// waits for a second
}
digitalWrite()
Coloca um nvel lgico Alto (HIGH, 5V) ou baixo (LOW, 0V) em um pino configurado como
sada digital.
Sintaxe
digitalWrite(pino, valor)
Parmetros
36
www.facebook.com/fbseletronica
37
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
//
//
//
//
digitalRead()
L o valor presente e um pino digital. Este valor pode ser HIGH ou LOW.
Sintaxe:
digitalRead(pino)
Parmetros:
Pino: valor correspondente ao pino que se deseja ler.
Retorno
HIGH ou LOW.
Exemplo:
int ledPin = 13; // LED connected to digital pin 13
int inPin = 7;
int val = 0;
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT);
}
void loop()
{
val = digitalRead(inPin);
digitalWrite(ledPin, val);
}
37
www.facebook.com/fbseletronica
38
7.19.2
analogReference()
Configura a referencia de tenso para a converso analgica/digital.
Os tipos possveis de configuraes so:
Sintaxe:
analogReference(tipo)
Parametros:
TIPO: DEFAULT, INTERNAL1V1, INTERNAL2V56, EXTERNAL.
analogRead()
L o valor presente em um pino configurado como entrada analgica. Internamente o
Arduino possui um conversor A/D de 10 bits. Dessa forma o valor retornado por esta funo
estar na faixa de 0 a 1023 conforme o valor presente no pino.
Sintaxe:
analogRead(pino)
Parmetros:
Pino: valor do pino configurado como entrada analgica(0 a 5 na maioria da placas, 0 a 7
na MINI e NANO, 0 a 15 na MEGA).
Retorno
Int(0 a 1023)
38
www.facebook.com/fbseletronica
39
Exemplo:
int analogPin = 3;
pin 3
int val = 0;
void setup()
{
Serial.begin(9600);
}
//
void loop()
{
val = analogRead(analogPin);
Serial.println(val);
}
7.19.3
setup serial
Funes de temporizao
millis()
Retorna o numero de milissegundos desde que a placa comeou a executar o programa.
Este nmero retorna a zero aps aproximadamente 50 dias.
Sintaxe:
time = millis();
Parmetros:
Nenhum
Retorno:
unsigned long
Exemplo:
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(1000);
}
39
www.facebook.com/fbseletronica
40
micros()
Retorna o tempo em microssegundos que a placa est executando o programa. Este
numero retorna a zero em aproximadamente 70 minutos.
Sintaxe:
tempo = micros();
Parmetros:
Nenhum
Retorno:
unsigned long
Exemplo:
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = micros();
//prints time since program started
Serial.println(time);
// wait a second so as not to send massive amounts of data
delay(1000);
}
delay()
Pausa o programa por um tempo em milissegundos passado no parmetro.
Sintaxe:
delay(ms)
Parmetros:
ms: valor de milissegundos que se deseja esperar(unsigned long)
Retorno:
Nenhum
40
www.facebook.com/fbseletronica
41
Exemplo:
int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}
//
//
//
//
delayMicroseconds()
Pausa o programa pelo tempo em microssegundos passado no parmetro.
O valor mximo que produz um valor preciso 16383.
Sintaxe:
delayMicroseconds(us)
Parmetros:
us: valor em microssegundos que se deseja esperar(unsigned int)
Exemplo:
int outPin = 8;
// digital pin 8
void setup()
{
pinMode(outPin, OUTPUT);
}
void loop()
{
digitalWrite(outPin, HIGH);
delayMicroseconds(50);
digitalWrite(outPin, LOW);
delayMicroseconds(50);
}
//
//
//
//
41
www.facebook.com/fbseletronica
42
7.19.4
lowByte()
Retorna o byte menos significativos de uma varivel
Sintaxe
lowByte(x)
Parmetros
x: um valor de qualquer tipo
highByte()
Retorna o byte mais significativo de uma varivel.
S in t a x e
highByte(x)
Parmetros
bitRead()
L um bit de um numero
Sintaxe
bitRead(x, n)
Parmetros
x: varivel que deseja ser lido o bit
n: a posio do do bit na varivel.
Retorno
O valor do bit (0 ou 1).
bitWrite()
Escreve um bit em uma varivel.
Sintaxe:
42
www.facebook.com/fbseletronica
43
bitWrite(x, n, b)
Parmetros
x: varivel que deseja ser escrito o bit
n: posio do bit a ser escrito.
b: o valor do bit (0 or 1)
bitSet()
Coloca em 1 o bit de uma varivel.
Sintaxe:
bitSet(x, n)
Parmetros
x: a varivel que se deseja manipular
n: posio do bit que se deseja colocar em 1
bitClear()
Colocar em 0 o bit desejado.
Sintaxe
bitClear(x, n)
Parametros
x: a varivel que se deseja manipular
n: posio do bit que se deseja colocar em 0
bit()
Calcula o valor de um especifico bit.
Sintaxe:
bit(n)
Parmetros:
n: a posio do bit que deseja calcular o valor.
Retorno:
43
www.facebook.com/fbseletronica
44
O valor do bit.
7.19.5
Funes matemticas
min(x, y)
Retorna o menor dos dois nmeros.
Parmetros
x: o primeiro valor a ser comparado
y: o segundo valor a ser comparado
Retorno
O menor dos dois nmeros passados
Exemplo
sensVal = min(sensVal, 100); //verifica se sensval menor que se 100 se maior
//garante que no ultrapasse 100
max(x, y)
Descrio
Retorna o maior de dois nmeros.
Parmetros
x: o primeiro valor a ser comparado
y: o segundo valor a ser comparado
Retorno
O maior entre os dois nmeros.
Exemplo
sensVal = max(senVal, 20); // garante que sensVal maior que 20
abs(x)
Calcula o valor absoluto de um numero.
Parmetros
x: o numero
44
www.facebook.com/fbseletronica
45
constrain(x, a, b)
Restringe um nmero para estar dentro de um intervalo.
Parmetros
x: O numero que deseja restringir;
a: meno valor do intervalo
b: maior valor do intervalo
Retorno
x: se x estiver entre a e b
a: se x menor que a
b: se x maior que b
Exemplo
sensVal = constrain(sensVal, 10, 150);
// limits range of sensor values to between 10 and 150
A funo map() usa matemtica inteiro por isso no ir gerar fraes. Restos fracionrios
so truncados, e no so arredondados.
Parmetros
value: numero para mapear
fromLow: limite inferior da faixa atual
fromHigh: limite superior da faixa atual
45
www.facebook.com/fbseletronica
46
pow(base, exponent)
Calcula o valor de um nmero elevado a uma potncia. pow() pode ser usado para elevar
um nmero a uma potncia fraccionada. Isto til para a gerao valores de mapeamento
exponencial ou curvas.
Parmetros
base: o numero da base (float)
exponent: o numero do expoente (float)
Retorno
Resultado da operao (double)
sqrt(x)
Calcula a raiz quadrada de um numero.
Parmetros
x: o numero, pode ser de qualquer tipo
Retorno
O resultado da operao(double)
sin(rad)
Calcula o seno de um ngulo(radianos). O resultado ser entre -1 e 1.
46
www.facebook.com/fbseletronica
47
Parmetros
rad: ngulo em radianos(float)
Retorno
Seno do ngulo.(double)
cos(rad)
Calcula o Cosseno de um ngulo(radianos). O resultado ser entre -1 e 1.
Parmetros
rad: ngulo em radianos(float)
Retorno
Cosseno do ngulo.(double)
tan(rad)
Calcula a tangente de um ngulo (radianos). O resultado estar entre menos infinito e mais
infinito.
Parmetros
rad: ngulo em radianos(float)
Retorno
Tangente do ngulo. (double)
7.19.6
Funes de Converso
char()
Converte o valor para o tipo char.
Sintaxe
char(x)
Parmetros
x: valor de qualquer tipo
Retorno
char
47
www.facebook.com/fbseletronica
48
byte()
Converte um valor para o tipo byte
Sintaxe
byte(x)
Parmetros
x: um valor de qualquer tipo
Retorno
byte
int()
Converte um valor para o tipo int
Sintaxe
int(x)
Parmetros
x: um valor de qualquer tipo
Retorno
Int
word()
Converte um valor em um dado do tipo word ou cria uma word a partir de dois bytes.
Sintaxe
word(x)
word(h, l)
Parmetros
x: um valor de qualquer tipo.
h: Parte alta da word
l: parte baixa da word
48
www.facebook.com/fbseletronica
49
Retorno
Word
long()
Converte um valor para o tipo de dado long.
Sintaxe
long(x)
Parmetros
x: valor a ser convertido
Retorno
long
float()
Converte um valor para o tipo de dado float.
Sintaxe
float(x)
Parmetros
x: valor de qualquer tipo
Retorno
float
49
www.facebook.com/fbseletronica
50
8 PROJETOS
A seguir sero apresentadas algumas aplicaes bsicas com o ARDUINO, aplicando na
pratica as funes estudadas anteriormente. Sero exibidos os conceitos com exemplos
assim como a proposta de exerccios.
50
www.facebook.com/fbseletronica
51
Para configurar o pino como sada digital utiliza a funo pinMode(). Inicialmente
definiu-se uma varivel do tipo int com o valor correspondente ao pino que se deseja ligar
o LED, no caso o pino 13. Para definir o pino como sada usa-se a constante OUTPUT,
conforme instruo abaixo:
pinMode(led, OUTPUT);
Para acionar a sada utiliza-se a funo digitalWrite(). Para escrever nvel lgico 1,
usa-se a constante HIGH e para um nvel lgico baixo usa-se a constante LOW, conforme
instrues abaixo.
digitalWrite(led, HIGH);
// liga led
digitalWrite(led, LOW);
//desliga led
// aguarda 1 segundo
51
www.facebook.com/fbseletronica
52
/*
Pisca LED
Liga led por 1 segundo e depois desliga por mais 1 segundo
*/
// Pino 13 tem um led conectado na maioria das placas
int led = 13;
// rotina de configurao
void setup() {
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH);
// liga led
delay(1000);
// aguarda 1 segundo
digitalWrite(led, LOW);
//desliga led
delay(1000);
//aguarda 1 segundo
Exerccio 1:
Criar um sketch para acionar 4 LED, conectados aos pinos 10,11,12,13. Os LEDs devem
piscar da seguinte forma:
1. Ligar os LEDs 13, 11 e desligar os LEDs 12,10.
2. Aguardar 1 segundo
3. Desligar os LEDs 13, 11 e ligar os LEDs 12,10.
4. Aguardar 1 segundo
5. Repetir o processo.
52
www.facebook.com/fbseletronica
53
Para ler uma entrada digital utiliza-se a funo digitalRead() ela retorna o valor
presente no pino. Porm antes de ler o valor presente no pino deve-se configurar o pino
correspondente como entrada utilizando a funo pinMode().
O abaixo exibido o esquema eltrico para leitura de uma tecla:
53
www.facebook.com/fbseletronica
54
A tecla est ligada no pino digital 2, nota-se que existe um resistor ligado a +5V.
Este resistor chamado de resistor de pull up e tem a funo de garantir um nvel lgico,
no caso 5V, quando a tecla permanecer solta. Para configurar o pino 2 como entrada
utiliza-se a seguinte instruo na funo setup():
pinMode(inputPin, INPUT); // declara pino como entrada
O circuito possui um LED ligado ao pino 13 que deve ser configurado como sada
digital, conforme visto no captulo anterior. A montagem do circuito pode ficar conforme a
figura abaixo:
54
www.facebook.com/fbseletronica
55
O exemplo consiste em ler a tecla e ligar o LED quando a tecla estiver pressionada, o
sketch a seguir mostra a programao para leitura de uma entrada digital:
/*
Leitura de tecla
O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13
*/
const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED
const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla
void setup()
{
pinMode(ledPin, OUTPUT); // declara o pino do led como sada
pinMode(inputPin, INPUT); // declara o pino da tecla como entrada
}
void loop()
{
int val = digitalRead(inputPin); // le o valor na entrada
if (val == LOW) // se valor est em zero( tecla pressionada)
{
55
www.facebook.com/fbseletronica
56
O circuito fica mais limpo e mais simples de montar no protoboard, a figura a seguir
exibe a ligao no protoboard para teste:
56
www.facebook.com/fbseletronica
57
O sketch completo para o teste da leitura de tecla sem resistor de pull up exibido a
seguir:
/*
Leitura de tecla
O exemplo le uma tecla conectada ao pino 2 e aciona um led conectado ao pino 13
*/
const int ledPin = 13; // cria uma constante com o numero do pino ligado ao LED
const int inputPin = 2; // cria uma constante com o numero do pino conectado a tecla
57
www.facebook.com/fbseletronica
58
void setup()
{
pinMode(ledPin, OUTPUT); // declara o pino do led como sada
pinMode(inputPin, INPUT_PULLUP); // declara o pino da tecla como entrada
}
void loop()
{
int val = digitalRead(inputPin); // le o valor na entrada
58
www.facebook.com/fbseletronica
59
A funo debounce chamada passando como parmetro o numero do pino da tecla que se
deseja fazer a leitura. A funo retorna o nvel lgico presente no pinio aps a estabilizao.
Exerccio 2:
Desenvolver um sketch para a leitura de uma tecla e acionar 4 LEDS de sada. A cada vez
que a tecla for pressionada deve-se acender um LED e apagar o anterior. Inicialmente os
leds encontram-se apagados. Quando tecla pressionada pela primeira vez acende LED1, na
segunda vez apaga LED1 e acende LED 2, e assim por diante. Quando o LED4 estiver aceso
e a tecla for pressionada apaga o LED4. Quando a tecla for pressionada novamente
repetem-se as instrues anteriores.
59
www.facebook.com/fbseletronica
60
60
www.facebook.com/fbseletronica
61
/*
* Entrada analgica
* Liga e desliga um LED conectado ao pino digital 13. O tempo
* que o LED permanece ligado ou desligado depende do valor
* obtido pelo analogRead(). No caso mais simples, conecta-se
* um potencimetro ao pino analgico 0.
*/
int potPin = 0;
int val = 0;
61
www.facebook.com/fbseletronica
62
void setup() {
pinMode(ledPin, OUTPUT);
void loop() {
val = analogRead(potPin);
digitalWrite(ledPin, HIGH);
// ligar o ledPin
delay(val);
digitalWrite(ledPin, LOW);
// desligar o ledPin
delay(val);
Exerccio 3:
Elaborar um sketch para ler um potencimetro e acender 8 leds nas sadas digitais que
representaro o nvel de tenso na entrada analgica como um bargraph. Quando entrada
for zero volts todos os leds estaro apagados e quando for 5 Volts todos estaro acesos e
qualquer valor dentro desse intervalo deve acender os leds proporcionalmente.
62
www.facebook.com/fbseletronica
63
A funo print envia textos pela serial. O texto deve ser colocado dentro de aspas duplas,
por exemplo:
Serial.print(ol, mundo);
Para enviar nmeros, o valor exibido depender do tipo da varivel. Por exemplo, para
enviar uma varivel do tipo int, chamada numero, usa-se a seguinte funo:
Serial.print(numero);
Para visualizar os valores no computador pode-se utilizar o terminal serial integrado a IDE
conforme figura a seguir:
63
www.facebook.com/fbseletronica
64
64
www.facebook.com/fbseletronica
65
65
www.facebook.com/fbseletronica
66
Os seguintes parmetros podem ser utilizados para enviar valores em diferentes tipos de
dados:
Serial.print(valor, BIN) - envia no formato binrio
Serial.print(valor, OCT) -envia no formato octal
Serial.print(valor, DEC) envia no formato decimal
Serial.print(78, HEX ) envia no formato hexadecimal
Serial.println(1.23456, 0) - envia numero flutuante sem casa decimal
Serial.println(1.23456, 2) - envia numero flutuante com duas casa decimais
Serial.println(1.23456, 4) - envia numero flutuante com 4 casas decimais
void loop()
{
Serial.print("chrValue: ");
Serial.print(chrValue);
Serial.print(" ");
Serial.write(chrValue);
Serial.print(" ");
Serial.print(chrValue,DEC);
Serial.println();
Serial.print("byteValue: ");
Serial.print(byteValue);
Serial.print(" ");
Serial.write(byteValue);
Serial.print(" ");
Serial.print(byteValue,DEC);
Serial.println();
Serial.print("intValue: ");
Serial.print(intValue);
66
www.facebook.com/fbseletronica
67
Serial.print(" ");
Serial.print(intValue,DEC);
Serial.print(" ");
Serial.print(intValue,HEX);
Serial.print(" ");
Serial.print(intValue,OCT);
Serial.print(" ");
Serial.print(intValue,BIN);
Serial.println();
Serial.print("floatValue: ");
Serial.print(floatValue);
Serial.println();
Serial.println();
Serial.println();
delay(5000); // aguarda 5 segundo
chrValue++; // incremnta para o prximo valor
byteValue++;
intValue++;
floatValue +=1;
}
67
www.facebook.com/fbseletronica
68
Exerccio 4:
Desenvolver um sketch para ligar os leds conforme o nmero enviado pela serial. Se
enviado o numero 1 deve-se ligar o led1 e assim por diante. Quando enviado o mesmo
numero na segunda vez deve-se desligar o led correspondente.
68
www.facebook.com/fbseletronica
69
A sada PWM no Arduino pode ser feita atravs da funo analogWrite(), que pode ser
utilizada para controle diversos, como por exemplo a intensidade do brilho de um led
conectado ao ARDUINO.
A tcnica de PWM (do ingls Pulse width modulation) consiste em emular um sinal
analgico atravs de pulsos digitais.
PWM consiste na variao proporcional dos pulsos, mantendo a frequncia constante.
Sadas de baixo nvel de sinal analgico so conseguidas com pulso curtos de nvel lgico
alto, j sadas com maior nvel de sinal analgico so conseguidos atravs de perodos
maiores de pulso em nvel alto.
A figura a seguir exibe a modulao PWM para variar a intensidade de um led:
O Arduino possui pinos especficos com essa funo. Na placa ARDUINO UNO, pode se
utilizar os pinos 3,5,6,9,10 e 11 para esta funo.
A funo analogWrite deve ser utilizada da seguinte forma:
Sintaxe:
analogWrite(pino, valor);
Onde o parmetro pino corresponde ao pino que ser gerado o sinal PWM e valor
corresponde ao duty cycle, ou seja, o valor que permanecer em nvel alto o sinal.
69
www.facebook.com/fbseletronica
70
O valor deve ser de 0 a 255 onde 0 a sada permanece sempre em nvel zero e 225 a sada
permanece sempre em nvel alto.
O sketch a seguir exibe como controlar a intensidade de um led atravs da leitura de um
sinal analgico em um potencimetro.
/*
PWM
controla a luminosidade de um led conforme o valor presente
em um potenciometro
*/
int ledPin = 13;
int analogPin = 3;
int val = 0;
// pino do led
// pino para leitura do potenciometro
// variable to store the read value
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
val = analogRead(analogPin);
analogWrite(ledPin, val / 4);
}
// le o valor analgico
// aciona led com o valor anlogico lido divido por 4
Exerccio 5
Desenvolver um sketch para controlar o brilho do led atravs de duas teclas onde uma
aumenta o brilho do led e outra diminui o brilho do led.
9 REFERNCIAS
1. http://arduino.cc/en/Reference/HomePage
70
www.facebook.com/fbseletronica