Академический Документы
Профессиональный Документы
Культура Документы
setup( ): Esta uma funo de preparao, ela encapsula duas ou trs outras
funes que ditam o comportamento dos pinos do Arduino e inicializam a porta serial.
a primeira funo a ser chamada quando o programa inicia e executada apenas nessa
primeira vez.
Exemplos:
Exemplo 1:
Nesse cdigo a funo
funo loop(
segundos:
void setup( )
{
Serial.begin(9600);
}
void loop( )
{
Serial.println(Hello World!);
delay(2000);
//transmite a frase
//pela serial...
//a cada 2000 mS.
}
Exemplo 2:
int i=0;
void ledOn( );
void setup( )
{
pinMode(10,OUTPUT); //pino e seu modo de operao
//so passados funo pinMode()
}
void loop( )
{
for (i=0; i <= 255; i++)
{
ledOn( ); //aumenta o brilho do led
}
for (i=255; i >= 0; i--)
{
ledOn( ); //diminui o brilho do led
}
void ledOn( )
//funo que acende/apaga o led
{
analogWrite (10, i); //pino e o valor de i so
//passados funo analogWrite()
delay (10);
}
}
Constantes
Constantes so valores predefinidos que nunca podem ser alterados. Na
linguagem C do Arduino so 3 os grupos de constantes; os dois componentes de cada
grupo sempre podem ser representados pelos nmeros binrios 1 e 0.
Variveis
Variveis so posies na memria de programa do Arduino marcadas com um nome e
o tipo de informao que iro guardar. Essas posies podem estar vazias ou podem
receber um valor inicial. Os valores das variveis podem ser alterados pelo programa.
Escopo da Varivel o limite ou abrangncia da varivel. Uma varivel pode ser
declarada em qualquer parte do programa. Se for declarada logo no incio, antes da
funo setup( ), ela tem o escopo de Varivel Global, e por isso ela pode ser vista e
usada por qualquer funo no programa. Se declarada dentro de uma funo ela tem o
escopo de Varivel Local, e s pode ser usada por essa funo.
Toda varivel deve ser declarada antes de ser chamada. Essa declarao consiste em
atribuir previamente um tipo e um nome varivel.
Tipos de variveis
Matrizes
Matrizes so colees de variveis de um mesmo tipo, portanto so posies na
memria de programa; cada uma com um endereo, um identificador, chamado
de ndice. A primeira posio de uma matriz sempre a de ndice 0.
Declarao de uma Matriz: As matrizes, como as variveis e as funes, devem ser
declaradas com um tipo e um nome seguido de colchetes; e podem tambm ser
inicializadas com os valores entre as chaves.
Exemplo:
int nomeMatriz [ 10 ] ;
nomeMatriz varivel x:
int x = nomeMatriz[4];
x
x
x
x
x
x
=
=
=
=
=
=
x
x
x
x
x
x
*
/
1;
1;
y;
y;
y;
y;
//O
//O
//O
//O
//O
//O
que
que
que
que
que
que
igual
igual
igual
igual
igual
igual
a:
a:
a:
a:
a:
a:
=
=
=
=
=
=
x++
x-x+=y
x-=y
x*=y
x/=y
&&
||
!
AND
OR
NOT
porta lgica E
porta lgica OU
porta lgica NO
x
x
x
x
x
x
== y;
!= y ;
< y;
> y;
<= y;
>= y;
//
//
//
//
//
//
x
x
x
x
x
x
igual a y?
no igual a y?
menor que y?
maior que y?
menor ou igual a y?
maior ou igual a y?
delay(1000);
Nota: Durante o perodo em que essa funo est ativa qualquer outra funo no
programa suspensa; equivalente ao HALT em Assembly. Somente as interrupes
de hardware podem parar essa funo.
Controles de Fluxo
O comando if
O comando if um controle de fluxo
usado para selecionar uma ou mais
instrues baseado no resultado de um
teste de comparao. Todas as
instrues entre as chaves '{' e '}' so
executadas somente se o resultado
desse teste for verdadeiro; se no,
essas instrues no so executadas.
Verdadeiro qualquer resultado,
mesmo negativo, diferente de zero.
Falso um resultado zero.
Sintaxe:
if (expresso)
{
bloco de instrues;
}
//se expresso for verdadeira, bloco de instrues
//executado.
O comando if...else
Ao se acrescentar mais um bloco de
instrues no loop do comando if
pode-se criar o comando
if...else, para fazer um teste
novo quando o resultado da
expresso for falsa.
Sintaxe:
if (expresso)
{
bloco de instrues1;
}
//se expresso for verdadeira, bloco de instrues1
//executado
else
{
bloco de instrues2;
}
//se expresso for falsa, bloco de instrues2
//executado
O comando 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
Sintaxe:
if (expresso1)
{
bloco de comandos1;
}
else if (expresso2)
{
bloco de instrues2;
}
else
{
bloco de comandos3;
}
O comando switch...case
possvel ir inserindo
comandos if...else na
posio do segundo bloco de
instrues de outro comando
if...else e assim criar uma
cadeia de comandos para
testar dezenas de expresses
at encontrar uma que retorne
um resultado verdadeiro e
executar um dos blocos de
instrues. Mas existe um
comando prprio que simplifica
bastante essa seleo, o
comando switch...case.
Esse comando permite
comparar uma mesma varivel
inteira, ou uma expresso que
retorne um inteiro, com vrios
valores possveis pr-definidos.
Sintaxe:
switch (expresso)
{
case constante1:
bloco de instrues1;
break;
case costante2:
bloco de instrues2;
break;
case constante3:
bloco de instrues3;
break;
default:
bloco de instrues4;
}
O comando while
Uma das operaes mais frequentes que os programas executam repetir um bloco de
instrues at que uma condio inicialmente verdadeira se torne falsa. para isso que
serve o comando while.
Sintaxe:
while (expresso)
{
bloco de instrues;
}
//O bloco de instrues ser executado
//enquanto o parmetro expresso for verdadeiro.
O comando do...while
Para que o bloco de instrues seja executado ao menos uma vez, ele deslocado para
a entrada da caixa de decises, antes do teste de validade, cria-se o
comando do...while:
Sintaxe:
do
{
bloco de instrues;
}
while (expresso);
//Aqui o bloco de instrues ser executado primeiro
//e s ento o parmetro expresso avaliado.
O comando for
Sintaxe:
Exemplo:
int x = 8;
y = (x > 10) ? 15 : 20;
int x = 8;
if (x > 10)
{
y = 15;
}
else
y = 20;
Os Pinos de Alimentao
Ficam na barra com 6 pinos, marcada como POWER, localizada ao lado dos pinos
analgicos. O primeiro pino dessa barra, RESET, quando forado ao potencial de terra
serve para resetar o Arduino. Do outro lado, Vin um pino que tambm pode servir
para alimentar o Arduino se nele for aplicada uma tenso entre 9 e 15 volts.
Dos 6 pinos dessa barra somente os quatro do meio servem para alimentar um circuito
externo conectado ao Arduino: o pino de 5V e o terra (os dois pinos Gnd entre 5V e
Vin); e o pino 3V3 que disponibiliza essa tenso com uma corrente mxima de 50mA.
A Porta USB
por meio da porta serial USB que o Arduino se comunica atravs de um cabo a um
computador ou a outros dispositivos que tenham tambm uma interface USB.
tambm por esse conector que o Arduino recebe 5 volts diretamente da fonte de
alimentao do computador.
Funes em C para a porta serial:
Serial.begin(taxa);
Essa funo habilita a porta serial e fixa a taxa de transmisso e recepo em
bits por segundo entre o computador e o Arduino.
Exemplo:
Serial.begin(9600);
/* A porta serial habilitada em 9600 bps.
Os pinos digitais 0 e 1 no podem ser utilizados como
entrada ou como sada de dados quando a porta serial
habilitada por essa funo. */
Serial.end( );
Desabilita a porta serial para permitir o uso dos pinos digitais 0 e 1 para entrada
ou sada de dados.
Como a funo anterior, essa funo deve ser sempre escrita dentro de
setup( ) .
Serial.avaliable( );
Retorna o nmero de bytes disponveis para leitura no buffer da porta serial.
Exemplo:
int total=Serial.available( );
/*Aqui a varivel inteira total vai guardar o nmero de
caracteres que esto disponveis para leitura na porta
serial.
O valor 0 retornado quando no h nenhuma informao
para ser resgatada na porta serial.
*/
Serial.read( );
Essa funo l o primeiro byte que est no buffer da porta serial.
Exemplo:
Serial.print( );
Envia para a porta serial um caractere ASCII, que pode ser capturado por um
terminal de comunicao. O segundo parmetro, formato, opcional e
especifica com quantas casas decimais ou com que base numrica vai ser o
nmero transmitido.
Exemplos:
Serial.print(1.23456);
Serial.print(1.23456,3);
Serial.print(Al Mundo!);
Serial.print(A);
Serial.print(A,BIN);
Serial.print(A,OCT);
Serial.print(A,HEX);
Serial.print(A,DEC);
//
//
//
//
//
//
//
//
transmite
transmite
transmite
transmite
transmite
transmite
transmite
transmite
1.23 (default)
1.234
a frase (string)
o caractere A
01000001
o octal 101
o hexa 41
o decimal 65
Serial.println();
Como a anterior, essa funo envia para a porta serial um caractere ASCII com
os mesmos parmetros opcionais de formato, porem acrescenta ao final da
transmisso o caractere Carriage Return (retorno ao incio da linha) e o
caractere New Line (mudana para a prxima linha).
Os Pinos Analgicos
A0~A5: So 6 pinos em uma s barra com o nome ANALOG IN, localizada no lado
oposto s barras dos pinos digitais. So numerados de 0 a 5, da esquerda para a
direita. Esses pinos so usados para leitura de sinais analgicos de sensores conectados
ao Arduino, e podem ser de quaisquer valores entre 0 a 5 volts. Os pinos analgicos
no precisam ser previamente configurados com a funo pinMode( ); .
analogRead(pino);
Essa funo l o nvel analgico presente no pino indicado pelo parmetro entre
parnteses e, aps a converso para o seu equivalente em bits, o guarda em
uma varivel determinada pelo programador.
Exemplo:
Os Pinos Digitais
0~13: So 14 pinos marcados com o nome DIGITAL logo abaixo de duas barras de 8
pinos. So numerados de 0 a 13 da direita para a esquerda e podem ser configurados
pela funo pinMode( ); para detectarem ou transmitirem nveis lgicos digitais
(verdadeiro/falso, 1/0 ou HIGH/LOW).
AREF e GND: O pino AREF a entrada de tenso de referncia para o conversor A/D
do Arduino; o pino GND o terra, comum a todos os outros pinos.
PWM: 6 dos 14 pinos digitais (marcados com '~') podem ser usados para gerar sinais
analgicos com a funo analogWrite( ); utilizando a tcnica de Modulao por
Largura de Pulso (PWM).
Pinos 0 e 1: Os dois primeiros pinos digitais so conectados a USART do
microcontrolador do Arduino para comunicao serial com um computador.
Pinos 2 e 3: Pinos que chamam uma ISR (Interrupt Service Routine) para tratar uma
interrupo de hardware com a funo attachInterrupt( ); nesses pinos.
Funes em C para os pinos digitais:
pinMode(pino,modo);
Serve para estabelecer a direo do fluxo de informaes em qualquer dos 14
pinos digitais. Dois parmetros devem ser passados funo: o primeiro indica
qual pino vai ser usado; o segundo, se esse pino vai ser entrada ou se vai ser
sada dessas informaes.
Exemplo:
pinMode(2,OUTPUT);
/* Aqui o pino 2 selecionado para transmitir
informaes do Arduino para um circuito externo qualquer.
Para configurar esse pino como entrada, o segundo
parmetro dessa funo deve ser INPUT.
*/
digitalRead(pino);
Uma vez configurado um certo pino como entrada com a funo pinMode( ); , a
informao presente nesse pino pode ser lida com a funo digitalRead( ); e
armazenada numa varivel qualquer.
Exemplo:
digitalWrite(pino,valor);
Para enviar um nvel lgico para qualquer pino digital do Arduino utiliza-se essa
funo. Dois parmetros so requeridos: o nmero do pino e o estado lgico
(HIGH/LOW ) em que esse pino deve permanecer.
Exemplo:
digitalWrite(2,HIGH);
/* Aqui uma tenso de 5 volts colocada no pino 2. Para
enviar terra para esse pino o segundo parmetro dever
ser LOW. */
analogWrite(pino,valor);
O Arduino pode gerar tenses analgicas em 6 de seus 14 pinos digitais com a
funo analogWrite( );. Dois parmetros devem ser passados funo: o
analogWrite(10,128);
/* Com esses parmetros uma tenso analgica de 2,5 volts
vai aparecer no pino 10. No necessrio configurar um
pino PWM como sada com a funo pinMode( ); quando se
chama funo analogWrite( ); .
*/
attachInterrupt(pino,funo,modo);
Essa funo uma rotina de servio de interrupo, ou ISR (Interrupt Service
Routine). Toda vez que ocorrer uma interrupo por hardware no pino digital 2
ou no 3 do Arduino uma outra funo, criada pelo programador, vai ser
chamada. O terceiro parmetro, modo, informa como a interrupo vai ser
disparada, se na borda de subida do pulso detectado no pino do Arduino, se na
borda de descida, se quando o pulso for baixo ou se na mudana de nvel desse
pulso.
Exemplo:
attachInterrupt(0,contador,RISING);
/* Nesse exemplo a funo contador vai ser chamada
quando o Arduino detectar uma mudana do nvel LOW para o
nvel HIGH em seu pino 2. Nessa ISR o parmetro 0
monitora o pino 2, o parmetro 1 monitora o pino 3.
*/
pulseIn(pino,valor,espera);
Essa funo mede em microssegundos a largura de um pulso em qualquer pino
digital. O parmetro valor diz funo que tipo de pulso deve ser medido, se
HIGH ou LOW. O parmetro espera (time out) opcional e se passado funo
faz com que a medida do pulso s comece aps o tempo em microssegundos ali
especificado.
Exemplo:
pulseIn(4,HIGH);
/* Aqui essa funo vai monitorar o pino 4, e quando o
nvel nesse pino mudar de LOW para HIGH a sua largura vai
ser medida at que seu nvel volte para LOW. Se, por
exemplo, for passado o valor 100 como terceiro parmetro,
a medida da largura do pulso s ser disparada aps 100
S. */