Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.46 KB | None | 0 0
  1. #define LENGTH 512
  2.  
  3. byte rawData[LENGTH];
  4. int count;
  5.  
  6. // Sample Frequency in kHz
  7. const float sample_freq = 9070;//9200;
  8.  
  9. int ledPinEh = 8;
  10. int ledPinB = 9;
  11. int ledPinG = 10;
  12. int ledPinD = 11;
  13. int ledPinA = 12;
  14. int ledPinEl = 13;
  15. int ledPinRedRight = 2;
  16. int ledPinGreen = 5;
  17. int ledPinRedLeft = 7;
  18. int len = sizeof(rawData);
  19. int i,k;
  20. long sum, sum_old;
  21. int thresh = 0;
  22. float freq_per = 0;
  23. byte pd_state = 0;
  24.  
  25. void setup(){
  26.   //analogReference(EXTERNAL);   // Connect to 3.3V
  27.   analogRead(A0);
  28.   Serial.begin(115200);
  29.   count = 0;
  30.   pinMode(ledPinEh, OUTPUT);
  31.   pinMode(ledPinB, OUTPUT);
  32.   pinMode(ledPinG, OUTPUT);
  33.   pinMode(ledPinD, OUTPUT);
  34.   pinMode(ledPinA, OUTPUT);
  35.   pinMode(ledPinEl, OUTPUT);
  36.   pinMode(ledPinRedRight, OUTPUT);
  37.   pinMode(ledPinRedLeft, OUTPUT);
  38.   pinMode(ledPinGreen, OUTPUT);
  39. }
  40.  
  41.  
  42. void loop(){
  43.  
  44.   if (count < LENGTH) {
  45.     count++;
  46.     rawData[count] = analogRead(A0)>>2;
  47.   }
  48.   else {
  49.     sum = 0;
  50.     pd_state = 0;
  51.     int period = 0;
  52.     for(i=0; i < len; i++)
  53.     {
  54.       // Autocorrelation
  55.       sum_old = sum;
  56.       sum = 0;
  57.       for(k=0; k < len-i; k++) sum += (rawData[k]-128)*(rawData[k+i]-128)/256;
  58.       // Serial.println(sum);
  59.      
  60.       // Peak Detect State Machine
  61.       if (pd_state == 2 && (sum-sum_old) <=0)
  62.       {
  63.         period = i;
  64.         pd_state = 3;
  65.       }
  66.       if (pd_state == 1 && (sum > thresh) && (sum-sum_old) > 0) pd_state = 2;
  67.       if (!i) {
  68.         thresh = sum * 0.5;
  69.         pd_state = 1;
  70.       }
  71.     }
  72.     // for(i=0; i < len; i++) Serial.println(rawData[i]);
  73.     // Frequency identified in Hz
  74.     if (thresh >100) {
  75.       freq_per = sample_freq/period;
  76.  
  77.       if (freq_per<400){
  78.       Serial.println(freq_per);
  79.      
  80.       //Elow Note 83.21Hz
  81.       if ( ( (freq_per >75)&&(freq_per < 85) )|| ( (freq_per>159)&&(freq_per<170) ) ){    // For Elow string
  82.         digitalWrite(ledPinEl, HIGH);
  83.         //delay(1500);                       // wait for a second
  84.         //digitalWrite(ledPinEl, LOW);
  85.         if (freq_per<80.4||(freq_per<161.91&&freq_per>159)){
  86.            digitalWrite(ledPinRedLeft, HIGH);
  87.            delay(1500);                       // wait for a second
  88.            digitalWrite(ledPinRedLeft, LOW);
  89.           }
  90.         if ((freq_per>84.4&&freq_per < 85)||(freq_per>167.91&&freq_per<170)){
  91.            digitalWrite(ledPinRedRight, HIGH);
  92.            delay(1500);                       // wait for a second
  93.            digitalWrite(ledPinRedRight, LOW);
  94.           }
  95.          if ((freq_per>=80.4&&freq_per<=84.4)||(freq_per>=161.91&&freq_per<=167.91)){
  96.            digitalWrite(ledPinGreen, HIGH);
  97.            delay(1500);                       // wait for a second
  98.            digitalWrite(ledPinGreen, LOW);
  99.           }
  100.           digitalWrite(ledPinEl, LOW);  
  101.       }
  102.  
  103.       //A note (110.61Hz)
  104.       if (  (freq_per >105.61)&&(freq_per < 115.61)  ){    // For Elow string
  105.         digitalWrite(ledPinA, HIGH);
  106.         //delay(1500);                       // wait for a second
  107.         //digitalWrite(ledPinEl, LOW);
  108.         if (freq_per<107.61){
  109.            digitalWrite(ledPinRedLeft, HIGH);
  110.            delay(1500);                       // wait for a second
  111.            digitalWrite(ledPinRedLeft, LOW);
  112.           }
  113.         if (freq_per>113.61){
  114.            digitalWrite(ledPinRedRight, HIGH);
  115.            delay(1500);                       // wait for a second
  116.            digitalWrite(ledPinRedRight, LOW);
  117.           }
  118.          if ((freq_per>=109.2)&&(freq_per<=111.61)){
  119.            digitalWrite(ledPinGreen, HIGH);
  120.            delay(1500);                       // wait for a second
  121.            digitalWrite(ledPinGreen, LOW);
  122.           }
  123.           digitalWrite(ledPinA, LOW);  
  124.       }
  125.  
  126.        //D note (146.83 Hz)
  127.       if (  (freq_per >142.65)&&(freq_per < 151.2)  ){    // For Elow string
  128.         digitalWrite(ledPinD, HIGH);
  129.         //delay(1500);                       // wait for a second
  130.         //digitalWrite(ledPinEl, LOW);
  131.         if (freq_per<144.72){
  132.            digitalWrite(ledPinRedLeft, HIGH);
  133.            delay(1500);                       // wait for a second
  134.            digitalWrite(ledPinRedLeft, LOW);
  135.           }
  136.         if (freq_per>148.97){
  137.            digitalWrite(ledPinRedRight, HIGH);
  138.            delay(1500);                       // wait for a second
  139.            digitalWrite(ledPinRedRight, LOW);
  140.           }
  141.          if ((freq_per>=144.72)&&(freq_per<=148.97)){
  142.            digitalWrite(ledPinGreen, HIGH);
  143.            delay(1500);                       // wait for a second
  144.            digitalWrite(ledPinGreen, LOW);
  145.           }
  146.           digitalWrite(ledPinD, LOW);  
  147.       }
  148.  
  149.      
  150.        //G note (196.0 Hz)
  151.       if (  (freq_per >190.42)&&(freq_per < 201.74)  ){    // For Elow string
  152.         digitalWrite(ledPinG, HIGH);
  153.         //delay(1500);                       // wait for a second
  154.         //digitalWrite(ledPinEl, LOW);
  155.         if (freq_per<192.9){
  156.            digitalWrite(ledPinRedLeft, HIGH);
  157.            delay(1500);                       // wait for a second
  158.            digitalWrite(ledPinRedLeft, LOW);
  159.           }
  160.         if (freq_per>198.85){
  161.            digitalWrite(ledPinRedRight, HIGH);
  162.            delay(1500);                       // wait for a second
  163.            digitalWrite(ledPinRedRight, LOW);
  164.           }
  165.          if ((freq_per>=192.9)&&(freq_per<=198.85)){
  166.            digitalWrite(ledPinGreen, HIGH);
  167.            delay(1500);                       // wait for a second
  168.            digitalWrite(ledPinGreen, LOW);
  169.           }
  170.           digitalWrite(ledPinG, LOW);  
  171.       }
  172.  
  173.      
  174.        //B note (246.94 Hz)
  175.       if (  (freq_per >238.6)&&(freq_per < 254.18)  ){    // For Elow string
  176.         digitalWrite(ledPinB, HIGH);
  177.         //delay(1500);                       // wait for a second
  178.         //digitalWrite(ledPinEl, LOW);
  179.         if (freq_per<243.4){
  180.            digitalWrite(ledPinRedLeft, HIGH);
  181.            delay(1500);                       // wait for a second
  182.            digitalWrite(ledPinRedLeft, LOW);
  183.           }
  184.         if (freq_per>246.94){
  185.            digitalWrite(ledPinRedRight, HIGH);
  186.            delay(1500);                       // wait for a second
  187.            digitalWrite(ledPinRedRight, LOW);
  188.           }
  189.          if ((freq_per>=243.4)&&(freq_per<=246.94)){
  190.            digitalWrite(ledPinGreen, HIGH);
  191.            delay(1500);                       // wait for a second
  192.            digitalWrite(ledPinGreen, LOW);
  193.           }
  194.           digitalWrite(ledPinB, LOW);  
  195.       }
  196.      
  197.      
  198.        //E high note (329.63 Hz)
  199.       if (  (freq_per >320.25)&&(freq_per < 339.29)  ){    // For Elow string
  200.         digitalWrite(ledPinEh, HIGH);
  201.         //delay(1500);                       // wait for a second
  202.         //digitalWrite(ledPinEl, LOW);
  203.         if (freq_per<324.9){
  204.            digitalWrite(ledPinRedLeft, HIGH);
  205.            delay(1500);                       // wait for a second
  206.            digitalWrite(ledPinRedLeft, LOW);
  207.           }
  208.         if (freq_per>334.42){
  209.            digitalWrite(ledPinRedRight, HIGH);
  210.            delay(1500);                       // wait for a second
  211.            digitalWrite(ledPinRedRight, LOW);
  212.           }
  213.          if ((freq_per>=324.9)&&(freq_per<=334.42)){
  214.            digitalWrite(ledPinGreen, HIGH);
  215.            delay(1500);                       // wait for a second
  216.            digitalWrite(ledPinGreen, LOW);
  217.           }
  218.           digitalWrite(ledPinEh, LOW);  
  219.       }
  220.      
  221.     }
  222.     }
  223.     count = 0;
  224.   }
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement