Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/AlexGyver/Arduino_Ambilight.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Библиотеки/FastLED-master/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino')
-rw-r--r--Библиотеки/FastLED-master/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino136
1 files changed, 136 insertions, 0 deletions
diff --git a/Библиотеки/FastLED-master/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino b/Библиотеки/FastLED-master/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino
new file mode 100644
index 0000000..24f2394
--- /dev/null
+++ b/Библиотеки/FastLED-master/examples/Ports/PJRCSpectrumAnalyzer/PJRCSpectrumAnalyzer.ino
@@ -0,0 +1,136 @@
+// LED Audio Spectrum Analyzer Display
+//
+// Creates an impressive LED light show to music input
+// using Teensy 3.1 with the OctoWS2811 adaptor board
+// http://www.pjrc.com/store/teensy31.html
+// http://www.pjrc.com/store/octo28_adaptor.html
+//
+// Line Level Audio Input connects to analog pin A3
+// Recommended input circuit:
+// http://www.pjrc.com/teensy/gui/?info=AudioInputAnalog
+//
+// This example code is in the public domain.
+
+#define USE_OCTOWS2811
+#include <OctoWS2811.h>
+#include <FastLED.h>
+#include <Audio.h>
+#include <Wire.h>
+#include <SD.h>
+#include <SPI.h>
+
+// The display size and color to use
+const unsigned int matrix_width = 60;
+const unsigned int matrix_height = 32;
+const unsigned int myColor = 0x400020;
+
+// These parameters adjust the vertical thresholds
+const float maxLevel = 0.5; // 1.0 = max, lower is more "sensitive"
+const float dynamicRange = 40.0; // total range to display, in decibels
+const float linearBlend = 0.3; // useful range is 0 to 0.7
+
+CRGB leds[matrix_width * matrix_height];
+
+// Audio library objects
+AudioInputAnalog adc1(A3); //xy=99,55
+AudioAnalyzeFFT1024 fft; //xy=265,75
+AudioConnection patchCord1(adc1, fft);
+
+
+// This array holds the volume level (0 to 1.0) for each
+// vertical pixel to turn on. Computed in setup() using
+// the 3 parameters above.
+float thresholdVertical[matrix_height];
+
+// This array specifies how many of the FFT frequency bin
+// to use for each horizontal pixel. Because humans hear
+// in octaves and FFT bins are linear, the low frequencies
+// use a small number of bins, higher frequencies use more.
+int frequencyBinsHorizontal[matrix_width] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
+ 3, 3, 3, 3, 4, 4, 4, 4, 4, 5,
+ 5, 5, 6, 6, 6, 7, 7, 7, 8, 8,
+ 9, 9, 10, 10, 11, 12, 12, 13, 14, 15,
+ 15, 16, 17, 18, 19, 20, 22, 23, 24, 25
+};
+
+
+
+// Run setup once
+void setup() {
+ // the audio library needs to be given memory to start working
+ AudioMemory(12);
+
+ // compute the vertical thresholds before starting
+ computeVerticalLevels();
+
+ // turn on the display
+ FastLED.addLeds<OCTOWS2811>(leds,(matrix_width * matrix_height) / 8);
+}
+
+// A simple xy() function to turn display matrix coordinates
+// into the index numbers OctoWS2811 requires. If your LEDs
+// are arranged differently, edit this code...
+unsigned int xy(unsigned int x, unsigned int y) {
+ if ((y & 1) == 0) {
+ // even numbered rows (0, 2, 4...) are left to right
+ return y * matrix_width + x;
+ } else {
+ // odd numbered rows (1, 3, 5...) are right to left
+ return y * matrix_width + matrix_width - 1 - x;
+ }
+}
+
+// Run repetitively
+void loop() {
+ unsigned int x, y, freqBin;
+ float level;
+
+ if (fft.available()) {
+ // freqBin counts which FFT frequency data has been used,
+ // starting at low frequency
+ freqBin = 0;
+
+ for (x=0; x < matrix_width; x++) {
+ // get the volume for each horizontal pixel position
+ level = fft.read(freqBin, freqBin + frequencyBinsHorizontal[x] - 1);
+
+ // uncomment to see the spectrum in Arduino's Serial Monitor
+ // Serial.print(level);
+ // Serial.print(" ");
+
+ for (y=0; y < matrix_height; y++) {
+ // for each vertical pixel, check if above the threshold
+ // and turn the LED on or off
+ if (level >= thresholdVertical[y]) {
+ leds[xy(x,y)] = CRGB(myColor);
+ } else {
+ leds[xy(x,y)] = CRGB::Black;
+ }
+ }
+ // increment the frequency bin count, so we display
+ // low to higher frequency from left to right
+ freqBin = freqBin + frequencyBinsHorizontal[x];
+ }
+ // after all pixels set, show them all at the same instant
+ FastLED.show();
+ // Serial.println();
+ }
+}
+
+
+// Run once from setup, the compute the vertical levels
+void computeVerticalLevels() {
+ unsigned int y;
+ float n, logLevel, linearLevel;
+
+ for (y=0; y < matrix_height; y++) {
+ n = (float)y / (float)(matrix_height - 1);
+ logLevel = pow10f(n * -1.0 * (dynamicRange / 20.0));
+ linearLevel = 1.0 - n;
+ linearLevel = linearLevel * linearBlend;
+ logLevel = logLevel * (1.0 - linearBlend);
+ thresholdVertical[y] = (logLevel + linearLevel) * maxLevel;
+ }
+}