3 – entender a leitura em porta lógica digital (ler um interruptor)

Nessa parte vamos ver como ler uma entrada/estado de uma porta digital, para processa-la e gerar uma saída correspondente.

Não espere o nível de detalhes da parte 2, já que estou assumindo que já aprendremos o básico sobre o arduino.

A idéia aqui é ler a entrada de um interruptor através de uma porta digital e, caso o interruptor esteja fechado, ligar o LED. Caso contrário, desliga.

Nesse exemplo, teremos essa configuração:

3-1
Figura 3.1 – configuração do nosso exemplo

Ler uma porta digital é análogo a escrever em uma. Ler uma porta lógica nos dirá se o sinal está LOW (menor que 2volts) ou HIGH  (maior que 3volts)

O Arduino, além das portas digitais, possui em sua placa acesso ao VCC (5volts) e o GND (terra, 0v). Podemos usar esses acessos para alimentar circuitos eletrônicos ou usar para gerar diferença de voltagem em nossas portas digitais e conseguir ler seu estado.

Ou seja, poderíamos pegar o VCC, que temos certeza que tem 5volts, ligar em um interruptor e jogar a outra ponta em uma porta digital. Se o interruptor estiver fechando o circuito, conseguiremos ler 5V. Contudo, não é tão simples, porque quando o circuito está aberto, não necessariamente temos um valor LOW(0volts), pois o fio não estaria ligado a nada. Como o fio não está ligado a nada, o microcontrolador não sabe se o estado é HIGH ou LOW, configurando o estado de alta impedância. Veja abaixo:

3-2
Figura 3.2 NÃO FAÇA ISSO – Exemplo de circuito ligado e desligado atraves de um interruptor para exemplificar o estado de alta impedância.  Veja que quando o interruptor está aberto, a porta digital não está ligada a nada.

Para ler o interruptor, vamos precisar de um resitor pull-down, ou seja, vamos usar um resistor com valor suficientimente alto e ler o valor intermediário entre o VCC e o GND. Assim, quando o circuito estiver aberto, vamos ler o valor do GND. Quando estiver fechado, o resistor de valor alto vai ligar a porta lógica ao VCC.  Mais informações sobre o funcionamento do resistor pull-down pode sem encontrados aqui (http://pt.wikipedia.org/wiki/Resistores_pull-up)

Logo, a configuração de leitura do interruptor na porta 7 (escolhi uma randomicamente entre as disponíveis) ficaria assim:

3-3
Figura 3.3 – Configuração de leitura do interruptor com resistor pull-down.

Como vamos usar o interruptor para ligar e desligar o LED, vamos juntar essa configuração à configuração da parte 2 de nosso tutorial, ficando com a seguinte configuração.

3-4
Figura 3.4 – Configuração final do exemplo. Repare que o resistor ligado a porta 4, responsavel por ligar o LED (etapa 2) passa por tras do fio da porta 7.

A parte de hardware terminada, vamos à de software. Novamente começamos com o setup, precisamos configurar a porta 7 como leitura (entrada), e a 4 novamente com o saida, já que ela alimentará o LED. O trecho de código abaixo resolve o problema.

void setup() {                
  // inicializa a porta 4 como porta de saída / escrita.
  pinMode(4, OUTPUT); 
  // escreve o estado da porta 4 como LOW / desligado
  digitalWrite(4, LOW); 
  
  // inicializa a porta 4 como porta de entrada / leitura.
  pinMode(7, INPUT);
  

}

Quadro 3.5 – Configurando a porta 7 como entrada/escrita.

Depois do setup, temos que definir nossa lógica. Isso é, quando o interruptor estiver fechado, leremos um sinal HIGH e ligaremos o LED. Quando o interruptor estiver aberto, leremos LOW, e desligaremos o LED. Faremos isso da seguinte forma:

void loop(){
   // variável para armazenar a leitura da porta
   int buttonState = 0;
  // le o estado da porta digital 7
  buttonState = digitalRead(7);

  // checa se o interruptor esta fechado
  // se ele estiver, o buttonState vai ser HIGH:
  if (buttonState == HIGH) {     
    // liga o LED   
    digitalWrite(4, HIGH);  
  } 
  else {
    // desliga o LED
    digitalWrite(4, LOW); 
  }
}

Quadro 3.6 – Lógica para ligar e desligar o LED através da leitura da porta digital. Mais detalhes sobre a função digitalRead pode ser encontrado no site do arduino (http://arduino.cc/en/Reference/digitalRead)

O código final pode ser visto abaixo. É só colocá-lo na IDE, fazer o upload e testar seu funcionamento. O vídeo mostra o resultado.

void setup() {                
  // inicializa a porta 4 como porta de saída / escrita.
  pinMode(4, OUTPUT); 
  // escreve o estado da porta 4 como LOW / desligado
  digitalWrite(4, LOW); 
  // inicializa a porta 4 como porta de entrada / leitura.
  pinMode(7, INPUT); 

}
void loop(){
   int buttonState = 0;// variável para armazenar a leitura da porta
  // le o estado da porta digital 7
  buttonState = digitalRead(7);

  // checa se o interruptor esta fechado
  // se ele estiver, o buttonState vai ser HIGH:
  if (buttonState == HIGH) {     
    // liga o LED   
    digitalWrite(4, HIGH);  
  } 
  else {
    // desliga o LED
    digitalWrite(4, LOW); 
  }
}

Quadro 3.7 – código final

Veja o video de tudo funcionando:

1 comentário

Arquivado em Arduino, Automação Doméstica, Eletrônica, Geek, Tutorial, Uncategorized

Uma resposta para “3 – entender a leitura em porta lógica digital (ler um interruptor)

  1. Olá amigo muito legal e detalhada sua explicação ..
    Parabens !
    Agora me tira uma duvida , como eu faço para mandar o comando do monitor serial , teria que colocar, 1 ligado e 0 desligado ? obrigado ..

Deixe um comentário