Como ligar vários botões ao Arduino utilizando apenas uma porta de Input

Acessado 225 vezes.
Como citar esse artigo: VERTULO, Rodrigo Cesar. Como ligar vários botões ao Arduino utilizando apenas uma porta de Input. Disponível em: <http://labdeeletronica.com.br/arduino/como-ligar-varios-botoes-ao-arduino-utilizando-apenas-uma-porta-de-input/>. Acessado em: 17/05/2022.


É muito comum em projetos envolvendo microcontroladores, principalmente nos mais complexos, a necessidade em se utilizar mais portas de input e output do que aquelas disponibilizadas pela plataforma.

Quando isso ocorre existe a possibilidade de se mudar o microcontrolador utilizado para outro mais apropriado, mas isso pode ocasionar aumento de custos e potencialmente da complexidade do código a ser desenvolvido. Outra alternativa seria a utilização de circuitos multiplexadores que normalmente resolvem o problema mas também adiciona complexidade adicional ao projeto do hardware.

No vídeo a seguir você verá uma opção interessante para o problema descrito que é a utilização do circuito integrado 555 para permitir a utilização de muitos botões em conjunto com o Arduino porém utilizando-se apenas uma porta de entrada da plataforma.

Para projetos que precisam utilizar muitos botões de entrada essa pode ser uma solução barata, simples e bastante confiável de ser implementada.

Após o vídeo você poderá encontrar o código fonte utilizado para esse projeto de exemplo que servirá como base para que você possa entender o conceito e desenvolver os seus próprios códigos mais apropriados para cada projeto.

Se você tem interesse em entender profundamente o funcionamento do circuito integrado 555 para poder desenvolver soluções criativas como a que você pode conferir no vídeo, não deixe de conhecer o eBook do Laboratório de Eletrônica “555 Segredos Revelados – Tudo o que você sempre desejou saber sobre esse que é um dos mais populares e importantes CIs de todos os tempos.”

float inicio = 0;
float fim = 0;
float freq = 0;
 
void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT_PULLUP);
 
  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);  
 
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);  
 
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);  
 
  pinMode(6, OUTPUT);
  digitalWrite(6, LOW);  
 
  pinMode(7, OUTPUT);
  digitalWrite(7, LOW);  
 
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
 
  attachInterrupt(digitalPinToInterrupt(2), calculaFrequencia, RISING);
}
 
void calculaFrequencia(){
  if(inicio == 0){
    inicio = (float)millis();    
  } else if(fim == 0){
    freq = (1. / ((float)millis() - inicio)) * 1000;
    inicio = 0;
    fim = 0;
    Serial.println(freq, 2);
  }
}
 
void loop() {
  if(freq >= 4 && freq < 5){
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
 
  } else if(freq >= 5 && freq < 6){
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
 
  } else if(freq >= 6 && freq < 9){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, HIGH);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
 
  } else if(freq >= 9 && freq < 12){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
 
  } else if(freq >= 12 && freq < 15){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
 
  } else if(freq >= 15){
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    digitalWrite(8, HIGH);
  }
}

Comentários

error: Conteúdo Protegido!