mucha gracias fantaxmax me sirvio...pero no se si me podrias explicar un poco la ultima parque porque lo mandas a cero el cont??...perdon por la ignorancia x_x
te explico el programa, y no te disculpes por no saber, nadie nace sabiendo, y la unica manera de aprender es preguntando, y haciendo
void main(void)
{
lcd_init();
saludo();
LCD_PUTC("\fSensor Motion");
lcd_gotoxy(1,2);
LCD_PUTC("Presencia:");
while(true)
{
if(input(pin_a0)==1)
{
cont=1; //con esto le idicamos al while que debe comenzar a contar, ya que va a contar solo cuando cont no sea cero
output_high(pin_a1); //encendemos el led
lcd_gotoxy(11,2);
LCD_PUTC("ON ");
}
while(cont!=0) // este while funciona de contador
{
cont++; // incrementa la variable cont
delay_ms(1000); // con este delay haces que cuente cada 1 segundo, tambien puede ser una medida menor, como tu quieras
if(cont==x) // x= numero de segundos del contador, ya que hay un delay de un segundo arriba, si ese delay no esta, el led se apagara inmediatamente al bajar la salida del sensor
{
output_low(pin_a1); //apagamos el led
lcd_gotoxy(11,2);
LCD_PUTC("OFF");
cont=0; //al colocar el cont a 0 le decimos el while que debe dejar de contar, y que debe dejar a la cpu seguir sensando
break;
}
}
}
}
como vez el contador solo comenzara a contar una vez que la cpu detecte la salida del sensor y coloque cont a 1, con ese uno en el cont, el contador (while) comprobo que conto ya no es cero, entonces esa es la orden para comenzar a contar, el while cuenta normalmente y va verificando que el numero que lleva contado sea igual al que tu definiste en x, cuando se cumple el contador debe apagar el led, y debe detenerse a si mismo, entonces, el pone a cont a 0, y se termina el conteo, y la cpu puede seguir sensando, si cont no la pusieramos a cero, la cpu al salir del contador volveria a entrar al while del contador, pero en este caso, no se cumpliria la que cont==x, porque nunca volvio a empezar desde 1 en este caso, y tu pic dejaria de responder, se quedaria "colgado".