Você está na página 1de 41

Introdução à plataforma Arduino

08/12/16
Hardware
Código
 Estruturas básicas
 Programa executa em sequência as instruções, funções
e procedimentos:

procedimento1;
variável = função;
procedimento2;

 Precisamos especificar para o compilador o término de


uma linha;
 Utilizamos ponto-e-vírgula (;) para isto.
 Ex.: var1=10 (Errado!)
 Correto: var1=10;
Código
 Estruturas básicas
 Comentários:

//Comentário em linha única

/* Início do bloco de comentário


Término do bloco de comentário */

Comentários não fazem parte do programa.


Código
 Estruturas básicas
 Bloco de código:
{ //Abre-chave indica início
....
....
....
....
} //Fecha-chave indica final
Código
 Token
 Precisamos especificar para o compilador o término de
uma linha;
 Utilizamos ponto-e-vírgula (;) para isto.
 Ex.: var1+=10 (Errado!)
 Correto: var1+=10;

 Comentários
 Linha única: //
 Multi-linha: /* .... */
Código
 Estruturas básicas
 Teste condicional
if (expressão) {
.... Este bloco de código será executado
.... se o que estiver dentro do parênteses
.... for verdadeiro
....
}
Obs.: para a linguagem C, “falso” = 0 e “verdadeiro” é
qualquer número diferente de zero.
Obs.: em testes e estruturas de repetição normalmente não
utilizamos o ponto-e-vírgula, pois isso faria com que o teste
fosse “finalizado” antes de iniciar o bloco de código.
Código
 Desvio condicional
 If (condição) {
//Código que será executado se a condição for verdadeira
}
else {
//Código que será executado se a condição for falsa
(opcional)
}
Código
 Estruturas básicas
 void setup() {
//Bloco de código que será executado uma única vez
}
 void loop() {
//Bloco de código que será executado indefinidamente
}
Código
 Funções – entrada / saída digital
 pinMode(pino,tipo); //Configura o pino com o tipo
selecionado
 Tipo: INPUT (entrada), INPUT_PULLUP (entrada com pull-up
interno – veremos depois) e OUTPUT (saída)
 digitalWrite(pino,estado); //Escreve um estado em um
pino
 Estado: HIGH ou 1 (ligado), LOW ou 0 (Desligado)
 digitalRead(pino); //Retorna o valor de um pino digital
Código
 Resistor de pull-up externo
Exercício
 Escrever o primeiro programa que irá fazer um LED
ligado ao pino 9 piscar uma vez, por um tempo de
1s, se um botão ligado ao pino 6 for pressionado.
Variáveis
 Declaração
 Variável única:
 tipo variável = valor inicial;
 Ex.: int var1 = 0;
 Várias variáveis:
 tipo variável1 = valor inicial, variável2 = valor inicial, ..., variável
3=valor inicial;
 Ex.: char var1, var2, var3;
Variáveis
 Inteiras (8 bits)
 byte (sem sinal – 0 a 255)
 char (com sinal – -128 a 127) – normalmente utilizado
para representar caracteres de acordo com a tabela
ASCII
 unsigned char (idem ao byte)

 Especial
 void (valor nulo) – somente para declaração de
procedimentos ou funções
Variáveis
 Inteiras (16 bits)
 int (com sinal – -32.768 a 32.767)
 short (idem ao int)
 unsigned int (sem sinal – 0 a 65.535)
 word (idem ao unsigned int)

 Inteiras (32 bits)


 long (com sinal – -2.147.483.648 a 2.147.483.647)
 unsigned long (sem sinal – 0 a 4.294.967.295)
Variáveis
 Ponto flutuante (32 bits)
 float (com sinal – -3.4028235E+38 a 3.4028235E+38)
 Cuidado com a matemática de ponto flutuante!
 Normalmente limitado entre 6 a 7 dígitos (ex.: 0.00003 ou
1135.04)
 Não existem modificadores de ponto flutuante na plataforma
Arduino (em outros compiladores isto às vezes é possível)
 Lógico (8 bits)
 boolean (true ou false)
 Cuidado com o tamanho! O compilador ocupa 1 byte de
memória para cada variável (utilizando assembly é possível
realmente “escovar bits”)
Operadores
 Atribuição
 =
 Ex.: var1 = 30;

 Aritmética
 *,/,+,-, %
 Ex.: var1 = 3*2; (resultado: var1 é igual a 6)
 var2 = 15%2; (resultado: var2 é igual a 1)
Operadores
 Comparação
 == (igual a – CUIDADO!)
 != (diferente de)
 < (menor que)
 > (maior que)
 <= (menor igual a)
 >= (maior igual a)

 Lógicos
 && (E lógico – ex.: if ((a!=0) && (b>10))
 || (OU lógico)
Operadores
 Compostos
 ++ (incremento)
 -- (decremento)
 += (adição composta)
 -= (subtração composta)
 *= (multiplicação composta)
 /= (divisão composta)

 Ex.: var1 = var1 + 10;  var1+=10;


 Ex.: var2 = var2+1;  var2++;
Exercício
 Escrever um programa que ligue um LED em uma
saída digital, ligada ao pino 8, para cada uma das
condições:
 A) Um botão ligado ao pino 3 e um botão ligado ao pino 4
forem pressionados simultaneamente;
 B) Um botão ligado ao pino 3 ou um botão ligado ao pino
4 forem acionados;
Loop de repetição
for (x,y,z) {
}

x -> Código executado uma vez antes de iniciar o


bloco de código;
y -> Código testado ao término do bloco de código;
z -> Código executado ao término do bloco de código.
Loop de repetição
Exemplo:

int i=0; //Declara uma variável inteira com valor inicial


nulo

for (i=0,i<4,i++) {
//Este código será executado quatro vezes!
}
Exercício
 Escrever um programa que faça piscar 3 vezes um
LED ligado ao pino 8, se dois botões ligados aos
pinos 3 e 4 forem acionados simultaneamente.
Operadores
 Bit a bit
 & (E bit a bit)
 | (OU bit a bit)
 ^ (XOR bit a bit)
 ~ (complemento bit a bit)
 << (rotação à esquerda)
 >> (rotação à direita)
Ports
Registradores PORTx e DDRx
 DDRx – Define o tipo do pino (entrada ou saída)
 0 -> Entrada
 1 -> Saída
DDRD
D7 D6 D5 D4 D3 D2 D1 D0
0 1 1 0 0 1 0 0

Na linguagem C, podemos configurar desta maneira:


DDRD = B01100100;
Registradores PORTx e DDRx
 PORTx – Duas funções:
 Pino é saída: liga (1) ou desliga (0) o pino
 Pino é entrada: ativa (1) ou desativa (0) o resistor de
pull-up interno.

PORTD
D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 1 1 0 0 1

Na linguagem C, podemos configurar desta maneira:


PORTD = B00111001;
Código
 Resistor de pull-up interno
Código
 Funções lógicas elementares
 Operador &
Código
 Funções lógicas elementares
 Operador |
Código
 Funções lógicas elementares
 Operador ^
Código
 Funções lógicas elementares
 Operador ~
Código
 Rotação bit-a-bit
 Operadores << e >>

 Ex.: VAR1 << 3


VAR1
B7 B6 B5 B4 B3 B2 B1 B0
1 0 0 0 1 0 1 1

 Após rotação:

VAR1
B7 B6 B5 B4 B3 B2 B1 B0
0 1 0 1 1 0 0 0
Código
 Diretivas
 #include (utilizado para incluir determinada biblioteca)
 Exemplos: <Servo.h>, <math.h>, <stdio.h>
Código
 Diretivas
 #define (utilizado para definir um valor que será
substituído no código)
 Ex.: #define led1 13  Ao digitar led1 no código, o
mesmo substituirá por 13 durante a compilação
Código
 Uso de diretivas para otimização de código
 #define set_bit(X,Y) X|=(1<<Y)
 #define clear_bit(X,Y) X&=~(1<<Y)
 #define inv_bit(X,Y) X^=(1<<Y)
 #define test_bit(X,Y) X&(1<<Y)

 Ex.: ligar o pino 5 do Arduino:


set_bit(PORTD,5);
Resultado:
PORTD|=(1<<5);
Exercício
 Reescrever um programa que faça piscar 3 vezes
um LED ligado ao pino 8, se dois botões ligados aos
pinos 3 e 4 forem acionados simultaneamente.
Utilize as diretivas. Compare o tamanho do código
gerado.
Comunicação paralela vs serial
 Paralela:
Comunicação paralela vs serial
 Serial:
Comunicação paralela vs serial
 RS-232 assíncrono:
Código
 Funções – Comunicação serial (porta COM
emulada)
 Serial.begin(baud rate); //Inicializa a porta COM
 Serial.print(expressão); //Imprime uma sequência de
//caracteres
 Serial.println(expressão);//Imprime uma sequência de
//caracteres e uma nova linha ao final

Você também pode gostar