Você está na página 1de 23

Linguagem C para Arduino

Para criarmos os programas a serem embarcado no Arduino, precisamos nos


familiarizar com uma Linguagem de Programao voltada para o Micro Controlador do
Arduino, est linguagem de programao baseada na Linguagem C e C++.
Vamos as referncias gerais da linguagem utilizada:
Os programas em Arduino
podem ser divididos em trs partes
principais:

Estrutura;
Valores
(variveis
constantes);
Funes.

ESTRUTURA

void setup ()
void loop ()

Estruturas de controle

if
if else
for
switch case
while
do... while
break
continue
return
goto

== (igual a)
!= (diferente de)
< (menor que)
> (maior que)
<= (menor ou igual a)
>= (maior ou igual a)

Operadores booleanos

&& (e)
|| (ou)
! (no)

Operadores de Ponteiros

* Operador de referncia
& Referncia do operador

Operadores de bits

& (operador de bits AND)


| (operador de bits OR)
^ (operador de bits XOR)
~ (operador de bits NOT)
<< (desvio esquerda)
>> (desvio direita)

Elementos de sintaxe

Operadores compostos

; (ponto e vrgula)
{} (chaves)
// (linha de comentrio) ou /*
*/ (bloco de comentrio)
#define
#include

Operadores aritmticos

= (atribuio)
+ (adio)
- (subtrao)
* (multiplicao)
/ (diviso)
% (resto da diviso)

Operadores de comparao

++ (incrementar)
-- (decrementar)
+= (adio composta)
-= (subtrao composta)
*= (multiplicao composta)
/= (diviso composta)
%= (Mdulo composto)
&= (Bit a bit e composto)
|= (Bit a bit ou composto)

VARIVEIS
Variveis so expresses que
voc pode usar em programas para
armazenar valores como a leitura de um
sensor em um pino analgico.
Constantes

Constantes
particulares
com
especficos.

so

HIGH | LOW
INPUT | OUTPUT
LED_BUILTIN
true | false

Tipos de dados
podem ser de vrios tipos:

valores
significados

Variveis

boolean
char
Byte
Int
unsigned int
long
unsigned long
short
float
double
string
array
void

de

Escopo

Variveis de Escopo
static
volatile
const

Utilidades

sizeof()
PROGMEM

FUNES:

unsigned long millis()


unsigned long micros()
delay(ms)
delayMicroseconds(s)

Matemtica

char()
byte()
int()
long()
float()

Variveis
Qualificadores

Entrada e sada analgica


o analogReference
(type)
o analogRead (pin)
o analogWrite
(pin,
value) PWM
Entrada e sada avanada
o tone ()
o noTone ()
o shiftOut
(dataPin,
clockPin,
bitOrder,
value)
o shiftIn ()
o pulseIn (pin, value)

Tempo

Converso

Entrada e sada digital


o pinMode (pin, mode)
o digitalWrite
(pin,
value)
o digitalRead (pin)

min (x, y)
max (x, y)
abs (x)
constrain (x, a, b)
map
(value,
fromLow,
fromHigh, toLow, toHigh)
pow (base, exponent)
sq (x)
sqrt (x)

Trigonometria

sin (rad)
cos (rad)
tan (rad)

Nmeros aleatrios

randomSeed (seed)
long random (max)
long random (min, max)

Comunicao serial
Usado para comunicao entre a
placa Arduino e um computador ou
outros dispositivos. Esta comunicao
ocorre atravs dos conectores serial ou
USB da placa Arduino e nos pinos
digitais 0 (RX) e 1 (TX). Assim, se voc

utilizar estas funes no poder utilizar


os pinos 0 e 1 para entrada e sada
digital.

Serial.begin (speed)
int Serial.available ()
int Serial.read ()

Serial.flush ()
Serial.print (data)
Serial.println (data)

Referncia

Tabela ASCII

ESTRUTURA
setup()
A funo setup() chamada quando um programa comea a rodar. Use esta
funo para inicializar as suas variveis, os modos dos pinos, declarar o uso de livrarias,
etc. Esta funo ser executada apenas uma vez aps a placa Arduino ser ligada ou
reiniciada.
loop()
Aps criar uma funo setup() que declara os valores iniciais, a funo loop()
faz exatamente o que seu nome sugere, entra em looping (executa sempre o mesmo
bloco de cdigo), permitindo ao seu programa fazer mudanas e responder. Use esta
funo para controlar ativamente a placa Arduino.
Exemplo envolvendo: setup() e loop():
/*
* Blink - Acende e apaga um LED com intervalos de 1 segundo repetidamente.
* Este cdigo de exemplo de domnio pblico.
*/
// O pino 13 tem um LED j conectado na maioria das placas Arduino.
// Voc pode ou no conectar um diretamente na placa como na imagem.
int led = 13; // cria uma varivel do tipo inteiro com o nome led e valor 13
// A funo setup roda uma nica vez quando a placa alimentada
// ou quando o boto de reset pressionado
void setup() {
pinMode(led, OUTPUT); // inicializa o pino digital como uma sada.
}
void loop() { // a funo loop roda indefinidamente:
digitalWrite(led, HIGH); // acende o LED (HIGH o nvel de voltagem da
placa)
delay(1000); // espera de 1 segundo
digitalWrite(led, LOW); // apaga o LED
delay(1000); // espera de 1 segundo
}

ESTRUTURAS DE CONTROLE
if (condicional) e ==, !=, <, > (operadores de comparao)
O comando condicional if, que usado como um operador de comparao,
verifica quando uma condio satisfeita, como, por exemplo, um input acima de um
determinado valor. A sintaxe de uso para o comando if :
if (algumaVariavel > 50)
// faa alguma coisa
}
O programa checa se alguma Varivel (colocar acentos em nomes de variveis
no uma boa ideia) maior que 50. Se for, o programa realiza uma ao especfica.
Colocado de outra maneira se a sentena que est dentro dos parntesis verdadeira o

cdigo que est dentro das chaves executado; caso contrrio o programa salta este
bloco de cdigo.
As chaves podem ser omitidas aps uma sentena if se s houver uma nica
linha de cdigo (definida pelo ponto e vrgula) que ser executado de modo condicional:
if (x > 120) digitalWrite(LEDpin, HIGH);
if (x > 120)
digitalWrite(LEDpin, HIGH);
if (x > 120) {digitalWrite(LEDpin, HIGH);}
// todos os exemplos acima so formas corretas de se utilizar o comando!
A sentena que est sendo verificada necessita o uso de, pelo menos, um dos
operadores:
Operadores de comparao:
x
x
x
x
x
x

== y (x igual a y)
!= y (x no igual a y)
< y (x menor que y)
> y (x maior que y)
<= y (x menor ou igual a y)
>= y (x maior ou igual a y)

Cuidado: Tenha precauo com o uso acidental de apenas um sinal de igual


(e.g. if (x = 10)). O sinal de igual simples um operador de designao e coloca o valor
10 na varivel x. Ao contrrio o sinal de igual duplo (e.g. if (x == 10)), que um
operador de comparao, verifica se x igual a 10 ou no. A ltima sentena s
verdadeira se x for igual a 10, mas a anterior sempre ser verdadeira.
Isto ocorre por que a linguagem C (na qual o Arduino baseado) atribui um
valor sentena (x=10) do seguinte modo: 10 colocado na varivel x (lembre o sinal
de igual simples um operador de designao), ento x agora contm 10. Ento o
condicional if atribui um valor a 10, que ser sempre verdadeiro (TRUE), desde que
nmeros diferentes de zero so sempre equiparados a verdadeiro. Consequentemente,
if (x = 10) ser sempre verdadeiro, que no o que pretendemos quando usamos um
if. Adicionalmente o valor 10 ser guardado na varivel x que tambm no o que
pretendemos.
if tambm pode ser usado como parte de uma estrutura de controle
ramificada atravs da construo if else.
if / else
if/else permite um controle maior sobre o fluxo de cdigo do que a sentena if
bsica, tornando possvel que mltiplos testes sejam agrupados. Por exemplo, uma
entrada analgica poderia ser verificada e uma ao especfica seria tomada se o valor
de input fosse menor que 500 e outra ao seria tomada se o input fosse 500 ou mais.
O cdigo seria assim:
if (pinFiveInput < 500) {
// ao A (Condio Verdadeira)

} else {
// ao B (Condio Falsa)
}
else pode preceder outro teste if, e assim mltiplos testes, mutuamente
exclusivos, podem ser realizados ao mesmo tempo.
Cada teste precede o prximo at que um teste com valor verdadeiro
encontrado. Quando um teste com valor verdadeiro encontrado o seu bloco de cdigo
associado executado e ento o programa salta para a sequncia aps todo o bloco
if/else. Se a nenhum teste atribudo o valor verdadeiro o bloco que estiver no else
sozinho executado, se houver algum.
Note que um bloco else if pode ser usado com ou sem um bloco else final. Um
nmero ilimitado destes ramos else if permitido.
if (pinFiveInput < 500) {
// faa a coisa A
} else if (pinFiveInput >= 1000) {
// faa a coisa B
} else {
// faa a coisa C
}
?: - Operador ternrio
Uma operao ternria ou 3-ria uma operao com trs operandos. Uma
operao ternria uma funo com trs variveis de entrada. Em linguagem de
programao representa uma expresso condicional.
Sintaxe:
<condio> ? <operao 1> : <operao 2>;
Essa expresso avalia para <operao 1> se a <condio> for verdadeira.
Caso contrrio, avalia para a <operao 2>.
O uso de um operador ternrio para representar uma expresso condicional foi
antecipado pela linguagem ALGOL, que permitia construes se-ento-seno em
expresses, como em:
a := if x >= 0 then x else -x.
Em Wiring: a = if x >= 0 x; else -x;, ou, a = (x >= 0 ? x : -x);
O operador ternrio deve ser utilizado em situaes onde a operao
condicional seja simplesmente uma validao de verdadeiro ou falso, onde somente
teremos um nico retorno em qualquer que seja a condio.
for
A sentena for utilizada para repetir um bloco de cdigo delimitado por
chaves. Um contador com incremento normalmente usado para controlar e finalizar o
loop. A sentena for til para qualquer operao repetitiva, e frequentemente usada
com arrays para operar em conjuntos de dados ou de pinos.

H trs partes no cabealho do for:


for (inicializao; condio; incremento) {
//sentena(s) ou comando(s);
}
A inicializao ocorre primeiro e apenas uma vez. Cada vez que o circuito
executado a condio verificada; se for verdadeira o bloco de cdigo e o incremento
so executados, e ento a condio testada novamente. Quando a condio se torna
falsa o circuito termina.
Dica de programao: Na linguagem C o comando for muito mais flexvel do
que em algumas outras linguagens de programao, incluindo BASIC. Qualquer dos
elementos do cabealho pode ser omitido, embora os ";" (ponto e vrgula) sejam
necessrios. Qualquer destes elementos tambm podem ser substitudos por qualquer
sentena vlida em C com varveis no correlatas. Estes tipos no usuais de sentenas
for as vezes podem ser a soluo para alguns problemas raros de programao.
while
O while far com que o bloco de cdigo delimitado entre chaves se repita
continua e indefinidamente at que a expresso entre parntesis () (condio) se
torne falsa. Algo tem que provocar uma mudana no valor da varivel que est sendo
verificada ou o cdigo vai sempre ficar dando voltas dentro do while. Isto poderia ser o
incremento de uma varivel ou uma condio externa como o teste de um sensor.
Syntax:
while(expresso){
// cdigo
}
Parmetros
Expresso ou Condio Uma sentena booleana em C que possa ser
verificada como verdadeira ou falsa.
Exemplo:
var = 0;
while(var < 200) {
// algum cdigo que se repete 200 vezes
var++;
}
do while
O do funciona da mesma maneira que o loop while, com a exceo de que a
condio testada no final do bloco de cdigo. Enquanto no while, se a condio for
falsa, o bloco de cdigo no ser executado, no do ele sempre ser executado pelo
menos uma vez.
do {
// bloco de cdigo
} while (condio);
Exemplo:

do {

delay(50);
// espera para que os sensores se estabilizem
x = readSensors(); // verifica o sensor
} while (x < 100);
switch / case
Do mesmo modo que as sentenas if, as switch / case controlam o fluxo dos
programas. switch/case permite ao programador construir uma lista de casos dentro
de um bloco delimitado por chaves. O programa checa cada caso com a varivel de
teste e executa o cdigo se encontrar um valor idntico.
switch/case um pouco mais flexvel que uma estrutura if/else de modo que o
programador pode determinar se a estrutura switch deve continuar checando por
valores idnticos na lista dos casos aps encontrar um valor idntico. Se a sentena
break no encontrada aps a execuo do bloco de cdigo selecionado por um dos
casos, ento o programa vai continuar a checar por mais valores idnticos entre os
casos restantes. Se uma sentena break encontrada o cdigo sai da estrutura do
mesmo modo que em uma construo if/else if.
Parmetros:
var a varivel para a qual voc busca valores idnticos
default se nenhuma outra condio for satisfeita o cdigo que est no
default executado
break sem o break a sentena switch vai continuar checando as outras
sentenas case para qualquer outro possvel valor idntico. Se algum for
encontrado ser executado do mesmo modo, o que pode no ser o que voc
deseja. Break indica ao switch para parar de procurar por outros valores
idnticos e sai da sentena switch.
Exemplo:
switch (var) {
case 1:
//faa alguma coisa quando var == 1
break; // break is optional
case 2:
//faa alguma coisa quando == 2
break;
default:
// se nenhum valor for idntico, faa o default
// default opcional
}
break
O comando break utilizado para sair de um bloco do, for, ou while (Lao de
repetio), se sobrepondo condio normal de verificao. Tambm usado para sair
de uma sentena switch.
Exemplo:
for (x = 0; x < 255; x ++)
{
digitalWrite(PWMpin, x);
sens = analogRead(sensorPin);

if (sens > threshold){


x = 0;
break;
}
delay(50);

// checar a deteco por um sensor

continue
O continue usado para saltar pores de cdigo em blocos do, for, ou while
(Lao de repetio). Ele fora com que o cdigo avance at o teste da condio,
saltando os demais.
Exemplo:
for (x = 0; x < 255; x ++) {
if (x > 40 && x < 120){
continue;
}
digitalWrite(PWMpin, x);
delay(50);
}

// criar saltos de execuo

return
Finaliza uma funo e retorna um valor, se necessrio.
Sintaxe:
return; (ou)
return valor; // ambas formas so vlidas
Parmetros:
valor: alguma varivel ou constante
Exemplos: Uma funo para comparar o valor de um sensor com um limite.
int checkSensor(){
if (analogRead(0) > 400) {
return 1;
} else{
return 0;
}
}
A palavra-chave return til para testar uma seo de cdigo sem ter que
transformar em comentrio um grande e possivelmente defeituoso bloco de cdigo.
void loop(){
// aqui, uma brilhante ideia de programao
return;
// restante do bloco de cdigo no funcional este cdigo nunca ser
executado
}
goto

Transfere o fluxo do programa para um outro ponto etiquetado.


Sintaxe:
label: // Definio da etiqueta.
goto label; // Envia o fluxo do programa para etiqueta definida.
Dica: O uso do goto desencorajado em programao C e inclusive alguns
autores afirmam que o goto nunca realmente necessrio, mas usado com cautela
pode simplificar alguns programas. A razo pela qual muitos programadores
desaprovam seu uso que com o uso indiscriminado fcil de se criar um programa
com um fluxo indefinido e muito difcil de ser depurado.
No entanto, h casos em que o goto pode ser til e simplificar o cdigo. Uma
destas situaes provocar uma sada de um grupo de loops aglutinados ou de blocos
lgicos if com uma determinada condio.
Exemplo:
for(byte r = 0; r < 255; r++){
for(byte g = 255; g > -1; g--){
for(byte b = 0; b < 255; b++){
if (analogRead(0) > 250){ goto bailout;}
// mais declaraes ou comandos...
}
}
}
bailout:

ELEMENTOS DE SINTAXE
; (ponto e vrgula)
Usada para terminar ou finalizar uma sentena ou linha e ainda utilizado para
separar os parmetros dentro da definio do comando for.
Exemplo:
int a = 13; (Trmino da linha de atribuio)
Dica: Esquecer de finalizar uma linha com ponto e vrgula causa um erro de
compilao. O texto sobre o erro pode ser bvio e se referir a um ponto e vrgula
faltando, ou no. Se ocorrer um erro de compilao impenetrvel ou aparentemente
ilgico uma das primeiras coisas a checar um ponto e vrgula faltando na vizinhana,
precedendo a linha indicada pelo compilador.
{} (Chaves)
Chaves so uma parte essencial da linguagem de programao Wiring e C. Elas
so usadas em muitas construes diferentes, descritas abaixo, e isto pode algumas
vezes ser confuso para iniciantes.
Uma abertura de chave "{" deve sempre ser seguida por um fechamento de
chave "}". Frequentemente nos referimos a esta condio como equilbrio entre as
chaves. A IDE (integrated development environment ou ambiente de desenvolvimento

integrado) do Arduino inclui uma caracterstica prtica para checar o uso das chaves.
Apenas com o selecionar de uma chave ou clicar no ponto imediatamente posterior faz
com que sua companheira lgica seja destacada.
Programadores principiantes e programadores vindos das linguagens C e do
BASIC frequentemente consideram o uso das chaves confuso. Afinal as mesmas chaves
substituem a sentena RETURN em uma sub-rotina (funo), a sentena ENDIF em uma
condicional e a sentena NEXT em um FOR.
Por que o uso das chaves to variado, uma boa prtica de programao
digitar o fecha chaves "}" logo aps digitar o abre chaves "{" quando estiver fazendo
uma construo que as requer. Inserir ento alguns ENTER entre as chaves e comece
a digitar o cdigo. Agindo assim suas chaves nunca ficaro desequilibradas.
Chaves desequilibradas causam erros de compilao bastante enigmticos e
que podem ser difceis de rastrear em um programa longo. Por causa de seus usos
variados, as chaves so tambm incrivelmente importantes para a sintaxe de um
programa e mover uma chave, uma ou duas linhas pode alterar completamente o seu
significado.
Os principais usos das chaves:
Funes:
void myfunction(datatype argument){
sentena(s)
}
Loops:
while (expresso booleana) {
sentena(s)
}
do {

sentena(s)
} while (expresso booleana);
for (inicializao; condio de trmino; expresso de incremento) {
sentena(s)
}
Sentenas condicionais:
if (expresso booleana) {
sentena(s)
} else if (expresso booleana) {
sentena(s)
} else {
sentena(s)
}
Nos casos de loops e sentenas condicionais, caso seja utilizada somente uma
linha de comando referente ao loop ou sentena condicional, o uso de chaves {}
dispensvel (no se precisa utilizar), porm importante ter conhecimento das

definies operacionais, para evitar problemas de construo e compilao da


aplicao.
// e /* */ (Comentrios)
Comentrios so linhas no programa que so usados para informar a voc
mesmo ou outras pessoas ou programadores, sobre o modo como o programa foi
constitudo e/ou trabalha. Elas so ignoradas pelo compilador e no so exportadas
para o processador e portanto no ocupam a memria do chip ATmega.
O nico propsito dos comentrios so ajudar a entender (ou relembrar) como o
programa funciona. H dois modos diferentes de marcar uma linha como um
comentrio.
Exemplo:
x = 5;
// Esta uma linha simples de comentrio. Qualquer coisa depois
das barras um
// comentrio at o fim da linha
/* este um bloco de comentrio usado para comentar blocos inteiros de
cdigo */
if (gwb == 0){
// no h problema em uma linha simples dentro de um bloco
de comentrio
x = 3; /* mas outro bloco de comentrio invlido */
}
// no esquea de fechar o bloco de comentrio, eles tm que ser equilibrados
Dica: Quando estiver experimentando com o cdigo, comentar partes do
programa um modo conveniente de remover linhas que podem conter problemas.
Este procedimento mantm as linhas no cdigo mas as transforma em comentrios de
modo que o compilador as ignora. Isto pode ser especialmente til quando tentamos
localizar um problema, ou quando um programa apresenta erros de compilao cujas
explicaes so obscuras ou inteis.
#define
#define um componente muito til da linguagem Wiring e C que permite ao
programador dar um nome a uma constante antes que o programa seja compilado.
Constantes definidas no Arduino no ocupam espao em memria do chip. O
compilador substitui referncias a estas constantes pelo valor definido no momento da
compilao.
Isto pode causar alguns efeitos indesejveis se, por exemplo, um nome de
constante que tenha sido definido por um #define includo em alguma outra
constante ou nome de varivel. Neste caso o texto deve ser substitudo pelo valor (ou
texto) do #define.
Em general, a palavra-chave const prefervel para definir constantes e deve
ser usada em vez de #define.
A sintaxe do #define na linguagem Arduino a mesma da linguagem C:

Sintaxe:
#define <nomeDeConstante> <valor>
Observar que o # necessrio.
Exemplo:
#define ledPin 3
// O compilador vai substituir qualquer meno a ledPin pelo valor 3 no
momento da compilao.
Dica: No h ponto e vrgula aps a declarao #define. Se voc incluir um o
compilador vai lanar erros crticos no final do programa.
#define ledPin 3;

// isto um erro

Do mesmo modo o compilador gerar erros se aps o #define houver um =.


#define ledPin = 3 // isto tambm um erro
Ver:
const ( um qualificador de varivel que define a varivel como apenas para
leitura, no podendo ser alterada durante a execuo da aplicao).
Constants (So Contantes Inteiras utilizadas diretamente no cdigo da
aplicao).
#include
#include usado para incluir outras bibliotecas no seu programa. Isto permite
ao programador acessar um grande nmero de bibliotecas padro da linguagem Wiring
ou C (grupos de funes pr-definidas), e tambm s bibliotecas desenvolvidas
especificamente para o Arduino.
A pgina principal de referncia para as bibliotecas C AVR (AVR a referncia
aos chips Atmel nos quais o Arduino est baseado) est aqui.
Verifique que #include, de modo similar ao #define, no leva ponto e vrgula no
final.
Exemplo:
Este exemplo inclui uma biblioteca que utilizada para armazenar dados na
memria flash em vez de na memria ram. Isto economiza espao na memria ram
para as necessidades de memria dinmica e torna o uso de grandes tabelas mais
prtico.
#include <avr/pgmspace.h>
prog_uint16_t myConstants[] PROGMEM = {0, 21140, 702 , 9128, 0, 25764,
8456,
0,0,0,0,0,0,0,0,29810,8968,29762,29762,4500};

OPERADORES ARITMTICOS
= (Atribuio)
Operador de atribuio utilizado para guardar ou atribuir um determinado
valor em uma varivel.
+ (Adio)
Operador de Adio (Valores numricos) ou Concatenao (Valores do tipo char
ou string).
- (Subtrao)
Operador de Subtrao.
* (Multiplicao)
Operador de Multiplicao.
/ (Diviso)
Operador de Diviso.
% (Resto da diviso)
Operador de Mdulo, retorna o valor do resto da diviso.

OPERADORES DE COMPARAO
So os operadores utilizados para realizar operaes de comparaes lgicas
entre variveis, valores e/ou estados gerados pelos pinos ou afins definidos na
aplicao, so eles:
== (igual a)
Realiza da verificao de igualdade lgica, Ex.: x == y (x igual a y).
!= (diferente de)
Realiza da verificao de desigualdade ou diferena lgica, Ex.: x != y (x no
igual a y).
< (menor que)
Realiza da verificao de menor que lgico, Ex.: x < y (x menor que y).
> (maior que)
Realiza da verificao de maior que lgico, Ex.: x > y (x maior que y).
<= (menor ou igual a)
Realiza da verificao de menor que ou igual lgico, Ex.: x <= y (x menor ou
igual a y).
>= (maior ou igual a)

Realiza da verificao de maior que ou igual lgico, Ex.: x >= y (x maior ou


igual a y).

OPERADORES BOOLEANOS
Os operadores booleanos so palavras (reservadas) que tem como objetivo
definir ou informam ao sistema como dever ser feita a combinao entre termos ou
expresses de uma pesquisa, teste ou validao de dados e/ou informaes.
&& (e)
Restringe a pesquisa, equivalendo a expresso: com todas as palavras. Os
resultados devem conter um termo e o outro.
|| (ou)
Aplica a pesquisa, equivalendo a com qualquer uma das palavras. Os
resultados recuperados devem conter um termo ou o outro.
! (no)
Exclui um dos termos da pesquisa, equivalendo a expresso sem a(s)
palavras(s). Em alguns sistemas voc poder encontrar somente o NO ou o E NO.
Os operadores booleanos podem tambm ser usados em expresses
complexas, com mais de dois termos. Nestes casos recomendado o uso de ( e )
(parnteses), para realizar a separao dos termos a serem testados logicamente.
Ex.: ( valA || valB ) && valC.

OPERADORES DE PONTEIROS
Ponteiros so objetos ou variveis de apontamento de um tipo de dado que se
refere a um endereo na memria RAM, acessando atravs do mesmo o contedo do
endereo de memria diretamente, simplesmente a implementao do tipo de
referncia. Esse endereo um endereo de memria ou simplesmente o ndice
numrico da posio em memria de um determinado dado/informao. Atravs de
ponteiros se pode utilizar praticamente reas de memria alm das definies de tipo e
estrutura que so permitidas pelo processador.
* (Operador de dereferncia)
um operador unrio que utilizado para fazer a dereferncia, est a forma
de referir o valor contido no endereo armazenado. Vale a ressaltar que o operador de
dereferncia utiliza o smbolo *, que o mesmo utilizado para a multiplicao, porm
no caso dos ponteiros a declarao do tipo ponteiro utiliza esse mesmo smbolo.
Sintaxe: <tipo> *<nome da varivel>;
Ex.: int *pi; (ponteiro para tipo inteiro).
char *pc; (ponteiro para tipo char caractere).
& (Referncia do operador) (Operador de endereo)

O operador de endereo ou referncia do operador utilizado para determinar o


endereo de uma varvel na memria.
Sintaxe: <varivel> = &<ponteiro>;
Ex.: val1 = &ptr1;

OPERADORES DE BITS
Os operadores de bits podem manipular os bits de operandos integrais
(operaes do tipo: byte, char, short, int e long), mas no os operandos de ponto
flutuante, so eles os operadores:
& (operador de bits AND) (E sobre bits)
Os bits no resultado so configurados como 1 se os bits correspondentes nos
dois operandos forem ambos 1.
| (operador de bits OR) (OU inclusivo sobre bits)
Os bits no resultado so configurados como 1 se, pelo menos, um dos bits
correspondentes nos dois operandos for 1.
^ (operador de bits XOR) (OU exclusivo sobre bits)
Os bits no resultado so configurados como 1 se exatamente um dos bitis
correspondentes nos dois operandos for 1.
~ (operador de bits NOT) (complemento de bits)
Todos os bits 0 so configurados como 1, e todos os bits 1 so configurados
como 0.
<< (desvio esquerda) (deslocamento de bits para a esquerda)
Desloca os bits do primeiro operando esquerdo pelo nmero de bits
especificado pelo segundo operando; preenche a partir da direita com 0 (zeros).
>> (desvio direita) (deslocamento para a direita com sinal)
Desloca os bits do primeiro operando direito pelo nmero de bits especificado
pelo segundo operando. Se o primeiro operando for negativo, os 1 (uns) so
preenchidos a partir da esquerda; caso contrrio, os o (zeros) so preenchidos a partir
da esquerda.
&= (de bits composto AND)
Operador de atribuio sobre bits AND.
|= (de bits composto OR)
Operador de atribuio sobre bits OR inclusivo.

OPERADORES COMPOSTOS
++ (incrementar)

Operador de incremento, pode ser utilizado pr-fixado ou ps-fixado.


No incremento pr-fixado, primeiro realizado o incremento e depois retornado
o novo valor.
No incremento ps-fixado, primeiro retornado o valor depois realizado o
incremento.
Ex.: ++i; (pr-fixado)
i++; (ps-fixado)
-- (decrementar)
Operador de decremento, pode ser utilizado pr-fixado ou ps-fixado.
No decremento pr-fixado, primeiro realizado o decremento e depois
retornado o novo valor.
No decremento ps-fixado, primeiro retornado o valor depois realizado o
decremento.
Ex.: ++i; (pr-fixado)
i++; (ps-fixado)
+= (adio composta)
uma forma abreviada de realizar uma adio.
Ex.: val += 2; (O mesmo que val = val + 2;)
-= (subtrao composta)
uma forma abreviada de realizar uma subtrao.
Ex.: val -= 2; (O mesmo que val = val - 2;)
*= (multiplicao composta)
uma forma abreviada de realizar uma multiplio.
Ex.: val *= 2; (O mesmo que val = val * 2;)
/= (diviso composta)
uma forma abreviada de realizar uma diviso.
Ex.: val /= 2; (O mesmo que val = val / 2;)
%= (Mdulo composto)
uma forma abreviada de realizar o retorno do mdulo da diviso.
Ex.: val %= 2; (O mesmo que val = val % 2;)
&= (Bit a bit E composto)
uma forma abreviada de realizar uma operao bit a bit AND.

Ex.: val &= val2; (O mesmo que val = val & val2;)
|= (Bit a bit OU composto)
uma forma abreviada de realizar uma operao bit a bit OR.
Ex.: val |= val2; (O mesmo que val = val | val2;)

VARIVEIS
Variveis so expresses que voc pode usar em programas para armazenar
valores como a leitura de um sensor em um pino analgico.
Uma varivel um objeto (uma posio, frequentemente localizada na
memria) capaz de reter e representar um valor ou expresso. Enquanto as variveis s
existem em tempo de execuo, elas so associadas a nomes, chamados
identificadores, durante o tempo de desenvolvimento.
Quando nos referimos varivel, do ponto de vista da programao de
computadores, estamos tratando de uma regio de memria (do computador)
previamente identificada cuja finalidade armazenar os dados ou informaes de um
programa por um determinado espao de tempo. A memria do computador se
organiza tal qual um armrio com vrias divises. Sendo cada diviso identificada por
um endereo diferente em uma linguagem que o computador entende.
O computador armazena os dados nessas divises, sendo que em cada diviso
s possvel armazenar um dado e toda vez que o computador armazenar um dado em
uma dessas divises, o dado que antes estava armazenado eliminado. O contedo
pode ser alterado, mas somente um dado por vez pode ser armazenado naquela
diviso.
Para definio, declarao ou nomeao de variveis muito interessante se
utilizar a Notao Hngara (Utilizada para definio de nomes de variveis,
facilitando a identificao do tipo de varivel) ou CamelCase (Utilizada para
definies de nomes de varveis compostas) que so definies a serem utilizadas para
se nomear variveis, assim facilitando sua constituio. Durante as atividades
utilizaremos uma mescla destas definies.
Ex.: int pino1 = 1; // Definio da varivel pino1 para uso da posio 1 no
Arduino.

CONSTANTES
Constantes so valores particulares com significados especficos.
Em linguagens de programao, constantes so usadas em expresses para
representar vrios tipos de valores. Na linguagem de programao Wiring e C existem
regras rgidas para determinar como devem ser escritos estes valores. Normalmente
so utilizados nomes de constantes em caixa alta (MAISCULAS) por conveno, para
diferenciar das variveis.
Constantes Booleanas: So duas constantes utilizadas true e false para
representar estados ligados e desligados. True definido como valores maior ou igual a

1, definido que existe algum sinal. False definido com o valor 0, neste caso falta ou
inexistncia de sinal.
CONSTANTES PR-DEFINIDAS:
As constantes HIGH e LOW so definidas para utilizao de pinos no Arduino
sendo definidos como ligado (HIGH), no caso presena de tenso para alimentao
(Acima de 3 V no pino de 5 V e acima de 2 V no pino de 3,3 V), ou desligado, falta de
tenso para alimentao (LOW).
As constantes INPUT e OUTPUT so definidas para utilizao de pinos de
entrada e sada, conforme especificado na funo pinMode(), as definies dos pinos
pela funo pinMode() realizada dentro da funo setup(), que referencia o
comportamento de cada pino configurado.
A constante LED_BUILTIN definida como o pino 13 (digital) que est
diretamente ligado ao LED que est ligado a um resistor interno na placa do Arduino.
Por fim as definies das constantes true e false que so utilizadas para
informar nveis lgicos que so representados na codificao de aplicativos. Estas
constantes no so escritas em caixa alta (MAISCULAS) e sim sempre em caixa baixa
(MINUSCULAS). O valor para falso sempre definido como 0 (zero), j para true
temos um valor maior ou igual a 1, porm valores como: -1, 2 e -200 so sempre
definidos como verdadeiros.

TIPOS DE DADOS (Variveis podem ser de vrios tipos)


Tipo

Tamanh
o

Descrio

boolean

1 byte Utilizada como flag de testes ou validaes dentro da


(8bits) codificao da aplicao. Somente realiza operaes com
valores true ou false. Este tipo utiliza apenas 1 byte de
memria.

char

1 byte Utilizado para registro de um nico caractere, podendo ser


(8bits) atribudo no momento da declarao ou atravs de um input.
Este tipo utiliza apenas 1 byte de memria. Durante a
atribuio pode se realizar o registro de um caractere literal
(Ex.: val = 'A'; ou val = 'a';), como tambm se utilizando o
decimal inteiro, octal ou hexadecimal do carcter a ser
atribudo.

Byte

1 byte Utilizado para armazenar um nmero sem sinal de 1 byte ou


(8bits) 8 bits, um valor entre 0 (zero) e 255 (duzentos e cinquenta e
cinco).

Int

unsigned
int

2 bytes um tipo primitivo, utilizado para armazenar valores


(16bits) numricos de 2 bytes, de -32.768 a 32.767 ou de -2 15 a 215 - 1,
4 bytes ou de 4 bytes, de -2.147.483.648 a 2.147.483.647 ou -2 31 a 231
(32bits) 1. A quantidade de memria utilizada depender do
microprocessador utilizado.
2 bytes um tipo de inteiro sem sinal, utilizado para armazenar
(16bits) valores inteiro a partir de 0 (zero). Utilizando em memria 2

4 bytes bytes, de 0 a 65.535 ou 216 - 1, ou 4 bytes, de 0 a


(32bits) 4.294.967.295 ou 232 1. A quantidade de memria utilizada
depender do microprocessador utilizado.
long

4 bytes um tipo de inteiro longo, utilizado para armazenar valores


(32bits) inteiros muito grandes, de -2.147.483.648 a 2.147.483.647 ou
-231 a 231 1.

unsigned
long

4 bytes um tipo de inteiro longo sem sinal, utilizado para armazenar


(32bits) valores inteiros muito grandes, de 0 a 4.294.967.295 ou 232 1.

short

2 bytes um tipo inteiro, utilizado para armazenar valores inteiros de


(16bits) -32.768 a 32.767 ou -215 a 215 1.

float

4 bytes um tipo de ponto flutuante, utilizado para armazenar


(32bits) valores com at 7 casas decimais e com sinal, podem
armazenar valores de -3,4028235x1038 at 3,4028235x1038.

double

4 bytes um tipo de ponto flutuante de preciso dupla, utilizado para


(32bits) armazenar valores com at 15 casas decimais e com sinal,
8 bytes podem
armazenar
valores
de
-3,4028235x1038
at
38
(64bits) 3,4028235x10 . Dependendo do microprocessador que se
esteja utilizando ser utilizado 4 ou 8 bytes. (Limitado ao micro
ATMEGA utilizado).

string

utilizado para registro de cadeias de carteres o tamanho


de uma string depender da quantidade de caracteres do tipo
char que so utilizados mais um de fecho que ser \0 ou
0 que define o trmino da cadeia de caracteres, ou ainda
pode ser definida por um vetor de caracteres durante a
atribuio. Ainda temos o tipo Objeto String, porm este tipo
(objeto) necessita de mais memria para definio de uma
varivel.

array

utilizado para registro de uma matriz ou conjunto de


variveis, sempre do mesmo tipo definido, para ter acesso a
cada posio da matriz deve se realizar a identificao do
ndice desejado a se acessado. Toda matriz sempre iniciada
em 0 (zero). Observar que o tamanho definido na atribuio,
ter como acesso ao ltimo elemento sempre o tamanho
menos 1.

void

Utilizado apenas para definio de funes, indicando que a


mesma no retorna nenhum valor aps o processamento.

CONVERSO
char()
Realiza a converso de valor para o tipo char.
Sintaxe: char(x); Onde x uma varivel de qualquer tipo.
Ela retorna um char.

byte()
Realiza a converso de valor para o tipo byte.
Sintaxe: byte(x); Onde x uma varivel de qualquer tipo.
Ela retorna um byte.
int()
Realiza a converso de valor para o tipo int.
Sintaxe: int(x); Onde x uma varivel de qualquer tipo.
Ela retorna um int.
long()
Realiza a converso de valor para o tipo long.
Sintaxe: long(x); Onde x uma varivel de qualquer tipo.
Ela retorna um long.
float()
Realiza a converso de valor para o tipo float.
Sintaxe: float(x); Onde x uma varivel de qualquer tipo.
Ela retorna um float.
Est funo de converso,
microprocessador utilizado.

estar

limitada

preciso

definido

pelo

Variveis de Escopo e Qualificadores


Variveis de Escopo
Estas variveis so definidas fora da funo principal ou qualquer outra,
tambm conhecidas como variveis globais, elas podem ser utilizadas dentro do
mdulo por qualquer funo que necessite dela sem que seja necessria uma definio
ou atribuio, dependo do tipo e da utilizao aps a declarao a mesma dever ser
atribuda para que o contedo seja pr-definido de forma correta evitando que algum
valor aleatrio que se encontro na posio de memria a ser utilizada pela varivel no
retorne para o processamento e gere resultado indevido.
static
Este qualificador de variveis definido para ser utilizado dentro da funo que
a criou, assim sendo no sendo possvel ser utilizada por outras funes. Este tipo de
visibilidade permite que as variveis com este qualificador possam ser criadas com o
mesmo nome em vrias funes, desde que todas sempre utilizem a qualificao do
tipo static.
volatile

Este qualificador de variveis definido para ser utilizado para definir uma
diretiva de compilao, realiza a definio da forma como acontecer a armazenagem
da varivel, podendo ser na RAM ou em registradores. Ela pode ser definida como
global, para uso em todas as funes da aplicao, em casos que a alterao do valor
definido da varivel acontea dentro das funes deve se utilizar este qualificador.
const
Este qualificador define que a varivel no ser alterada durante a execuo da
aplicao, este tipo definido como sendo apenas para leitura por conta do valor da
varivel no poder ser alterado durante o tempo de execuo. No caso em que a
varivel esteja em algum ponto ou parte do cdigo venha a ser alterado seu valor,
durante o processo de compilao, ser apresentado uma mensagem de erro, por conta
dessa alterao de valor. Em muitos casos o qualificador const melhor e mai utilizado
do que #define

Utilidades
sizeof()
A funo sizeof() utilizada para definir a quantidade de memria necessria
ou ser alocada para uma determinada varivel.
Sintaxe: sizeof(varivel)
Parmetros: Qualquer tipo de varivel ou matriz (por exemplo: int, float, byte,
char)
O operador sizeof() til para trabalhar com matrizes onde seja necessrio
modificar o tamanho da matriz sem quebrar em outras partes da aplicao.
PROGMEM
uma palavra-chave (reservada) que define o modificador de varivel para
armazenamento de dados em uma memria flash, em vez da memria principal do
Arduino. Para utilizao deste modificador necessrio realizar o uso do elemento
#include para o uso da biblioteca pgmspace.h
Sintaxe: const <TipoDaVarivel> <nomeDaVarivel> [] PROGMEM = {data0,
data1, data3 ...};

FUNES:
Entrada e sada digital
pinMode (pin, mode)
Funo utilizada para configurao de cada pino a ser utilizado no Arduino,
permitindo a definio de cada pino como sendo de entrada ou sada.
Sintaze: pinMode( <pino>, <modo> )
Parmetros:pino Nmero do pino a ser definido para uso.

modo Forma como o pino ser utilizado (INPUT, OUTPUT ou


INPUT_PULLUP).
Retorno: Est no retorna nenhum valor.
digitalWrite (pin, value)
Realiza a escrita (definio) no pino digital como sendo um valor ALTO (HIGH)
ou BAIXO (LOW).

digitalRead (pin)

Entrada e sada analgica


analogReference (type)

analogRead (pin)

analogWrite (pin, value) PWM

Entrada e sada avanada


tone ()

noTone ()

shiftOut (dataPin, clockPin, bitOrder, value)

shiftIn ()

pulseIn (pin, value)