Escolar Documentos
Profissional Documentos
Cultura Documentos
ARDUINO
Cartilha para Programao em C
Para Interfaces Simples
de Hardware - Edio 1.0
Pinos Digitais
Pinos de Alimentao
analogRead( )
www.revistadoarduino.com.br
www.revistadoarduino.com.br
pgina II
www.revistadoarduino.com.br
pgina III
PREFCIO
Este livreto de pouco mais de 20 pginas um guia de consulta rpida para os iniciantes em programao do ARDUINO para criao de interfaces simples de hardware.
fsicas de entrada e de sada do ARDUINO e os principais comandos da sua linguagem
de programao. A idia foi reunir em um pequeno guia de bancada a descrio de cada
programao, e uma que trata do hardware controlado por essa programao. Nessa
primeira parte apresentada a estrutura bsica da linguagem com as suas duas prinda linguagem C/C++. Na segunda parte as portas de entrada e sada (pinos) digitais, as
portas analgicas e a porta serial do ARDUINO so descritas junto com as suas funPara aqueles leitores interessados em se aprofundar mais no mundo do ARDUINO
e na linguagem C sugerimos os livros e sites web que aparecem na pgina II deste
-
tilha.
www.revistadoarduino.com.br
pgina IV
NDICE
MAPA DAS ENTRADAS E SADAS DO ARDUINO
setup( )
loop( )
Os smbolos
{}
//
/*...*/
A.1 - CONSTANTES E VARIVEIS
TRUE/FALSE
HIGH/LOW
INPUT/OUPUT
Escopo da Varivel
Declarao da Varivel
Tipos de variveis
A.2 - MATRIZES
Declarao de uma Matriz
Escrever/Ler uma Matriz
www.revistadoarduino.com.br
pgina V
while
do...while
for
switch...case
B- AS PORTAS DE E/S DO ARDUINO E SUAS FUNES EM C
13
13
15
16
17
www.revistadoarduino.com.br
www.revistadoarduino.com.br
pgina 2
loop( ).
Os Smbolos
{ } - Dentro das chaves
; - O ponto-e-vrgula
// - comentrio de uma linha:
/*...*/ - comentrio em vrias linhas: qualquer texto colocado entre esses simbolos tambem
ignorado pelo programa.
www.revistadoarduino.com.br
pgina 3
Exemplo:
/*
Nesse cdigo a funo setup( ) ativa a porta serial em 9600 bits/s e a funo loop( )
*/
void setup( )
}
void loop( )
TRUE/FALSE
Verdadeiro qualquer valor que no seja zero. Falso sempre o valor zero.
HIGH/LOW
Declarao da Varivel
vazias ou podem recedeclarada antes de ser chamada. Essa declarao consiste em atribuir
ber um valor inicial. Os previamente um tipo e um nome varivel.
valores das variveis podem ser alterados pelo
Tipos de variveis:
programa.
byte int long 32 bits.
www.revistadoarduino.com.br
pgina 4
Exemplo:
/* Esse programa escrito em C do Arduino aumenta e diminui gradativamente o brilho de um LED
conectado no pino PWM 10 do Arduino. */
void setup( ) {
}
void loop( )
}
void ledOn( ) {
A.2 - MATRIZES
Declarao de uma Matriz I As matrizes, como as variveis e
MATRIZES
www.revistadoarduino.com.br
pgina 5
x
x
x
x
+= y
-= y
*= y
/= y
// x=x+y
// x=x-y
// x=x*y
// x=x/y
Operadores lgicos
retornam 1 ou 0 (verdadeiro/falso).
&&
||
!
NOT porta lgica NO
www.revistadoarduino.com.br
pgina 6
Exemplo
Notas
delay(ms)
delay(1000);
equivalente ao HALT em
Assembly. Somente as
podem parar essa funo.
delayMicroseconds(us)
delayMicroseconds(1000);
millis( )
random(min,max)
abs(x)
map(valor,min1,max1,min2,max2)
www.revistadoarduino.com.br
pgina 7
if
da instruo
anterior
O comando if
bloco de instrues
da instruo
anterior
O comando if...else
NO
NO
EXPRESSO
verdadeira?
EXPRESSO
verdadeira?
SIM
SIM
BLOCO DE
INSTRUES 1
BLOCO DE
INSTRUES
para a prxima
instruo
ELSE
BLOCO DE
INSTRUES 2
para a prxima
instruo
bloco de instrues1
bloco de instrues2
www.revistadoarduino.com.br
pgina 8
if...else if E de novo ao se acrescentar agora o comando if...else no loop do comando if podese criar mais um outro comando, o if...else if. No exemplo abaixo se expresso1
bloco de instrues1
expresso1
expresso2 for verdadeira bloco
de instrues2
expresso1 expresso2
bloco de instrues3
executado.
da instruo
anterior
O comando switch...case
da instruo
anterior
O comando if...else if
EXPRESSO
EXPRESSO 1
verdadeira?
NO
SIM
BLOCO DE
INSTRUES 1
1?
ELSE IF
EXPRESSO 2
verdadeira?
SIM
BLOCO DE
INSTRUES 1
NO
NO
2?
ELSE
BLOCO DE
INSTRUES 2
SIM
BLOCO DE
INSTRUES 3
SIM
BLOCO DE
INSTRUES 2
NO
3?
SIM
BLOCO DE
INSTRUES 3
NO
BLOCO DE
INSTRUES 4
(default)
para a prxima
instruo
para a prxima
instruo
if (expresso1) {
bloco de comandos1;
}
else if (expresso2) {
bloco de instrues2;
}
else {
}
bloco de comandos3;
switch (expresso) {
case 1: bloco de instrues1;
break;
case 2: bloco de instrues2;
break;
case 3: bloco de instrues3;
break;
default: bloco de instrues4;
}
switch...
case. Esse comando permite comparar uma mesma varivel inteira, ou uma expresso que retorne um
inteiro, com vrios valores possveis.
www.revistadoarduino.com.br
pgina 9
while
while
while (expresso) {
bloco de instrues;
}
O bloco de instrues ser executado enquanto o parmetro expresso for verdadeiro.
da instruo
anterior
O comando while
LOOP
EXPRESSO
verdadeira?
BLOCO DE
INSTRUES
da instruo
anterior
BLOCO DE
INSTRUES
SIM
EXPRESSO
verdadeira?
NO
NO
para a prxima
instruo
O comando do...while
para a prxima
instruo
do...while
do {
bloco de instrues;
}
while (expresso);
www.revistadoarduino.com.br
LOOP
SIM
pgina 10
for Inserindo-se no loop do comando while um contador que registre cada execuo do bloco de
instrues cria-se o comando for. Esse contador deve ter uma varivel de controle que deve ser previafor (varivel; expresso;incremento) {
bloco de instrues;
}
A varivel
da instruo
anterior
O comando for
inicializao
VARIVEL
do contador
CONTADOR
LOOP
BLOCO DE
INSTRUES
EXPRESSO
verdadeira?
SIM
NO
para a prxima
instruo
www.revistadoarduino.com.br
pgina 11
if...else em C/
C++ com o operador condicional ?
expresso e se esta for vardadeira uma instruo executada, se a expresso for falsa uma outra
(expresso) ? instruo1 : instruo2;
int x = 8;
y = (x > 10) ? 15 : 20;
Aqui o valor de y
y
que 10, y seria 15. Essa mesma expresso com o comando if...else
int x = 8;
if (x > 10) {
y = 15;
}
else
y = 20;
da instruo
anterior
O operador ternrio
EXPRESSO
verdadeira ?
SIM
NO
INSTRUO 2
INSTRUO 1
para a prxima
instruo
www.revistadoarduino.com.br
x vale 8,
x fosse maior
pgina 12
Pinos Digitais
Pinos de Alimentao
Pinos analgicos
www.revistadoarduino.com.br
analogRead( )
pgina 13
Pinos 0 e 1
Pinos 2 e 3
Funo
Exemplo
Notas
pinMode(pino,modo)
pinMode(2,OUTPUT);
digitalRead(pino)
(verdadeiro/falso) presente no
pino digital 3.
digitalWrite(pino,valor)
digitalWrite(2,HIGH);
www.revistadoarduino.com.br
pgina 14
}
void loop()
void loop()
Funo
Exemplo
Notas
analogWrite(pino,valor)
analogWrite(10,128);
pulseIn(pino,valor,espera)
pulseIn(4,HIGH);
Essa funo mede a largura em microssegundos de um pulso em qualquer pino digitipo de pulso deve ser medido, se HIGH
opcional e se passado funo faz com que
a medida do pulso s comece aps o tempo
CHANGE - dispara semquando o Arduino detetar uma pre que o pino muda de
estado (de 0 para 1, ou
mudana do nvel LOW para
o nvel HIGH em seu pino 2.
RISING - somente
Nessa ISR o parmetro 0
monitora o pino 2, o parmet- quando o pino muda de 0
ro 1 monitora o pino 3.
FALLING - somente
quando o pino muda de 1
para 0.
www.revistadoarduino.com.br
pgina 15
Pinos 0 a 5
ao conversor A/D de 10 bits no microcon
trolador do Arduino. O pino AREF, numa
das barras de pinos digitais, a entrada
de tenso de referncia para esse conversor.
Funo
Exemplo
analogRead(pino)
Notas
reconhecidos pela linguagem C do Arduino tanto
como A0 a A5 como 14
a 19. Assim, a mesma
expresso acima pode ser
escrita tambem da seint sensor
= analogRead(14);
tambem como pinos digitais pela funo pinMode( ), aumentando assim o nmero desses pinos para 20.
Assim, a expresso pinMode(14,OUTPUT); transforma o pino analgico A0 em pino de sada digital
como qualquer outro presente nas duas barras de pinos digitais.
O cdigo a seguir l uma tenso CC no pino analgico A5 (pino 19) e envia esse valor digitalizado para
void loop( )
www.revistadoarduino.com.br
pgina 16
Funo
Exemplo
Notas
Serial.begin(taxa)
Serial.begin(9600);
Serial.end( )
Desabilita a porta serial para permitir o uso dos pinos digitais 0 e 1 para
entrada ou sada de dados.
Serial.available( )
Serial.read( )
Serial.print(valor,formato)
Essa funo envia para a porta serial um caracter ASCII, que pode ser
capturado por um terminal de comuni-
Serial.print(1.23456);
Serial.print(1.23456,3);
Serial.print(Al Mundo!);
Serial.println(valor,formato)
Como a anterior essa funo envia para a porta serial um caracter ASCII com os mesmos parmetros
Carriage Return (retorno
ao incio da linha) e o caracter New Line (mudana para a prxima linha).
www.revistadoarduino.com.br
pgina 17
-
void setup( ) {
}
void loop( )
}
O Terminal Serial do Arduino mostrar inicialmente todo segundo o retorno da funo available(
), que ser 0, e o da funo read( ), que ser -1. Isso ocorre porque nenhum dado est disponvel
na porta serial do computador. Entre no Terminal do Arduino e transmita, por exemplo, as letras
ABCDE
available( ) informa
read( ) mostra o
cdigo ASCII decimal 65 do primeiro deles, que corresponde letra A. Os outros caracteres vo
sendo enviados sequencialmente enquanto available( ) vai decrementando at 0 de novo.
www.revistadoarduino.com.br
pgina 18