#include <16F84A.h>
#FUSES NOWDT,XT,PUT,NOPROTECT //FUSIBLES
#use delay(clock=4000000)
#define BUZER PIN_B0
#define SALIDA1 PIN_B1
#define SALIDA2 PIN_B2
#define RETRO PIN_B3
#define PUERTA PIN_B5
#define TACTO PIN_B7
#use fast_io(B)
/* Variables */
int i;
int j=0;
int k=0;
/* **********PROGRAMA PRINCIPAL******** */
void main(void)
{
set_tris_b( 0b11111000 ); // configuracion de puertos
/**** Permiso de Arranque inicial ****/
output_low( BUZER ); //Apago buzer
output_low( SALIDA1 ); //Apago carro
output_low( SALIDA2 ); //hasta....
delay_ms(200);
while(!input(TACTO)){} //....Tocar Sensor
// ****************************************
output_high( BUZER ); //Prendo buzer
delay_ms(200);
output_low( BUZER );
//*********************************************
output_high( SALIDA1 ); //Ya hay permiso de prender carro
if(!input(RETRO))
{output_low( SALIDA1 ); //Checo que este activada la salida
output_high( SALIDA2 ); } //Aseguro que se prenda el carro
do{ //bucle infinito
if(!input(PUERTA)) //Puerta Abierta?
{
while(input(PUERTA)){} //....Espero a que se cierre la puerta
// ******* Puerta abierta y cerrada inicia conteo ******* //
delay_ms(100); // Espero a que pasen 100 ms y inicio conteo
j=0; //Flag de sensor no tocado
for (i=0;i<190;i++) //Conteo de 1.5 minutos
{
if(input(TACTO)) //Toque Sensor?
{
j=1; //Flag de ya no siguiente bucle
// ****************************************
output_high( BUZER ); //Prendo buzer
delay_ms(200);
output_low( BUZER );
//*********************************************
break;
}
delay_ms(500);
}
if(j==0) { //Si ya toque sensor salto este bucle
// Hasta este punto han pasado 1.5 Minutos damos alarma y
// si no se activa el sensor se apaga el carro
K=0; // Flag de sensor no tocado
// ********* Aviso sonore de sensor no todaco ******
for (i=1;i<4;i++)
{ output_high( BUZER ); //Prendo buzer y apago 3 veces
delay_ms(200);
output_low( BUZER );
delay_ms(200);
}
for (i=0;i<65;i++) //Bucle de .5 minutos aprox
{
if(input(TACTO)) //Toque Sensor?
{ output_high( SALIDA1 ); //Da permiso de prender carro
k=1; //Flag de ya no apagar carro
// ****************************************
output_high( BUZER ); //Aviso que ya toque sensor
delay_ms(200);
output_low( buzer );
//*********************************************
break;
}
delay_ms(500);
k=0;
}
if(k==0);{
output_low( SALIDA1 ); //Apaga SALIDA1 hasta....
output_low( BUZER ); //Apaga BUZER hasta....
output_low( SALIDA2 ); //Apaga SALIDA2 hasta....
while(!input(TACTO)){} //....Tocar Sensor
// ****************************************
output_high( BUZER ); //Aviso que ya se toco el sensor
delay_ms(200);
output_low( BUZER );
//*********************************************
output_high( SALIDA1 ); } //Apaga carro hasta....
}
}
else // Puerta CERRADA funcionamiento normal
{
output_high( SALIDA1 ); //Da permiso de prender carro
output_low( BUZER ); //APAGO BUZER
if(!input(RETRO))
{output_low( SALIDA1 ); //Checo que este activada la salida
output_high( SALIDA2 ); } //Aseguro que se prenda el carro
delay_ms(500);
}
}while(TRUE);
}