Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma config OSC=INTIO2, WDT=OFF, DEBUG=ON
- #include <p18F1330.h>
- #include <delays.h>
- #define LED PORTBbits.RB0 //Define LED as pin 8
- #define PIEZO PORTAbits.AN2 //Define PIEZO as pin 6
- #define SWITCH PORTAbits.RA0 //Define SWITCH as pin 1
- unsigned int knock;
- unsigned char x;
- unsigned char T; //Time variable
- unsigned char start; //Knock started?
- unsigned char stop; //Knock stopped?
- unsigned char ProgramStart; //Programming knock started?
- unsigned char ProgramStop; //Programming knock stopped?
- unsigned int KnockNumber; //Number of knocks
- unsigned int ProgramNumber; //Number of programmed knocks
- int KnockPattern[KnockNumber]; //Knock time array
- int ProgrammedPattern[ProgramNumber]; //Program knock time array
- /* Program secret knock */
- void program_knock(void)
- {
- T=0;
- while(knock!=1) //While no knock is detected...
- {
- if(ProgramStart==1) //...if program pattern has started...
- {
- T=T+1; //...Time variable counts up
- }
- else if(ProgramStart==0) //If program pattern has not started...
- {
- Nop(); //...don't do anything
- }
- }
- ProgrammedPattern[ProgramNumber]=T; //Send time value to program pattern array
- }
- /* Record timing between knocks */
- void record_timing(void)
- {
- T=0;
- while(knock!=1) //While no knock is detected...
- {
- if(start==1) //...if pattern has started...
- {
- T=T+1; //...Time variable counts up
- }
- else if(start==0) //If pattern has not started...
- {
- Nop(); //...don't do anything
- }
- }
- KnockPattern[KnockNumber]=T; //Send Time value to knock array
- }
- void main(void)
- {
- TRISA=0b00000100;
- TRISB=0b00000000;
- ADCON1=0b00001011; //Pin 6 (piezo) analog, others digital
- knock=0; //Initialize variables
- start=0;
- stop=0;
- KnockNumber=0;
- while(1)
- {
- if(SWITCH==1) //Check if we're programming
- {
- LED=1; //If so, turn on LED...
- program_knock(); //...call programming function...
- LED=0; //...then turn off LED
- }
- else //If we're not programming...
- {
- if(0<PIEZO<3) //...wait for first knock
- {
- Nop();
- }
- else if (100>PIEZO>3) //When first knock is detected...
- {
- KnockNumber=KnockNumber+1; //increase number of sensed knocks
- start=1; //Knock has started
- knock=1; //Single knock in progress
- LED=1; //Flash LED to signify knock detection
- Delay10KTCYx(20);
- LED=0;
- knock=0; //Single knock ended
- record_timing(); //Call timing function
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement