Problemas com código

Olá
Vamos ver se alguém consegue me ajudar, estou programando um contador de objetos, mas estou com problemas, pois minha programação esta “correta”, mas o arduino não esta fazendo a contagem. Segue programação

// Programa: Contador utilizando LCD 16x2 e botao reset e sensor TCRT 50000

#include<Wire.h>
#include<LiquidCrystal_I2C.h>

#define endereco 0x27
#define colunas 16
#define linhas 2

#define pinBuzzer 7

LiquidCrystal_I2C lcd (endereco, colunas, linhas);

// Cria variaveis globais
int contador = 0;

// Ligado ao pino “coletor” do sensor óptico - Porta A5 ao Arduino
int pinosensor = 5;
// 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.init();
lcd.backlight();
lcd.clear();

// Define buzzer

pinMode(pinBuzzer, OUTPUT);

// 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(10,0);
if(contador < 10) lcd.print(" “);
if(contador < 100) lcd.print(” “);
if(contador < 1000) lcd.print(” “);
if(contador < 10000) lcd.print(” “);
if(contador < 100000) lcd.print(” “);
if(contador < 1000000) lcd.print(” “);
lcd.print(”");
// Mostra o valor zerado
lcd.setCursor(10,0);
if(contador < 10) lcd.print(" “);
if(contador < 100) lcd.print(” “);
if(contador < 1000) lcd.print(” “);
if(contador < 10000) lcd.print(” “);
if(contador < 100000) lcd.print(” “);
if(contador < 1000000) lcd.print(” ");
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){
digitalWrite(pinBuzzer, HIGH);
}else{
digitalWrite(pinBuzzer, LOW);
}
{
// Incrementa o valor do contador
contador = contador++;
// Apaga o valor anterior
lcd.setCursor(10,0);
if(contador < 10) lcd.print(" “);
if(contador < 100) lcd.print(” “);
if(contador < 1000) lcd.print(” “);
if(contador < 10000) lcd.print(” “);
if(contador < 100000) lcd.print(” “);
if(contador < 1000000) lcd.print(” “);
lcd.print(”");
// Mostra o valor do contador
lcd.setCursor(10,0);
if(contador < 10) lcd.print(" “);
if(contador < 100) lcd.print(” “);
if(contador < 1000) lcd.print(” “);
if(contador < 10000) lcd.print(” “);
if(contador < 100000) lcd.print(” “);
if(contador < 1000000) lcd.print(” ");
lcd.print(contador);

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

}
}

vc tem um código enorme rodando no loop antes e depois do digitalRead, só o tempo de execução dessas instruções são suficientes para perder o momento de acionamento da sua entrada. Utilize interrupção externa que seu problema será resolvido, acrescente tb um debounce para checar se o evento de acionamento da entrada realmente ocorreu ou foi sinal espúrio.