Recebi alguns pedidos aqui no blog sobre contadores com botão de reset. No post Contador Display 7 segmentos – 3 dígitos, por exemplo, o contador era incrementado cada vez que o sensor óptico TCRT5000 era acionado, mas para zerar o contador era preciso reiniciar o Arduino.

Vou mostrar nesse post como implementar facilmente esse botão de reset do contador em dois circuitos: um utilizando display 7 segmentos de 3 dígitos, e outro utilizando um display LCD 16×2.

Contador com display 7 segmentos

Vou usar o mesmo circuito do post anterior do contador com display 7 segmentos, acrescentando apenas um push-button para resetar o contador. A lista de material desse circuito fica assim :

  • 3 resistores de 1 K (um para cada dígito/anodo)
  • 1 resistor de 220 ohms (led IR do sensor óptico)
  • 1 resistor de 10 K (ligado ao sensor óptico – receptor)
  • 1 resistor de 10 K (pull up do botão de reset)
  • Display 7 segmentos de 3 dígitos CPS03631BR
  • Sensor óptico reflexivo TCRT5000
  • 1 push-button
contador com botão de reset - display 7 segmentos

No programa, acrescentei a definição do pino do botão (pino_botao_reset), ligado ao pino analógico A0

Um IF verifica se o botão foi pressionado, e caso isso aconteça o valor da variável contador é zerada, e o display é atualizado (linhas 41 a 47). Esse programa utiliza a biblioteca SevSeg, que você pode baixar nesse link.

// Programa: Contador utilizando display 7 segmentos,
//            TCRT5000  e botao reset
// Autor: Arduino e Cia  
  
// Carrega a biblioteca SevSeg
#include "SevSeg.h"   

SevSeg sevseg;  

// Cria variaveis globais  
int contador = 0;  

// Ligado ao pino "coletor" do sensor óptico - Porta A5 ao Arduino  
int pinosensor = 19; 
// Pino ligado ao botao de reset
int pino_botao_reset = A0;
// Armazena o valor lido pelo sensor optico
int leitura; 
// Armazena o estado do botao reset
int estadobotao = 0; 

void setup() 
{  
  // Utilizando display de anodo comum, 
  // pinos dos digitos : 10 a 13  
  // Pino dos segmentos : 2 a 9  
  sevseg.Begin(1,13,10,11,12,2,3,4,5,6,7,8,9);  
  // Controla a luminosidade - 0 a 100  
  sevseg.Brightness(20);  
  // Define o pino do sensor optico como entrada 
  pinMode(pinosensor, INPUT);  
  // Define o pino do botao reset como entrada
  pinMode(pino_botao_reset, INPUT);
}  
   
void loop() 
{  
  sevseg.PrintOutput();  
  sevseg.NewNum(contador,(byte) 2);
  
  // Verifica se o botao reset foi pressionado
  estadobotao = digitalRead(pino_botao_reset);
  if (estadobotao != 1)
  {
    // Zera o contador
    contador = 0;
  }

  // Le as informações do pino do sensor optico
  leitura = digitalRead(pinosensor);
  // Verifica se o objeto foi detectado pelo sensor
  if (leitura != 1) 
  {  
    // Incrementa o valor do contador
    contador = contador++;   

    // Loop caso o objeto pare sobre o sensor 
    while(digitalRead(pinosensor) != 1)  
    {  
     sevseg.PrintOutput();  
     sevseg.NewNum(contador,(byte) 2);  
    }  
  }   
}

Contador LCD 16×2 e botão de reset

Para utilizar o contador com botão de reset no display LCD 16×2, utilizei o mesmo circuito, substituindo o display 7 segmentos pelo LCD. Lista de material:

  • 1 resistor de 220 ohms (led IR do sensor óptico)
  • 1 resistor de 10 K (ligado ao sensor óptico – receptor)
  • 1 resistor de 10 K (pull up do botão de reset)
  • LCD 16×2 HD44780
  • 1 potenciômetro 10 K (ajuste contraste LCD)
  • Sensor óptico reflexivo TCRT5000
  • 1 push-button

Informações específicas sobre o display LCD utilizado, como pinagem, datasheet e outras informações você encontra no artigo Display LCD 16×2 – Backlight azul – HD44780.

contador lcd 16x2 com botão de reset

O programa é o mesmo que eu utilizei para o display 7 segmentos, retirando o uso da biblioteca SevSeg e utilizando a biblioteca LiquidCrystal para controle do LCD:

// Programa: Contador utilizando LCD 16x2 e botao reset
// Autor: Arduino e Cia  
  
#include <LiquidCrystal.h>   

LiquidCrystal lcd(12,11,5,4,3,2);

// Cria variaveis globais  
int contador = 0;  

// Ligado ao pino "coletor" do sensor óptico - Porta A5 ao Arduino  
int pinosensor = 19; 
// Pino ligado ao botao de reset
int pino_botao_reset = A0;
// Armazena o valor lido pelo sensor optico
int leitura; 
// Armazena o estado do botao reset
int estadobotao = 0; 

void setup() 
{  
  lcd.begin(16,2);
  // Define o pino do sensor optico como entrada 
  pinMode(pinosensor, INPUT);  
  // Define o pino do botao reset como entrada
  pinMode(pino_botao_reset, INPUT);
  // Informacoes iniciais no LCD
  lcd.print("Contador : 0");
}  
   
void loop() 
{  
  // Verifica se o botao reset foi pressionado
  estadobotao = digitalRead(pino_botao_reset);
  if (estadobotao != 1)
  {
    // Zera o contador
    contador = 0;
    // Apaga o valor anterior
    lcd.setCursor(11,0);
    lcd.print("   ");
    // Mostra o valor zerado
    lcd.setCursor(11,0);
    lcd.print(contador);
  }

  // Le as informações do pino do sensor optico
  leitura = digitalRead(pinosensor);
  // Verifica se o objeto foi detectado pelo sensor
  if (leitura != 1) 
  {  
    // Incrementa o valor do contador
    contador = contador++;
    // Apaga o valor anterior
    lcd.setCursor(11,0);
    lcd.print("   ");
    // Mostra o valor do contador
    lcd.setCursor(11,0);
    lcd.print(contador);

    // Loop caso o objeto pare sobre o sensor 
    while(digitalRead(pinosensor) != 1)  
    {}  
  }   
}  
5/5 - (1 voto)