123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #include <Adafruit_NeoPixel.h>
- #ifdef __AVR__
- #include <avr/power.h>
- #endif
-
- #define NUMLEDS 1
- #define LEDPIN 8
- #define MICPIN A9
- #define FAKEVCCPIN 6
-
-
- Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMLEDS, LEDPIN, NEO_GRB + NEO_KHZ800);
-
- #define BUFFSIZE 115
- #define AVGSIZE 23
-
- int rawBuff[BUFFSIZE];
- int notHighBuff[BUFFSIZE];
- int lowBuff[BUFFSIZE];
- int index, minLow, maxLow, minMid, maxMid, minHigh, maxHigh;
-
- #define RAWLOW(i) (lowBuff[i])
- #define RAWMID(i) (notHighBuff[i]-lowBuff[i])
- #define RAWHIGH(i) (rawBuff[i]-notHighBuff[i])
-
- #define NORMLOW(i) constrain(map(RAWLOW(i), minLow, maxLow, 0, 255), 0, 255)
- #define NORMMID(i) constrain(map(RAWMID(i), minMid, maxMid, 0, 255), 0, 255)
- #define NORMHIGH(i) constrain(map(RAWHIGH(i), minHigh, maxHigh, 0, 255), 0, 255)
-
- void setup() {
- pinMode(FAKEVCCPIN, OUTPUT);
- digitalWrite(FAKEVCCPIN, HIGH);
- index = 0;
- strip.begin();
- strip.show(); // Initialize all pixels to 'off'
- for (int i = 0; i < BUFFSIZE; i++) {
- rawBuff[i] = notHighBuff[i] = lowBuff[i] = 512;
- }
- }
-
- void loop() {
- rawBuff[index] = analogRead(MICPIN);
- notHighBuff[index] = 0;
- int nextIndex = (index + 1) % BUFFSIZE;
- for (int i = nextIndex + BUFFSIZE - AVGSIZE; i % BUFFSIZE != nextIndex; i++) {
- notHighBuff[index] += rawBuff[i % BUFFSIZE];
- }
- notHighBuff[index] /= AVGSIZE;
- lowBuff[index] = (notHighBuff[index] + notHighBuff[(index + BUFFSIZE - AVGSIZE) % BUFFSIZE]) / 2;
- minLow = minMid = minHigh = 1024;
- maxLow = maxMid = maxHigh = -1;
- for (int i = 0; i < BUFFSIZE; i++) {
- minLow = min(minLow, RAWLOW(i));
- minMid = min(minMid, RAWMID(i));
- minHigh = min(minHigh, RAWHIGH(i));
- maxLow = max(maxLow, RAWLOW(i));
- maxMid = max(maxMid, RAWMID(i));
- maxHigh = max(maxHigh, RAWHIGH(i));
- }
- strip.setPixelColor(0, strip.Color(NORMHIGH(index), NORMMID(index), NORMLOW(index)));
- strip.show();
- index = nextIndex;
- };
|