Saludos colegas. Estoy con un problema en a prormacion de un projecto de un contador de vehiculos. Funcionaria asi, el local tiene un solo lugar por donde entran y salen los carros. Entonces, quiero colocar 2 sensores uno tras de otro (separados por una distancia de 1metro). Para el microcontrolador considerar que el carro entro, el carro debe pasar por ambos sensores en sentido izquierda hacia derecha y para considerar el carro salio,este debe pasar por los sensores e sentido contrario (derecha hacia izquierda). De esta forma, el controlador incrementaria o decrementaria la variable CONTADOR que fue creada. Tambien, mientras existan puestos disponibles hay un led verde encendido y cuando no, se apaga elled verde y enciende un led rojo. Para las pruebas, fue asignada en 5 la cantidad de puestos del lugar. El problema es el siguiente, yo hice la programacion pero solo incementa y no consigo que haga el decremento. Estoy usando el programador MikroC pro pic. Ya llevo casi un mes y no doy con solucion. Pido su colaboracion por favor. Simule en proteus.
CODIGO:
#define S1 RB0_bit
#define S2 RB1_bit
#define NO RB3_bit
#define LEE RB4_bit
#define SI RB2_bit
#define RESET RA0_bit
int CONTADOR;
int pulso = 0;
int pulso1 = 0;
int estado;
int estado1;
void main()
{
TRISA = 1;
TRISB = 3;
PORTB = 4;
PORTA = 0;
estado = 0;
estado1 = 0;
CONTADOR = 0;
CONTADOR = EEPROM_Read(0x00);
while(1)
{
EEPROM_Write(0x00,CONTADOR);
delay_ms(10);
if (Button(&PORTB, 0, 1, 1)) {
estado = 1;
}
if (estado && Button(&PORTB, 0, 1, 0)) {
pulso = 1;
estado = 0;
}
if (Button(&PORTB, 1, 1, 1)) {
estado1 = 1;
}
if (estado1 && Button(&PORTB, 1, 1, 0)) {
pulso1 = 1;
estado1 = 0;
}
if (pulso == 1){
if (pulso1 == 1){
delay_ms(10);
LEE = 1;
delay_ms(200);
LEE = 0;
CONTADOR = CONTADOR + 1;
pulso = 0;
pulso1 = 0;
}
}
if (pulso1 == 1){
if (pulso == 1){
delay_ms(10);
LEE = 1;
delay_ms(200);
LEE = 0;
CONTADOR = CONTADOR - 1;
pulso = 0;
pulso1 = 0;
}
}
if (CONTADOR < 5)
{
SI = 1;
NO = 0;
delay_ms(10);
}
else
// if (CONTADOR >= 5)
{
SI = 0;
NO = 1;
delay_ms(10);
}
if (RESET == 1)
{
delay_ms(10);
CONTADOR = 0;
}
}
}