Estou fazendo algum projeto e estou usando o Arduino para prototipar, tenho que usar 10 botões (junto com mais coisas) e não tenho pinos suficientes.
Uma solução em que pude pensar é usar os pinos analógicos e usar cada um deles para dois botões, algo como isto:
simular este circuito - esquemático criado usando o CircuitLab
Dessa forma, posso ler o pino A0 e saber qual deles está sendo pressionado, procurando se a tensão é de 5V ou metade disso.
isso é uma boa ideia? Os diferentes botões de pressão NUNCA devem ser pressionados ao mesmo tempo, que é o único problema que consigo pensar.
Existem maneiras melhores?
Respostas:
Por que desperdiçar vários pinos analógicos para dois comutadores cada um, quando você pode executar qualquer número de botões em um único pino analógico?
Duas maneiras de fazer isso. Um é em série, o outro é paralelo.
É assim que alguns controles de áudio do volante do carro são. E como alguns dos controladores inline ipod mais antigos funcionam.
Dependendo dos resistores que você usa, se você precisar de vários botões pressionados ao mesmo tempo e da sensibilidade da entrada analógica, poderá ter todos os 10 botões em um único pino.
fonte
Isso funcionaria, mas uma maneira melhor é com uma matriz . Esse é o mesmo conceito dos LEDs multiplexadores com uma matriz, mas com comutadores.
Esta é uma matriz 2x2. Uma matriz útil é maior, porque nesse tamanho você não está economizando pinos ao conectar os comutadores individualmente.
Com uma matriz 3x3, você pode obter 9 switches. Você precisa de 10, para que você possa adicionar mais uma linha ou mais uma coluna e dar suporte a 12 switches, ou apenas colocar a décima opção em seu próprio pino.
A vantagem aqui é que você pode usar E / S digital, que é mais barata e geralmente mais abundante que o E / S analógico. Um registro de turno é uma maneira barata de adicionar mais IO digital, se você acabar.
Se você quiser ainda menos pinos, poderá, para aumentar a complexidade, usar o charlieplexing . Você precisará adicionar diodos além dos seus comutadores, e esses diodos provavelmente custam tanto quanto um registro de turno. No entanto, se o custo não for sua principal preocupação, pode haver alguma vantagem. Com esse método, você pode ler todos os seus switches (até 12, na verdade) com quatro pinos.
fonte
A entrada analógica é uma abordagem válida, você deve poder ter vários botões nela. Eu também gostaria de sugerir o uso de um chip IO Expander como o MCP23017 . Possui 16 pinos que podem ser entradas e saídas e é controlado com I2C usando dois pinos. O Adafruit possui uma biblioteca do Arduino.
fonte
Sim, parece uma boa ideia, mas, de qualquer forma, vou propor uma alternativa que me veio à mente.
Se você tiver acesso às portas lógicas, poderá mapear muitos
n
botões paraceil(log2(n + 1))
pinos através da lógica booleana. Por exemplo, se você tiver 4 botões, mas apenas 2 pinos, poderá criar uma configuração como esta:Ou seja,
button0
pressionado deve terpin0
epin1
baixo;button1
,pin0
baixo epin1
alto;button2
,pin0
alto epin1
baixo; ebutton3
,pin0
epin1
alta.A partir disso, as seguintes expressões booleanas surgiriam
Um mapeamento de 4 botões para 2 pinos poderia, portanto, ser realizado com apenas 2 portas OR. Você precisaria de um pino adicional e alguma lógica adicional para indicar se algum botão está sendo pressionado.
Obviamente, ainda haverá problemas se vários botões forem pressionados simultaneamente.
Além disso, se você ainda seguir a abordagem do resistor, considere o uso de valores maiores nos resistores que não sejam 100 ohms, já que 5 V através de resistores da ordem de 100s de ohms produziriam uma corrente da ordem de 10s de mA, que é do tipo desnecessariamente alto. Eu acho que valores mais razoáveis seriam 10k Ohm ou 47k Ohm.
fonte
A página a seguir pode ser útil:
http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html
Está escrito em espanhol, mas os esenciais estão diagramados, acho que é uma boa ideia para você.
Neste vídeo você pode ver o resultado final, o esboço também está na página, função encapsulada para facilitar a implementação em seus projetos
Vídeo do Youtube: teclado de 10 teclas em um único pino
Aqui está um esquema do site acima:
fonte