Como ligar vários botões ao Arduino utilizando apenas uma porta de Input
Acessado 954 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: 02/12/2023.
É 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