Projeto - Contador de Apertos 0 até 99 com Display de 7 Segmentos e Botão
Retornando ao desenvolvimento de circuitos com microcontrolador Arduino, hoje estou trazendo um circuito multiplexador com dois displays de 7 segmentos, botões e dois transistores TIP41.
Esse projeto faz parte dos meus estudos com microcontroladores Arduino e, em breve, com outros microcontroladores mais modernos como o STM32.
FUNCIONAMENTO DO PROJETO
Ao apertar um dos botões, um sinal é enviado para a entrada digital do Arduino, fazendo que ele incremente +1 a variável inteira "contador" e em seguida mostra o valor do "contador" no display de 7 segmentos. É um display para as dezenas e um para as unidades" O multiplexador com os transistores fará com que cada número apareça no display com uma frequência alta o suficiente para que a unidade e dezena de um número aparecereçam. Isso significa que, caso o número 27 esteja no display, a dezena "2" e a unidade "7" estão piscando individualmente no display tão rápido que o usuário entende que o número 27 está contando no display Caso o usuário queira decrementar o valor que aparece no display, basta apertar o outro botão.
FUNCIONAMENTO DO CÓDIGO
int estadoAnterior;
int estadoAnterior1;
void setup() {
pinMode(5, INPUT);
pinMode(4, INPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(6, OUTPUT);
}
void display(int numero){
displayoff();
if(numero == 0)
{
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
}
if(numero == 1)
{
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
}
if(numero == 2)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(6, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
}
if(numero == 3)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
}
if(numero == 4)
{
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
}
if(numero == 5)
{
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(9, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
if(numero == 6)
{
digitalWrite(9, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(10, HIGH);
}
if(numero == 7)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
}
if(numero == 8)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
digitalWrite(10, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
}
if(numero == 9)
{
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(12, HIGH);
digitalWrite(11, HIGH);
}
}
void displayoff(){
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
void q1(int s){
if (s == 1){
digitalWrite(2, HIGH);
} else {
digitalWrite(2, LOW);
}
}
void q2(int b){
if (b == 1){
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}
}
void loop() {
for(int contador = 0; contador <= 99;){
int estado = digitalRead(5);
int estado1 = digitalRead(4);
DSP(contador);
if(estado != estadoAnterior){
if(estado == HIGH){
contador++;
}
}
if(estado1 != estadoAnterior1){
if(contador > 0){
if(estado1 == HIGH){
contador--;
}
}
}
estadoAnterior1 = estado1;
estadoAnterior = estado;
}
}
void DSP(int numero)
{
for(int i=0; i<10; i++)
{
display(numero%10);
q1(1);
_delay_ms(5);
q1(0);q2(0);
display(numero/10);
q2(1);
_delay_ms(5);
q1(0);q2(0);
}
}







Comentários
Postar um comentário