Advertisement
Guest User

Untitled

a guest
Dec 14th, 2016
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <fix_fft.h>
  2.  
  3. #define AUDIOPIN 0
  4. const int leds = 5; // Количество светодиодов
  5. const int DLed[leds] = {9, 8, 7, 6, 5}; // Номера выводов светодиодов
  6. const int res = 48; // "Разрешение" одного канала (от 1 до 64/leds*10)
  7. const int lev[leds] = {6, 4, 4, 4, 4}; // Уровень срабатывания светодиодов (подбирается по уровню входа)
  8. char im[128], data[128];
  9. char data_avgs[leds];
  10. int i, val, barsdiv;
  11.  
  12.  
  13. void setup() {
  14.   ADCSRA = (1<<ADEN)|(1<<ADPS0)|(0<<ADPS1)|(1<<ADPS2); // sps=500k ~f=10k
  15.   barsdiv = 64 / leds; // Отношение 64-х столбцов спектра к количеству светодиодов
  16.   for (i = 0; i < leds; i++) {
  17.     pinMode(DLed[i], OUTPUT);
  18.   }
  19.   Serial.begin(57600);
  20. }
  21.  
  22.  
  23. void loop() {
  24.  
  25.   for (i = 0; i < 128; i++) {
  26.     val = analogRead(AUDIOPIN);
  27.     data[i] = val;// / 4 - 128;
  28.     im[i] = 0;
  29.   };
  30.  
  31.  
  32.   fix_fft(data, im, 7, 0);
  33.  
  34.   for (i = 0; i < 64; i++) {
  35.     data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);  // this gets the absolute value of the values in the array, so we're only dealing with positive numbers
  36.   };
  37.  
  38.  
  39.   // Усредняем 64 полученых значения до количества светодиодов
  40.  
  41.   for (i = 0; i < leds; i++) {
  42.     for (val = 0; val < barsdiv; val++) {
  43.       data_avgs[i] = data_avgs[i] + data[i * barsdiv + val]; // Суммируем значения спектра для одного светодиода
  44.     }
  45.  
  46.     data_avgs[i] = map(data_avgs[i], 0, 10 * barsdiv, 0, res);
  47.  
  48.     Serial.println(data_avgs[1],DEC); // Рисуем в serial plotter значение уровня канала
  49.  
  50.     // Let be the light!
  51.    
  52.     if (data_avgs[i] > lev[i]) {
  53.       digitalWrite(DLed[i], 1);       // set the LED on
  54.     } else {
  55.       digitalWrite(DLed[i], 0);      // set the LED off
  56.     }
  57.   }
  58.  
  59.  
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement