Fala galera!
Estou com uma dificuldade, estou montando uma automação para uma maquina que que fabrica uma determinada peça, esta peça depois de pronta cai em uma esteira de transporte nesta esteira instalei um sensor infra-vermelho que cada vez que passa uma peça por ele aciona um relê e manda um pulso, até aí tudo certo, minha duvida vem agora, estou montando um controlador que dentre outras funções terá a seguinte: cada vez que receber este pulso (pino D0) vai incrementar 1 na variável X e imprimir o resultado no display de LCD e se uma peça estiver com defeito que for descartada ela passa por um segundo sensor ( pino D1) que vai decrementar 1 na variável e imprimir o resultado no display... Segue abaixo como estou fazendo ( só lembrando estou programando no PIC CCS )
#include <contador.h>
#include <flex_204A.c>
int X;
void main()
{
lcd_init();
delay_ms(50);
output_high(pin_e2);
lcd_gotoxy(5, 1);
printf(lcd_putc,"QUANTIDADE:");
while(TRUE)
{
if( input(pin_d0)==1)
{delay_ms(200);
if (input(pin_d0) ==1)
X = X+1;
lcd_gotoxy(7, 2);
printf(lcd_putc," ");
lcd_gotoxy(7, 2);
printf(lcd_putc,"%d",X);
}
if( input(pin_d1)==1)
{delay_ms(200);
if (input(pin_d1) ==1)
X = X-1;
lcd_gotoxy(7, 2);
printf(lcd_putc," ");
lcd_gotoxy(7, 2);
printf(lcd_putc,"%d",X);
}
}
}
O LCD funciona perfeito, a incrementação e decrementação esta funcionando também o meu problema é que começa a contar 1,2,3,4....127 até o 127 conta normal quando soma mais uma peça ele passa para -128 e aí por diante,-127,-126,-125... até 0. Como esta maquina faz em torno de 1.000 peças por ciclo, não tenho como trabalhar assim. Provavelmente seja alguma coisa que estou fazendo errado, penso até que seja na declaração da variável, mas já tentei de tudo e nada deu certo...
PS: quando mudei a variável para float X e a impressão no display para %f deu certo, soma certo porém aparece 1.00,2.00,3.00...1000.00, como as peças são números inteiros, não quero ter que usar números reais.
Se alguém puder revisar e me ajudar agradeço.