Você está na página 1de 27

Instituto Federal do Espírito Santo

Campus Vitória
Curso Superior em Engenharia Elétrica

Prof. Dr. Leandro Bueno


Disciplina: Sistemas Embarcados
Programação com Arduino
Programação com Arduino
Programação com Arduino
Programação com Arduino

Entradas e Saídas Digitais


Exemplo:


– Configuração:
● pinMode(pin,MODE) int val;
– pin → número do pino
void setup(){
– MODE → INPUT, OUTPUT,
INPUT_PULLUP pinMode(13,OUTPUT);
– Saída de dados:
pinMode(8,INPUT_PULLUP);
● digitalWrite(pin,Val)

– pin → número do pino }


– Val → HIGH ou LOW void loop(){
– Entrada de dados:
● Y = digitalRead(pin)
val = digitalRead(8);
– pin → número do pino digitalWrite(13, val);
– Y → valor lido (HIGH ou LOW)
}
Programação com Arduino


Acesso direto a pinos
– A placa arduino UNO utiliza 3 portas para acionar os
terminais da placa:

B – aciona os pinos digitais 8 a 13

C – aciona as portas analógicas (também podem ser
os pinos digitais 14 a 19)

D – aciona os pinos digitais 0 a 7
Programação com Arduino

Acesso direto a pinos
– A placa arduino MEGA utiliza 11 portas para acionar os terminais da placa:

A – aciona os pinos digitais 22 a 29

B – aciona os pinos digitais 10 a 13 e 50 a 53

C – aciona os pinos digitais 30 a 37

D – aciona os pinos digitais 18 a 21 e 38

E – aciona os pinos digitais 0 a 3 e 5

F – aciona os pinos analógicos 0 a 7 (também podem ser os pinos digitais 54 a 61)

G – aciona os pinos digitais 4 e 39 a 41

H – aciona os pinos digitais 16, 17 e 6 a 9

J – aciona os pinos digitais 14 e 15

K – aciona os pinos analógicos 8 a 15 (também podem ser os pinos digitais 62 a 69)

L – aciona os pinos digitais 42 a 51
Programação com Arduino

Acesso direto a pinos
– A placa arduino DUE utiliza 11 portas para acionar os terminais da placa:

A – aciona os pinos digitais 22 a 29

B – aciona os pinos digitais 10 a 13 e 50 a 53

C – aciona os pinos digitais 30 a 37

D – aciona os pinos digitais 18 a 21 e 38

E – aciona os pinos digitais 0 a 3 e 5

F – aciona os pinos analógicos 0 a 7 (também podem ser os pinos digitais 54 a 61)

G – aciona os pinos digitais 4 e 39 a 41

H – aciona os pinos digitais 16, 17 e 6 a 9

J – aciona os pinos digitais 14 e 15

K – aciona os pinos analógicos 8 a 15 (também podem ser os pinos digitais 62 a 69)

L – aciona os pinos digitais 42 a 51
Programação com Arduino

Acesso direto a pinos
– A placa arduino DUE utiliza 4 portas para acionar os terminais da
placa:

A – aciona os pinos digitais 0, 1, 4, 10, 16 a 19, 23, 24, 31, 42, 43,
54 a 61(entradas analógicas 0 a 7), 68 (CANRX), 69 (CANTX), 70
(SDA1), 71 (SCL1)

B – aciona os pinos digitais 2, 13, 20 a 22, 52, 53, 62 a 65
(entradas analógicas 8 a 11) e 66 e 67 (Saídas analógicas 0 e 1)

C – aciona os pinos digitais 3 a 5 a 10, 33 a 51

D – aciona os pinos digitais 11, 12, 14, 15, 25 a 30, 32
– O pino 4 está ligado ao pino PA29 e ao pino PC26
– O pino 10 está ligado o pino PA28 e ao pino PC29
Programação com Arduino

Acesso direto a pinos
– O acesso direto aos pinos é configurado através de 3
registros na família ATMEGA para cada porta, onde X deve
ser substituído pela letra da porta

DDRX – Registro de direção da porta X – Define quais
pinos da porta são entrada ou saída (1 → saída, 0 →
entrada)

PORTX – Registro de saída da porta X – Configura o
valor que será apresentado no pino

PINX – Registro de entrada da porta X – Usado para
leitura dos valores presentes na porta X
Programação com Arduino

Acesso direto a pinos
– O acesso direto aos pinos é configurado através de um conjunto
mínimo de 9 registros no processador SAM3X para cada porta, onde X
deve ser substituído pela letra da porta

PIOX->PIO_PER – Desabilita outros periféricos e habilita função IO
– PIO Enable register

PIOX->PIO_PDR – Desabilita a função IO
– PIO Disable Register

PIOX->PIO_OER – Configura pino como saída (1)
– PIO Output Enable Register

PIOX->PIO_ODR – Configura pino como entrada (1)
– PIO Output Disable
Programação com Arduino

Acesso direto a pinos
– O acesso direto aos pinos é configurado através de um conjunto mínimo de 9
registros no processador SAM3X para cada porta, onde X deve ser substituído pela
letra da porta (continuação)

PIOX->PIO_SODR – Escreve nível alto no pino selecionado (1)
– PIO Set Output Data Register

PIOX->PIO_CODR – Escreve nível baixo no pino selecionado (1)
– PIO Set Output Data Register

PIOX->PIO_PDSR – Lê o estado da porta
– PIO Pin Data Status Register

PIOX->PIO_PUDR – Desabilita resistores internos de Pull-Up (1)
– PIO Pull Up Disable Register

PIOX->PIO_PUER – Habilita resistores internos de Pull-Up (1)
– PIO Pull Up Enable Register
Programação com Arduino

Acesso direto a pinos
– Desvantagens do acesso direto aos pinos:

Diminui a portabilidade entre placas com diferentes modelos de
microcontrolador

Dificulta a leitura do código desenvolvido

Aumenta a possibilidade de erros configuração, no caso da
configuração usando os registradores
– Vantagens do acesso direto aos pinos:

Aumento da velocidade de acesso aos pinos

Possibilidade de alterar o valor de mais de um pino
simultaneamente

Pode reduzir a utilização de memória de programa
Programação com Arduino


Entradas Analógicas
– UNO – 6 entradas de 10 bits (inteiro de 0 a 1023)
– MEGA – 16 entradas de 10 bits (inteiro de 0 a 1023)
– DUE – 14 entradas de 10 bits (inteiro de 0 a 1023) ou
12 bits (inteiro de 0 a 4095)

Saídas analógicas
– UNO – 0
– MEGA – 0
– DUE – 2 saídas de 12 bits
Programação com Arduino

Conversão Analógico/Digital (ADC)
– VAL = analogRead(pin)
● VAL → Valor lido (0 – 1023)
● Pin → número da entrada analógica

– analogReference(MODO)
● Configura o maior valor de entrada do conversor A/D de
acordo com MODO
● DEFAULT → tensão de alimentação (5V no UNO/MEGA)
● INTERNAL → tensão de referência interna de 1,1V (UNO)
● INTERNAL1V1 → tensão de referencia interna de 1,1V (MEGA)
● INTERNAL2V56 → tensão de referencia interna de 2,56V
(MEGA)
● AR_DEFAULT → tensão de referencia padrão de 3,3V (DUE)
Programação com Arduino


As saídas “analógicas” do
Arduino utilizam a
modulação PWM para
variar o valor médio da
tensão de saída

Os Arduinos UNO e MEGA
não possuem conversor
Digital / Analógico

O Arduino DUE possui
duas saídas de conversor
Digital / Analógico
Programação com Arduino

Saídas PWM (analógicas) ● analogWrite(Pin, valor)
– Frequências da saída PWM: ● Pin → número da saída PWM

UNO:
● Valor → valor entre 0 e 255
– 490 Hz nas saídas 3, 9, 10 e 11
– 980 Hz nas saídas 5 e 6 (4095) que representa o ciclo

MEGA: de trabalho da saída
– 490 Hz nas saídas 2, 3, 5, a 12 ●
Exemplo:
e 44 a 46 int val;
– 980 Hz nas saídas 4 e 13 void setup(){

DUE: }
void loop(){
– 1000 Hz nas saídas 2 a 13
val = analogRead(0);
– Resolução: val = val>>2;

UNO e MEGA: 8 bits analogWrite(5, val);
}

DUE: 8 ou 12 bits
Exercício


Utilizando o Arduino, criar um programa que acione um
LED com frequência controlada por um potenciômetro. A
frequência de acionamento deve variar entre
aproximadamente 0,25 e 2 Hz

Amplie o programa anterior para que possa ser possível
acionar dois LED com frequências independentes e
controladas por dois potenciômetros

Altere os programas anteriores de forma que o
acionamento dos LEDs seja gradual e não ON-OFF
Programação com Arduino


Porta serial Assíncrona usada para comunicação entre o
Arduino e o PC, ou outro Arduino

Os parâmetros dos dispositivos conectados precisam ser
iguais para que a comunicação ocorra

A porta serial é um objeto que é instanciado por padrão
como Serial e não necessita de declaração, apenas
configuração

No caso das placas MEGA e DUE, existem mais portas
seriais que são instanciadas como Serial1, Serial2 e
Serial3, além de Serial
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos (funções)


associados
– Serial.begin(BAUD) /
Serial.begin(BAUD,CONFIG) → configura a
comunicação serial para a velocidade BAUD com 8 bits da
dados, sem paridade e um stop bit. Outras configuraçao
podem ser passadas através do valor de CONFIG
(SERIAL_5N1, SERIAL_6N1, SERIAL_7N1,
SERIAL_8N1*, etc)
– Serial.end() → Desativa a comunicação serial e os
pinos retornam às funções de entrada/saída digital
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos


(funções) associados
– Serial.available() → Retorna o número de
caracteres disponíveis no buffer de entrada (até 64
bytes)
– Serial.availableForWrite() → Retorna o
número de caracteres disponíveis para escrita no buffer
de saída
– Serial.flush() → Aguarda o término do envio dos
dados do buffer de saída
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos (funções)


associados
– Serial.print(val[,formato]) → Envia dados para
a porta serial em formato de texto ASCII
● val → valor a ser escrito
● formato → (opcional) especifica o formato do
número a ser escrito (BIN, OCT, DEC*, HEX)
– Serial.println(val[,formato]) → Similar a
print, mas ao final do texto envia o caractere de retorno
(‘\r’) e o caractere de nova linha (‘\n’)
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos (funções)


associados
– val=Serial.read() → Realiza a leitura do primeiro byte
do buffer de entrada da porta serial
● val → valor recebido
– val=Serial.readBytes(dados,tamanho) → Similar a
read, mas realiza a leitura de mais de um byte e armazena
estes na variável dados
● dados → vetor para armazenamento dos dados (char[]
ou byte[])
● tamanho → número de bytes a serem lidos da porta serial
● val → número de bytes armazenados em dados
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos (funções)


associados
– val=Serial.readBytesUntil(caractere,
dados,tamanho) → Similar a readBytes, mas a leitura é
realizada até o número definido ou até que um determinado
caractere seja identificado e armazena estes na variável dados
● caractere → caractere que indica o término da
mensagem
● dados → vetor para armazenamento dos dados (char[]
ou byte[])
● tamanho → número de bytes a serem lidos da porta serial
● val → número de bytes armazenados em dados
Programação com Arduino

● Por ser um objeto, Serial possui alguns métodos (funções)


associados
– Serial.setTimeOut(val) → Ajusta o tempo de espera da
porta serial para as funções de leitura.
● val → Tempo, em milissegundos, de espera por novos
caracteres (Padrão → 1000 ms)
– val=Serial.write(valor) → Envia um valor de forma
binária pela porta serial.
● val → número de Bytes enviados
● valor → Valor a ser enviado
– val=Serial.write(String)
– val=Serial.write(vetor,tamanho)
Programação com Arduino


Exemplo: int car;
void setup(){
– Elaborar um programa
que receba um Serial.begin(9600);
caractere pela porta }
serial e devolva o void loop(){
mesmo e o valor if (Serial.available()){
decimal correspondente
car=Serial.read();
ao caractere
Serial.write(car);
Serial.print(' ');
Serial.println(car);
}
}
Exercício


Elabore um programa que interaja com o usuário através
da porta serial e altere a frequência de oscilação de um
LED, de acordo com o valor escolhido pelo usuário: os
números de 1 a 9 representam tempos de 100 a 900 ms,
respectivamente. Outros caracteres devem ser
descartados. O programa deve enviar mensagens com
instruções para o usuário.

Você também pode gostar