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
Linha 190: Linha 190:
 
com mostradores de 7-segmentos.
 
com mostradores de 7-segmentos.
 
|}
 
|}
 +
 +
 +
No programa abaixo essas três funções 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(2,OUTPUT);
 +
// led no pino 2 como saída
 +
pinMode(3,INPUT);   
 +
// 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.
 +
}
 +
O código dentro da função loop( ) acima pode ainda ser simplificado da seguinte forma:
 +
void loop()
 +
{
 +
digitalWrite(2,digitalRead(3));
 +
// led (pino 2) acende se chave (pino 3) for pressionada.
 +
}
 +
</syntaxhighlight>
  
 
=Referências=
 
=Referências=

Edição das 19h52min de 3 de setembro de 2018

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

Fig041 MCO018703.jpg

Figura 1 - Mapa das Entradas e Saídas do Arduino.

Pinos Digitais
São usados para detecção ou transmissão de controles digitais.
Funções em C:
pinMode( )
digitalRead( )
digitalWrite( )
analogWrite( )
attachInterrupt( )
pulseIn( )


Pinos analógicos
São usados para leitura de sinais de sensores análogicos.
Funções em C:
analogRead( )


Porta USB
É usada para comunicação serial com um computador.
Funções em C:
begin( )
end( )
available( )
read( )
print( )
println( )
Pinos de Alimentação
São usados para alimentação de circuitos externos e reset do Arduino.

Portas de E/S do Arduino e suas Funções

Pinos Digitais

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 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.

Fig042 MCO018703.jpg

Figura 2 - Mapa dos Pinos Digitais do Arduino.


Função Exemplo 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.


No programa abaixo essas três funções são utilizadas para acender um LED no pino 2 toda vez que uma chave normalmente aberta no pino 3 for pressionada.

void setup() 
{
pinMode(2,OUTPUT);
// led no pino 2 como saída
pinMode(3,INPUT);     
// 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. 
}
O código dentro da função loop( ) acima pode ainda ser simplificado da seguinte forma:
void loop() 
{
digitalWrite(2,digitalRead(3)); 
// led (pino 2) acende se chave (pino 3) for pressionada.
}

Referências

[1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf



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