Mudanças entre as edições de "MCO018703 2020 1 AULA07"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com '=Objetivo= * Apresentar o mapa das entradas e saídas do Arduino; * Entender suas funções na linguagem do Arduino. =Mapa das Entradas e Saídas do Arduino= imagem:Fig...')
 
 
(7 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.
 
|}
 
 
 
==Exemplo==
 
 
 
 
 
No programa abaixo essas três funções: pinMode(), digitalRead() e digitalWrite() são utilizadas para acender um LED no pino 2 toda vez que
 
uma chave normalmente aberta no pino 3 for pressionada.
 
  
<syntaxhighlight lang=c>
 
void setup()
 
{
 
    pinMode(11,OUTPUT);
 
    // led no pino 11 como saída
 
    pinMode(5,INPUT);  // Pode-se definir um resistor interno de pull-up com INPUT_PULLUP 
 
    // chave no pino 5 como entrada
 
}
 
void loop()
 
{
 
    int chave = digitalRead(5);
 
    // variável ‘chave’ guarda estado do pino 5
 
    if (chave==HIGH)
 
      digitalWrite(11,LOW); 
 
    else
 
      digitalWrite(11,HIGH); 
 
    // estado de ‘chave’ é passado para pino 11
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
A Figura 3 mostra como ficaria as ligações para acender o LED toda vez que a chave for pressionada.
+
[10] Agora, se os comando e funções abaixo fossem utilizados para fazer uma leitura de um pino digital pelo Monitor Serial do Arduino, como ficaria o esqueleto do programa?
 
 
[[imagem:Fig043_MCO018703.jpg|400px|center]]
 
<center>
 
Figura 3 - Fios vermelhos são 5V, fios pretos GND e fios verdes conexões com os Pinos de E/S.
 
</center>
 
 
 
O botão ''push-button'' também é chamado micro ''switch''. A Figura 4 ilustra o seu funcionamento.
 
  
[[imagem:Fig013_MCO18703.png|500px|center]]
+
;Comandos
<center>
 
Figura 4 - ''Push-button'' de pólo simples com 2 ou 4 pinos de contato.
 
</center>
 
  
LED, ou ''Light Emitter Diode'' é um diodo emissor de luz que, quando alimentado corretamente, permite o fluxo de energia apenas em um sentido. É um componente polarizado (com pólos positivo e negativo) e deve ser corretamente conectado para funcionar. Note que o polo positivo possui uma perna maior (terminal maior) que a outra (veja a figura abaixo). Já o polo negativo possui a menor perna (terminal menor).
+
<pre>
 
+
    Serial.println(botao);
[[imagem:Fig004_MCO18703.jpg|500px|center]]
+
    int botao = digitalRead(4);
<center>
+
    pinMode(4,INPUT);
Figura 5 - ''Diodo emissor de luz.
+
    Serial.begin(9600);
</center>
+
</pre>
 
 
<blockquote style="background: #FFEEFF; border: 1px solid red; margin-left: 0px; margin-right: 0px; padding: 1em;">
 
Nota: Alguns LED's apresentam o polo negativo chanfrado (plano) no seu exterior.
 
</blockquote>
 
 
 
==Pushbutton como interruptor liga/desliga==
 
 
 
Criar um circuito para atribuir duas funções em um único botão (pushbutton). O botão servirá como um interruptor para ligar e desligar um componente eletrônico. Neste exemplo vamos ligar e desligar um led utilizando o pushbutton como interruptor.
 
  
 +
;Código Fonte:
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
const int buttonPin = 6;
 
const int ledPin = 13;
 
 
int estado = 0; // variável para leitura do pushbutton
 
int guarda_estado = LOW; // variável para armazenar valores do pushbutton
 
 
 
 
void setup() {
 
void setup() {
    pinMode(ledPin, OUTPUT);
+
   // put your setup code here, to run once:
    pinMode(buttonPin, INPUT); // resistor de pullup -> pinMode(buttonPin, INPUT_PULLUP);
 
}
 
    
 
void loop(){
 
    estado = digitalRead(buttonPin);
 
 
    if (estado == HIGH) {    // para pullup (estado==LOW)
 
        guarda_estado = !guarda_estado;  // inverte valor da variável variable_buttonEstado
 
        delay(500); //esperera o tempo de 500ms para evitar que haja várias vezes alterações
 
    }
 
    if (guarda_estado == HIGH) {
 
        digitalWrite(ledPin, HIGH);
 
    }
 
    else {
 
        digitalWrite(ledPin, LOW);
 
    }
 
}
 
</syntaxhighlight>
 
  
==Exercícios==
 
 
:1. Altere o programa Button para trocar o estado do LED quando o botão é pressionado.
 
:2. Explique e implemente o código abaixo:
 
 
<syntaxhighlight lang=c>
 
#define BOTAO 6
 
#define LED 13
 
void setup() {
 
  pinMode(LED, OUTPUT);
 
  pinMode(BOTAO, INPUT);
 
 
}
 
}
  
 
void loop() {
 
void loop() {
  digitalWrite(LED, !digitalRead(BOTAO));
+
  // put your main code here, to run repeatedly:
 +
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
;Nota: O operador !, em linguagem C, significa negação ('''not''') e tem como finalidade complementar a expressão que segue à sua direita.
 
 
=Referências=
 
 
[1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf
 
 
[2] https://www.tinkercad.com/circuits
 
 
  
  

Edição atual tal como às 17h26min de 14 de setembro de 2020

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] Agora, se os comando e funções abaixo fossem utilizados para fazer uma leitura de um pino 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:

}




Icone voltar.png Icone menu.png Icone prox.png