Mudanças entre as edições de "MCO018703 2018 2 AULA06"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(26 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>
+
 
 +
}
 +
 
 +
void loop() {
 +
  // put your main code here, to run repeatedly:
 +
 
 +
}
 +
</syntaxhighlight>
 +
 
 +
[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.
  
{| class="wikitable"
+
[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?
! style="font-weight:bold;" | Função
 
! 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.
 
|}
 
  
 +
;Comandos
  
No programa abaixo essas três funções são utilizadas para acender um LED no pino 2 toda vez que
+
<pre>
uma chave normalmente aberta no pino 3 for pressionada.
+
    Serial.println(botao);
 +
    int botao = digitalRead(4);
 +
    pinMode(4,INPUT);
 +
    Serial.begin(9600);
 +
</pre>
  
 +
;Código Fonte:
 
<syntaxhighlight lang=c>
 
<syntaxhighlight lang=c>
void setup()  
+
void setup() {
{
+
  // put your setup code here, to run once:
    pinMode(2,OUTPUT);
+
 
    // led no pino 2 como saída
 
    pinMode(3,INPUT_PULLUP);   
 
    // chave no pino 3 como entrada
 
}
 
void loop()
 
{
 
    int chave = digitalRead(3);
 
    // variável ‘chave’ guarda estado do pino 3
 
    digitalWrite(2,chave); 
 
    // estado de ‘chave’ é passado para pino 2.
 
 
}
 
}
</syntaxhighlight>
 
  
O código dentro da função loop( ) acima pode ainda ser simplificado da seguinte forma:
+
void loop() {
 +
  // put your main code here, to run repeatedly:
  
<syntaxhighlight lang=c>
 
void loop()
 
{
 
digitalWrite(2,digitalRead(3));
 
// led (pino 2) acende se chave (pino 3) for pressionada.
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=Referências=
+
[[imagem:Fig043_MCO018703.jpg|300px|center]]
 
 
[1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf
 
 
 
[2] https://www.tinkercad.com/circuits
 
 
 
  
  

Edição atual tal como às 20h03min de 11 de setembro de 2018

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.

Fig003 MCO18703.jpg

[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:

}
Fig043 MCO018703.jpg



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