Ajuda estrutura programa de esteira

Sou iniciante e realizei a união de alguns programas para montar uma esteira contadora de peças, utilizando Laser e LDR como sensores, LCD para amostragem do valor, botão de reset da contagem, e botão on/off para acionamento do motor através de relé.

A contagem funciona normalmente.Porem estou tendo problemas com o comando de reset de contagem, e o comando de liga e desliga do relé do motor DC, ou seja, eles não funcionam se o laser ou qualquer outra fonte de luz estiver incidindo sobre o LDR, assim tendo de cobrir para funcionar.

Acredito que seja algum erro na estrura do programa, pois não consegue realizar as verificações (if) independentemente

Podem me ajudar ?

Segue código, o qual já alterei por diversas vezes:

#include <LiquidCrystal.h>
#define rele1 8
#define chPin 7

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

int contador = 0;
int valorCalibrado = 236;
int pino_botao_reset = A1;
int estadobotao = 0;
boolean chVal = 1;
boolean releVal = 1;

void setup() {
Serial.begin(9600);

lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Esteira");
lcd.setCursor(0, 1);
pinMode(pino_botao_reset, INPUT);
lcd.print("Num Pecas: ");
pinMode(rele1, OUTPUT);
digitalWrite(rele1, LOW);
pinMode(chPin, INPUT);
digitalWrite(chPin, HIGH);

}

void loop() {

if (analogRead(A0) > 236) {
contador++;
Serial.println(contador);
while (analogRead(A0) > 236);
delay(250);
lcd.setCursor(11, 1);
lcd.print(contador);
}

estadobotao = digitalRead(pino_botao_reset);
if (estadobotao != 1) {
contador = 0;
lcd.setCursor(11, 1);
lcd.print(" ");
}

chVal = digitalRead(chPin);
if (chVal == 0) {
releVal = !releVal;
digitalWrite(rele1, releVal);
delay(500); {
delay(100);
}
}
}

Boas.
Usa as tags proprias para postares codigo de forma que fique legivel a quem o lê em proximos posts.
Em relação ao teu problema o que estas a constactar deve-se a esta linha:

while (analogRead(A0) > 236);

O teu programa fica aqui parado ate que esta condição não seja verdadeira, ou seja a LDR não esteja a ser incidida pelo laser...

Hugo, boa noite.

Muito obrigado. Realmente o problema era na condição while, porem com ela isolada meu contador faz a contagem infinitamente, o que poderia resolver neste caso ?

Outra coisa que não encontrei resposta é como eu posso fazer com que meu relé desligue após 60s se não houver nenhuma contagem de objeto neste periodo.

Abraço,

pesquisa pela função millis()