Placar

Olá, estou desenvolvendo um placar eletrônico em Arduino, a ideia nasceu em PIC, porém após analisar melhor, se tornou mais atraente no Arduino.

A ideia é ter 5 botões
2 UP
2 DOWN
e 1 RESET

Aqui o Projeto no Fritzing:

Os leds estão na seguinte sequência:
ABCDEFG
Só coloquei lado a lado para simular, não consegui encontrar nenhum display pronto no tamanho que eu quero a venda, então decidi montar meu próprio display.
Ele vai ser montado nesse formato:

Como podem ver os leds estão multiplexados na sequência DEZENA-UNIDADE, por faltar entradas no arduino eu utilizo um multiplexador D74HC4067.
Os botões estão ligados de uma forma para utilizar apenas uma entrada analógica.

Segue o projeto no Proteus:

Como podem ver está um pouco diferente, o D74HC4067 no Proteus não tem as entradas SIG, VCC e GND (O arduino não tem as duas ultimas), apresenta uma entrada X (Que eu acredito a corresponder a SIG, porém me corrijam caso eu esteja errado)

Um amigo iria me ajudar com o código, porém ele está sem tempo então vou tentar desenvolver o mesmo.
Como sou novato em tudo isso, estou em dúvida de como fazer, comecei a escrever porém travei.

//Mutiplexador 16 canais
//Pinos controladores do multiplexador
int s0 = 10;
int s1 = 11;
int s2 = 12;
int s3 = 13;
//Pino SIG do multiplexador
int SIG_pin = 9;


void setup(){
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);

digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);

Serial.begin(9600);
}

Se alguém puder me ajudar a escrever o código, já deixo meus agradecimentos.
Sou novato com isso, e não continuei a escrever pois começou a surgir duvidas, como quando/como vou falar o que cada botão vai fazer, como vou diferenciar os botões, quando eu falo qual entrada do Multiplexador vou ativar e ativar o segmento do led, entre outras dúvidas.
Eu praticamente não entendo quase nada, e estou disposto a aprender, quem puder me ajudar. xD

Atenciosamente,
Sky.

Qual é o teu problema ao certo?

A minha dúvida é, como ligar mais de uma saída do multiplexador no código, porque a única ideia que tenho é botar delays e ficar ligando e desligando (muito rápido).

Por exemplo, pra formar o número 3, eu tenho que ligar os segmentos ABCDG, no 74HC4067, no caso vou ter que mandar o código binário ligar as saídas/entradas C0,C1,C2,C3,C6 (Se for nos dois primeiros display, se for nos outros dois teria que ligar as C7,C8,C9,C10,C13), Porém como eu faço no meu código pra ligar mais de uma ao mesmo tempo?

Não sei se ficou claro, eu tenho que ligar 5 segmentos para formar o número 3, só que pra isso eu tenho que ativar 5 entradas do multiplexador ao mesmo tempo, como eu faria isso?

Não quero o código pronto, só um exemplo para eu entender.

Acho que a escolha duma mux não foi acertada para esta aplicação. A mux transfere um sinal dum pino para um pino numa selecção de X (neste caso 16).
O que tu procuras é algo que estenda as portas digitais do microcontrolador. Algo como um MCP23017 ou um shift register (Shift Register 8-Bit - SN74HC595 - COM-13699 - SparkFun Electronics).

Possivelmente o shift register é mais barato e poderá ser mais simples de implementar porque podes encadeá-los para criar as 16 saídas que pretendes usar.

Eu consegui completar meu projeto. xD

O Mux ia fazer meu código ficar gigante.
Encontrei um componente genial, MAX7219 resolveu meu problema.

Aqui um vídeo do funcionamento:

Não preste atenção no áudio, já está tudo resolvido, só comprar os componentes e montar.

Só uma dúvida, quase no final eu mostro como eu quero montar com os Leds, se eu colocar leds de alto brilho, para que fique mais bonito visualmente, vou ter algum problema com a energia? Ou é só eu colocar um resistor de 100k (Ou maior? Para leds difusos eu iria usar o de 100k, porém não tenho ideia para alto brilho) na porta de energia do MAX7219 (Ele faz com que só necessite de um resistor para todos os leds).

Obrigado.

Esse chip é parecido ao que tinha dito. Parabéns por teres descoberto a solução, e realmente a mux não era solução para o problema.

Suponho que não, experimenta com resistências de alguns valores ou até um potenciómetro.