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
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.
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) {} } }