|
|
(30 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) |
Linha 1: |
Linha 1: |
− | =Objetivo= | + | =Lista de Exercício= |
| | | |
− | * Apresentar o mapa das entradas e saídas do Arduino;
| + | [1] Quantos pinos digitais tem o Arduino UNO/ZEDUINO? |
− | * Entender suas funções na linguagem do Arduino.
| |
| | | |
| + | [2] Quando nos referimos aos níveis lógicos digitais quanto que vale HIGH e LOW no Arduino UNO em Volts? |
| | | |
− | =Mapa das Entradas e Saídas do Arduino=
| + | [3] O que é TRUE e FALSE? |
| | | |
| + | [4] O que é INPUT e OUTPUT? |
| | | |
− | [[imagem:Fig041_MCO018703.jpg|600px|center]] | + | [5] Quais o tipos de variáveis utilizados pela linguagem C do Arduino? |
− | <center>
| |
− | Figura 1 - Mapa das Entradas e Saídas do Arduino.
| |
− | </center>
| |
| | | |
− | ;Pinos Digitais: São usados para detecção ou transmissão de controles digitais.
| + | [6] Se x=10 e y=3 qual o valor x para as expressões abaixo depois da execução: |
| | | |
− | :Funções em C: | + | :a) x++; |
− | ::pinMode( )
| + | :b) x--; |
− | ::digitalRead( ) | + | :c) x+=y; |
− | ::digitalWrite( ) | + | :d) x-=y; |
− | ::analogWrite( ) | + | :e) x*=y; |
− | ::attachInterrupt( ) | + | :f) x/=y; |
− | ::pulseIn( ) | |
| | | |
| + | [7] Agora, se x=1 e y=0 diga se é FALSE (falso) ou TRUE (verdadeiro) para as expressões abaixo: |
| | | |
− | ;Pinos analógicos: São usados para leitura de sinais de sensores análogicos.
| + | :a) (x == y) |
− |
| + | :b) (x != y) |
− | :Funções em C: | + | :c) (x < y) |
− | ::analogRead( ) | + | :d) (x > y) |
| + | :e) (x <= y) |
| + | :f) (x >= y) |
| | | |
| + | [8] Verifique as expressões abaixo e veja se é FALSE (falso) ou TRUE (verdadeiro): |
| | | |
− | ;Porta USB: É usada para comunicação serial com um computador.
| + | :a) (FALSE && FALSE) |
− |
| + | :b) (FALSE && TRUE) |
− | :Funções em C: | + | :c) (TRUE && FALSE) |
− | ::begin( ) | + | :d) (TRUE && TRUE) |
− | ::end( ) | + | :e) (FALSE || FALSE) |
− | ::available( ) | + | :f) (FALSE || TRUE) |
− | ::read( ) | + | :g) (TRUE || FALSE) |
− | ::print( ) | + | :h) (TRUE || TRUE) |
− | ::println( ) | + | :i) !(FALSE) |
| + | :j) !(TRUE) |
| + | :k) !(TRUE && FALSE) |
| | | |
− | ;Pinos de Alimentação: São usados para alimentação de circuitos externos e ''reset'' do Arduino.
| + | [9] Se os comandos e funções abaixo fosse utilizados para piscar um LED, como você completaria o esqueleto de um programa em Arduino? |
| | | |
− | ==Portas de E/S do Arduino e suas Funções==
| + | ;Comandos: |
| | | |
− | ===Pinos Digitais===
| + | <pre> |
| + | delay(1000); |
| + | delay(1000); |
| + | digitalWrite(2, LOW); |
| + | digitalWrite(2, HIGH); |
| + | pinMode(2, OUTPUT); |
| + | </pre> |
| | | |
− | São 14 pinos marcados com o nome DIGITAL logo abaixo de duas barras de 8 pinos. São numerados de 0 a 13 da direita para a esquerda e podem ser configurados pela função
| + | ;Código Fonte: |
− | '''pinMode( )''' para detetarem ou transmitirem níveis lógicos digitais (verdadeiro/falso, 1/0 ou HIGH/LOW). A Figura 2 mostra o mapa de pinos Digitais do Arduino.
| |
| | | |
− | [[imagem:Fig042_MCO018703.jpg|600px|center]]
| + | <syntaxhighlight lang=c> |
− | <center> | + | void setup() { |
− | Figura 2 - Mapa dos Pinos Digitais do Arduino.
| + | // put your setup code here, to run once: |
− | </center>
| |
| | | |
| + | } |
| | | |
− | {| class="wikitable"
| + | void loop() { |
− | ! style="font-weight:bold;" | Função
| + | // put your main code here, to run repeatedly: |
− | ! style="font-weight:bold;" | Exemplo
| |
− | ! style="font-weight:bold;" | Notas
| |
− | |-
| |
− | | '''pinMode(pino,modo)'''
| |
− | Serve para estabelecer a direção do
| |
− | fluxo de informações em qualquer dos 14
| |
− | pinos digitais. Dois parâmetros devem
| |
− | ser passados à função: o primeiro indica
| |
− | qual pino vai ser usado; o segundo, se
| |
− | esse pino vai ser entrada ou se vai ser
| |
− | saída dessas informações.
| |
− | | '''pinMode(2,OUTPUT);'''
| |
− | Aqui o pino 2 é selecionado para
| |
− | transmitir informações do Arduino
| |
− | para um circuito externo qualquer.
| |
− | Para configurar esse pino como
| |
− | entrada, o segundo parâmetro dessa
| |
− | função deve ser INPUT.
| |
− | | Essa função é sempre
| |
− | escrita dentro da
| |
− | função
| |
− | setup( ).
| |
− | |-
| |
− | |'''digitalRead(pino) '''
| |
− | Uma vez configurado um certo pino
| |
− | como entrada com a função
| |
− | pinMode( ), a informação presente
| |
− | nesse pino pode ser lida com a função
| |
− | digitalRead( ) e armazenada
| |
− | numa variável qualquer.
| |
− | | '''int chave = digitalRead(3);'''
| |
− | Nesse exemplo a variável inteira
| |
− | ‘chave’ vai guardar o estado lógico
| |
− | (verdadeiro/falso) presente no
| |
− | pino digital 3.
| |
− | |
| |
− | |-
| |
− | | '''digitalWrite(pino,valor) '''
| |
− | Para enviar um nível lógico para qualquer
| |
− | pino digital do Arduino utiliza-se essa
| |
− | função. Dois parâmetros são requeri
| |
− | dos: o número do pino e o estado lógico
| |
− | (HIGH/LOW ) em que esse pino deve
| |
− | permanecer.
| |
− | | '''digitalWrite(2,HIGH);'''
| |
− | Aqui uma tensão de 5 volts é colo
| |
− | cada no pino 2. Para enviar terra
| |
− | para esse pino o segundo parâmetro
| |
− | deverá ser LOW.
| |
− | | É necessário configurar previamente o
| |
− | pino como saída com a função
| |
− | pinMode( ).
| |
− | |-
| |
− | | '''analogWrite(pino,valor)'''
| |
− | O Arduino pode gerar tensões analógicas
| |
− | em 6 de seus 14 pinos digitais com a função
| |
− | '''analogWrite( )'''. Dois parâmetros devem
| |
− | ser passados à função: o primeiro indica em
| |
− | qual pino será gerada a tensão; o segundo
| |
− | determina a amplitude dessa tensão, e
| |
− | deve ter valores entre 0 (para 0 volt) e
| |
− | 255 (para 5 volts).
| |
− | | '''analogWrite(10,128);'''
| |
− | Com esses parâmetros uma
| |
− | tensão analógica de 2,5 volts
| |
− | vai aparecer no pino 10. Não é
| |
− | necessário configurar um pino
| |
− | PWM como saída com a função
| |
− | '''pinMode( )''' quando se chama
| |
− | função '''analogWrite( )'''.
| |
− | | Modulação por Largura de Pulsos, ou
| |
− | PWM (Pulse Width Modulation) na
| |
− | língua inglesa, é uma técnica usada
| |
− | para gerar tensões analógicas a partir
| |
− | de uma sequência de pulsos digitais.
| |
− | |-
| |
− | | '''attachInterrupt(pino,função,modo)'''
| |
− | Essa função é uma rotina de serviço de
| |
− | interrupção, ou ISR (Interrupt Service
| |
− | Routine) em inglês. Toda vez que ocorrer
| |
− | uma interrupção por hardware no pino digi
| |
− | tal 2 ou no 3 do Arduino uma outra função,
| |
− | criada pelo programador, vai ser chamada.
| |
− | O terceiro parâmetro, modo, informa
| |
− | como a interrupção vai ser disparada, se
| |
− | na borda de subida do pulso detetado no
| |
− | pino do Arduino, se na borda de descida, se
| |
− | quando o pulso for baixo ou se na mudança
| |
− | de nível desse pulso.
| |
− | | '''attachInterrupt(0,contador,RISING);'''
| |
− | Nesse exemplo a função
| |
− | ‘contador’ vai ser chamada
| |
− | quando o Arduino detetar uma
| |
− | mudança do nível LOW para
| |
− | o nível HIGH em seu pino 2.
| |
− | Nessa ISR o parâmetro 0
| |
− | monitora o pino 2, o parâmetro 1
| |
− | monitora o pino 3.
| |
− | | LOW - dispara a interrupção quando
| |
− | o pino está em 0;
| |
− | CHANGE - dispara sempre que o
| |
− | pino muda de estado (de 0 para 1,
| |
− | ou vice-versa);
| |
− | RISING - somente quando o pino
| |
− | muda de 0 para 1;
| |
− | FALLING - somente quando o pino
| |
− | muda de 1 para 0.
| |
− | |-
| |
− | | '''pulseIn(pino,valor,espera)'''
| |
− | Essa função mede a largura em microssegundos
| |
− | de um pulso em qualquer pino digital.
| |
− | O parâmetro ‘valor’ diz à função que
| |
− | tipo de pulso deve ser medido, se HIGH
| |
− | ou LOW. O parâmetro ‘espera’ (time out) é
| |
− | opcional e se passado à função faz com que
| |
− | a medida do pulso só comece após o tempo
| |
− | em microssegundos ali especificado.
| |
− | | '''pulseIn(4,HIGH);'''
| |
− | Aqui essa função vai monitorar
| |
− | o pino 4, e quando o nível
| |
− | nesse pino mudar de LOW
| |
− | para HIGH a sua largura vai
| |
− | ser medida até que seu nível
| |
− | volte para LOW. Se, por
| |
− | exemplo, for passado o valor 100
| |
− | como terceiro parâmetro, a
| |
− | medida da largura do pulso só
| |
− | será disparada após 100 uS.
| |
− | | Uma aplicação interessante para
| |
− | essas duas últimas funções seria
| |
− | o de montar um contador de dois dígitos
| |
− | com mostradores de 7-segmentos.
| |
− | |}
| |
| | | |
− | =Referências=
| + | } |
| + | </syntaxhighlight> |
| | | |
− | [1] | + | [10] Monte o circuito abaixo tomando cuidado com as ligações, não esquecendo de verificar qual o pino escolhido como saída. |
| | | |
| + | [[imagem:Fig003_MCO18703.jpg|center]] |
| + | |
| + | [11] Altere o código fonte para acrescentar mais um LED ao circuito. Faça uma animação acendendo e apagando os LEDs em tempos diferentes. |
| + | |
| + | [12] Agora, se os comando e funções abaixo fossem utilizados para fazer uma leitura de uma porta digital pelo Monitor Serial do Arduino, como ficaria o esqueleto do programa? |
| + | |
| + | ;Comandos |
| + | |
| + | <pre> |
| + | Serial.println(botao); |
| + | int botao = digitalRead(4); |
| + | pinMode(4,INPUT); |
| + | Serial.begin(9600); |
| + | </pre> |
| + | |
| + | ;Código Fonte: |
| + | <syntaxhighlight lang=c> |
| + | void setup() { |
| + | // put your setup code here, to run once: |
| + | |
| + | } |
| + | |
| + | void loop() { |
| + | // put your main code here, to run repeatedly: |
| + | |
| + | } |
| + | </syntaxhighlight> |
| + | |
| + | [[imagem:Fig043_MCO018703.jpg|300px|center]] |
| | | |
| | | |
Lista de Exercício
[1] Quantos pinos digitais tem o Arduino UNO/ZEDUINO?
[2] Quando nos referimos aos níveis lógicos digitais quanto que vale HIGH e LOW no Arduino UNO em Volts?
[3] O que é TRUE e FALSE?
[4] O que é INPUT e OUTPUT?
[5] Quais o tipos de variáveis utilizados pela linguagem C do Arduino?
[6] Se x=10 e y=3 qual o valor x para as expressões abaixo depois da execução:
- a) x++;
- b) x--;
- c) x+=y;
- d) x-=y;
- e) x*=y;
- f) x/=y;
[7] Agora, se x=1 e y=0 diga se é FALSE (falso) ou TRUE (verdadeiro) para as expressões abaixo:
- a) (x == y)
- b) (x != y)
- c) (x < y)
- d) (x > y)
- e) (x <= y)
- f) (x >= y)
[8] Verifique as expressões abaixo e veja se é FALSE (falso) ou TRUE (verdadeiro):
- a) (FALSE && FALSE)
- b) (FALSE && TRUE)
- c) (TRUE && FALSE)
- d) (TRUE && TRUE)
- e) (FALSE || FALSE)
- f) (FALSE || TRUE)
- g) (TRUE || FALSE)
- h) (TRUE || TRUE)
- i) !(FALSE)
- j) !(TRUE)
- k) !(TRUE && FALSE)
[9] Se os comandos e funções abaixo fosse utilizados para piscar um LED, como você completaria o esqueleto de um programa em Arduino?
- Comandos
delay(1000);
delay(1000);
digitalWrite(2, LOW);
digitalWrite(2, HIGH);
pinMode(2, OUTPUT);
- Código Fonte
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
[10] Monte o circuito abaixo tomando cuidado com as ligações, não esquecendo de verificar qual o pino escolhido como saída.
[11] Altere o código fonte para acrescentar mais um LED ao circuito. Faça uma animação acendendo e apagando os LEDs em tempos diferentes.
[12] Agora, se os comando e funções abaixo fossem utilizados para fazer uma leitura de uma porta digital pelo Monitor Serial do Arduino, como ficaria o esqueleto do programa?
- Comandos
Serial.println(botao);
int botao = digitalRead(4);
pinMode(4,INPUT);
Serial.begin(9600);
- Código Fonte
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}