Contador de Produtos Esteira

Ola a todos,

Estou querendo desenvolver um contador de produtos de uma esteira usando um LDR e um laser, fiz duas programações distintas uma para a esteira e outra para o contador, só que quando juntos as duas o contador não funciona....

sera que minha programação esta errada??

#include <LiquidCrystal.h> //Declaração da biblioteca do display
#define rele1 8 // Sentido de rotação direto
#define rele2 7 // Sentido de rotação reversa
#define chavesel 9 // Chave de seleção ligada ao pino 9 digital
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Saidas digitais a serem utilizadas para interface com o display

int LDR_Pin = A0; //analog pin 0
int cont=0;

void setup (){
Serial.begin(9600); //Ativando o serial monitor que exibirá os valores lidos no sensor.

//pinMode(chavesel,INPUT); //Definindo a chave de sentido de rotação como de entrada.
//pinMode(rele1,OUTPUT); //Definindo o sentido de rotação direto.
//pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
//digitalWrite(rele1,LOW);
//digitalWrite(rele2,LOW);
//int LDRReading = analogRead(LDR_Pin);

}

void loop()
{

pinMode(chavesel,INPUT); //Definindo a chave de sentido de rotação como de entrada.
pinMode(rele1,OUTPUT); //Definindo o sentido de rotação direto.
pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
digitalWrite(rele1,LOW);
digitalWrite(rele2,LOW);

int LDRReading = analogRead(LDR_Pin);

int chave=digitalRead(chavesel);
Serial.println(chave);
if(chave==LOW){
delay(4000);
digitalWrite(rele2,LOW);
delay(1000);
digitalWrite(rele1,HIGH);
lcd.clear();
lcd.print(" Rotacao Direta");
}

if (LDRReading==900){
delay(200);
Serial.println(LDRReading);

delay(1000);
cont=cont+1;
Serial.println(cont);

}
delay(800);
if(chave==HIGH){
delay(1000);
digitalWrite(rele1,LOW);
delay(400);
digitalWrite (rele2,HIGH);
lcd.clear();
lcd.print(" Rotacao Reversa");
}
if (LDRReading==900){
delay(200);
Serial.println(LDRReading);

delay(1000);
cont=cont+1;
Serial.println(cont);

}

delay(100);

}

Uma pergunta: Qual é o intervalo médio de um produto para o outro em sua esteira ?
Já tentou fazer esse teste manualmente?jogar o laser direto no LDR para ver se ele conta?
Me passe mais detalhes sobre esse projeto.

A não ser que você vá mudar o sentido da porta, é indicado manter essa parte no setup:

pinMode(chavesel,INPUT);    //Definindo a chave de sentido de rotação como de entrada.
 pinMode(rele1,OUTPUT);  //Definindo o sentido de rotação direto.
 pinMode(rele2,OUTPUT); // Definimos o sentido de rotação reverso
 digitalWrite(rele1,LOW);
 digitalWrite(rele2,LOW);

outo problema é o uso de "delay();", quando usas delay(4000) o teu código para por 4 segundos, então se o estado do LDR mudar dentro deste intervalo, você perderá a mudança, então arranca esses delay fora ^^ (com a quantidade de pausas que teu código tem, fica difícil pegar algo em movimento)

Com quase 9 segundos em delays só por milagre é que isto vai funcionar mesmo. :expressionless:

O que é que o programa não faz quando juntas os dois?

sera que minha programação esta errada??

Sim sem duvida

Com quase 9 segundos em delays só por milagre é que isto vai funcionar mesmo. smiley-neutral

Pensa assim tens de conseguir fazer isso tudo sem usar um unico delay.Quando o fizeres entao a programaçao estará correcta :grin:
O que te deve estar a acontecer e o teu arduino está a "descansar" demasiado porque tu o mandas parar com delays enormes e provavelmente nao estas a apanhar as janelas temporais que ele esta activo ...
Le isto a ver se te dá umas luzes
http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Ola obrigado por me dar uma luz em relação aos delays vou retira-los.

Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca. :wink:

bubulindo:
Tens de contar as pecas no flanco e garantir que não contas repetidamente a mesma peca. :wink:

Para que não contes a mesma peça sugeria o seguinte. Crias uma variavel, por exemplo "flag".

if (LDRReading==900 && flag==0){
Serial.println(LDRReading);
cont=cont+1;
Serial.println(cont);
flag=1;
}

if (LDRReading != 900)
{
flag=0;
}

Assim garantes que mesmo que a peça se encontre á frente do sensor, não a vai contar mais que uma vez.