Guest User

Untitled

a guest
Jun 17th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. #define RESET 5
  2. #define STROBE 4
  3. #define BANDS 7
  4. #define MAX_CUTOFF 200
  5. #define MIN_CUTOFF 90
  6.  
  7. struct spectrumShield {
  8.  
  9. uint16_t lvls[2][BANDS] = {{0}};
  10. uint16_t maxs[2][BANDS] = {{MAX_CUTOFF}};
  11.  
  12. void begin(void) {
  13. pinMode(RESET, OUTPUT);
  14. pinMode(STROBE, OUTPUT);
  15. digitalWrite(STROBE, LOW); delay(1);
  16. digitalWrite(RESET, HIGH); delay(1);
  17. digitalWrite(STROBE, HIGH); delay(1);
  18. digitalWrite(STROBE, LOW); delay(1);
  19. digitalWrite(RESET, LOW); delay(5);
  20. for (byte band = 0; band < BANDS; band++) {
  21. maxs[0][band] = MAX_CUTOFF + 1;
  22. maxs[1][band] = MAX_CUTOFF + 1;
  23. }
  24. }
  25.  
  26. void read(void) {
  27. for (byte band = 0; band < BANDS; band++) {
  28. for (byte channel = 0; channel < 2; channel++) {
  29.  
  30. if (maxs[channel][band] > MAX_CUTOFF) maxs[channel][band]--;
  31. if (lvls[channel][band] > 8) lvls[channel][band] -= lvls[channel][band] >> 3; // Fade by subtracting a proportion
  32. else lvls[channel][band] = 0;
  33.  
  34. uint16_t level = (analogRead(channel) + analogRead(channel)) >> 1;
  35. level = level > MIN_CUTOFF ? map(level, MIN_CUTOFF, 1023, 0, 1023) : 0;
  36.  
  37. uint32_t ratio = 1023;
  38.  
  39. if (level < maxs[channel][band]) {
  40. for (byte power = 0; power < 7; power++) {
  41. ratio *= level; // Raise ratio to power without overflow
  42. ratio /= maxs[channel][band];
  43. }
  44. }
  45. else maxs[channel][band] = level;
  46.  
  47. if (ratio > lvls[channel][band]) {
  48. lvls[channel][band] = ratio;
  49. // lvls[channel][band] >>= 1;
  50. }
  51.  
  52. }
  53.  
  54. digitalWrite(STROBE, HIGH);
  55. digitalWrite(STROBE, LOW);
  56.  
  57.  
  58. // Serial.print((1023 * (lvls[0][band] + 1)) >> 10);
  59. // Serial.print("/");
  60. // Serial.print(maxs[0][band]);
  61. // Serial.print("\t");
  62. }
  63. // Serial.println();
  64. }
  65. } FFT;
Add Comment
Please, Sign In to add comment