Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.51 KB | None | 0 0
  1. #pragma config OSC=INTIO2, WDT=OFF, DEBUG=ON
  2. #include <p18F1330.h>
  3. #include <delays.h>
  4. #define LED PORTBbits.RB0       //Define LED as pin 8
  5. #define PIEZO PORTAbits.AN2     //Define PIEZO as pin 6
  6. #define SWITCH PORTAbits.RA0    //Define SWITCH as pin 1
  7. unsigned int knock;
  8. unsigned char x;
  9. unsigned char T;                //Time variable
  10. unsigned char start;            //Knock started?
  11. unsigned char stop;             //Knock stopped?
  12. unsigned char ProgramStart;     //Programming knock started?
  13. unsigned char ProgramStop;      //Programming knock stopped?
  14. unsigned int KnockNumber;       //Number of knocks
  15. unsigned int ProgramNumber;     //Number of programmed knocks
  16. int KnockPattern[KnockNumber];          //Knock time array
  17. int ProgrammedPattern[ProgramNumber];   //Program knock time array
  18.  
  19. /* Program secret knock */
  20.  
  21. void program_knock(void)
  22. {
  23.     T=0;
  24.     while(knock!=1)             //While no knock is detected...
  25.     {
  26.         if(ProgramStart==1)         //...if program pattern has started...
  27.         {
  28.             T=T+1;                      //...Time variable counts up
  29.         }
  30.         else if(ProgramStart==0)    //If program pattern has not started...
  31.         {
  32.             Nop();                      //...don't do anything
  33.         }
  34.     }
  35.     ProgrammedPattern[ProgramNumber]=T; //Send time value to program pattern array
  36. }
  37.  
  38. /* Record timing between knocks */
  39.  
  40. void record_timing(void)
  41. {
  42.     T=0;
  43.     while(knock!=1)             //While no knock is detected...
  44.     {
  45.         if(start==1)                //...if pattern has started...
  46.         {
  47.             T=T+1;                      //...Time variable counts up
  48.         }
  49.         else if(start==0)           //If pattern has not started...
  50.         {
  51.             Nop();                      //...don't do anything
  52.         }
  53.     }
  54.     KnockPattern[KnockNumber]=T;    //Send Time value to knock array
  55. }  
  56.  
  57. void main(void)
  58. {
  59.     TRISA=0b00000100;
  60.     TRISB=0b00000000;
  61.     ADCON1=0b00001011;          //Pin 6 (piezo) analog, others digital
  62.     knock=0;                    //Initialize variables
  63.     start=0;                   
  64.     stop=0;
  65.     KnockNumber=0;
  66.    
  67.     while(1)
  68.     {
  69.         if(SWITCH==1)           //Check if we're programming
  70.         {  
  71.             LED=1;                  //If so, turn on LED...
  72.             program_knock();        //...call programming function...
  73.             LED=0;                  //...then turn off LED
  74.         }
  75.         else                    //If we're not programming...
  76.         {  
  77.             if(0<PIEZO<3)           //...wait for first knock
  78.             {
  79.                 Nop();
  80.             }
  81.             else if (100>PIEZO>3)   //When first knock is detected...
  82.             {
  83.                 KnockNumber=KnockNumber+1;      //increase number of sensed knocks
  84.                 start=1;                        //Knock has started
  85.                 knock=1;                        //Single knock in progress
  86.                 LED=1;                          //Flash LED to signify knock detection
  87.                 Delay10KTCYx(20);              
  88.                 LED=0;
  89.                 knock=0;                        //Single knock ended
  90.                 record_timing();                //Call timing function
  91.             }
  92.         }
  93.     }  
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement