Prende luz con aplausos

Chicos, necesito un poquito de ayuda.
En un proyecto para la universidad, necesito en c18 hacer un codigo para prender luz mediante aplausos.
Tengo un pic18f452 y conectado a la pata 2 un sensor de sonido. El cual me detecte este.
De la pata 37 del pic me sale la conexion para un rele que tengo conectado con un optoacoplador.
Pero que pasa.
No funciona y el rele no se me activa.


lo que me interesa es hacer este codigo en c18.
Que al dar un aplauso, cuente 5 segundos y si al cabo de estos 5segundos recibe otro aplauso se active y de el paso para el rele y posteriormente me encienda las luces que tengo conectadas a los 220.
al simple aplauso y pasen 5segundos y no haya un 2do aplauso que se apague.

Tengo problemas con el timer en este codigo, espero que me puedan ayudar.

Este es el codigo que tengo:

#include <p18f452.h>
#include <delays.h>
#include <xlcd.h>
#include <adc.h>
#include <usart.h>

#pragma config OSC = HS
#pragma config WDT = OFF
#pragma config LVP = OFF
#pragma config DEBUG = ON

void ConfiguraUSART(void);

int j;
//*****************************{funciones LCD

/*void DelayFor18TCY(void){
Delay10TCYx(2);
}

void DelayPORXLCD(void){
Delay1KTCYx(15);
}

void DelayXLCD(void){
Delay1KTCYx(2);
}

// Envia comando al LCD
void comandXLCD(unsigned char a){
BusyXLCD();
WriteCmdXLCD(a);
}*/

// Ubica cursor en (x = Posicion en linea, y = nº de linea)
/*void gotoxyXLCD(unsigned char x, unsigned char y){
unsigned char direccion;
if(y != 1)
direccion = 0x40;
else
direccion=0;
direccion += x-1;
comandXLCD(0x80 | direccion);
}*/



//********************************************[MAIN
void main(void){

unsigned int Canal0,Canal1;
unsigned char String[4];

ConfiguraUSART();
while(BusyUSART());
putrsUSART( "Hola Mundo!\r\n" );

// OpenXLCD(FOUR_BIT & LINES_5X7); // Iniciamos LCD.-

OpenADC(ADC_FOSC_8 & ADC_RIGHT_JUST & ADC_8ANA_0REF,ADC_CH0 & ADC_INT_OFF);

// comandXLCD(0x0C); // Encendemos LCD.-
// putrsXLCD("Probando LCD");
// Delay10KTCYx(100);

while(1){

SetChanADC(0); // Selecciono canal a convertir.-
Delay10TCYx(2); // 20us para que se cargue el capacitor sample&hold.-
ConvertADC(); // Comienza conversión.-
while(BusyADC()==1){} // Hasta que se finalice conversión.-
Canal0= ReadADC(); // Realizo lectura.-


if(Canal0>384){
TRISB=0b10000000;
PORTB=1;
Delay10KTCYx(100);
PORTB=0;
}
// comandXLCD(0x01); // Borra pantalla y vuelve al origen.-
// putrsXLCD("Canal 0 = ");
itoa(Canal0, String); // Convertimos entero a string.-
for(j=0;j<4;j++)
{
while(BusyUSART());
putsUSART( String );
putrsUSART( "\r\n" );
// putsXLCD(String);
}

// Delay10KTCYx(100);


}

}

void ConfiguraUSART(void){

TRISC = 0b10000000 ; // bit 7 input 6 output

OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF &
USART_ASYNCH_MODE & USART_EIGHT_BIT &
USART_CONT_RX & USART_BRGH_HIGH, 64);

}
 
Atrás
Arriba