#include #include #include #define LED_PIN D3 #define LED_TYPE WS2812B #define COLOR_ORDER GRB /* ** ** https://github.com/FastLED/ ** https://github.com/gmoehrke/FastFX ** https://www.reddit.com/r/FastLED/wiki/index/user_examples ** https://macetech.github.io/FastLED-XY-Map-Generator/ ** */ #define amarillo CRGB::Yellow #define negro CRGB::Black #define rojo CRGB::Red #define azul CRGB::Blue #define morado CRGB::Purple #define naranja CRGB::OrangeRed #define verde CRGB::Green #define aguamarina CRGB::Cyan #define rosado CRGB::Fuchsia #define verdedos CRGB::LimeGreen #define raro CRGB::DarkOrchid #define rarodos CRGB::DeepPink #define maplv1 0x00FF00 #define maplv2 0x00AA00 #define maplv3 0xFFFF00 #define maplv4 0xFFE994 #define maplv5 0xFFAA00 #define maplv6 0xEC9BA4 #define maplv7 0xE1AA00 #define maplv8 0xFF00FF #define maplv9 0x00DAFE #define maplv10 0x0181FE const uint8_t matrixWidth = 8; const uint8_t matrixHeight = 8; #define NUM_LEDS (matrixWidth * matrixHeight) int BRIGHTNESS = 10; CRGB leds[matrixWidth * matrixHeight]; const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz) unsigned int sample; class Matrix { CRGB *leds = NULL; uint8_t numLeds = 0; uint8_t currBrightness = 0; public: Matrix(CRGB *initLeds, uint8_t initNum) { leds = initLeds; numLeds = initNum; } // fill all matrix with same color void fill(CRGB color) { for (int i = 0; i < 64; i++) { leds[i] = color; } }; // fill a binary shape with same color // { // B00000000, // B10101010, // B00000000, // B10101010, // B00000000, // B10101010, // B00000000, // B10101010 // }; void fill(CRGB color, byte *shape) { for (int i = 0; i < matrixHeight; i++) { for (int j = 0; j < matrixWidth; j++) { if (shape[i] & 1 << j) { // if bitwise AND resolves to leds[i * matrixHeight + j] = color; // send 1 } } } }; // fill color shape void fill(CRGB color_shape[][8]) { for (int i = 0; i < matrixHeight; i++) { for (int j = 0; j < matrixWidth; j++) { leds[i * matrixHeight + j] = color_shape[i][j]; // send 1 } } }; // fill row with color void fill_y(CRGB color, int row) { for (int j = 0; j < matrixWidth; j++) { leds[row * matrixHeight + j] = color; // send 1 } }; void fill_y_until(CRGB color_shape[][8], int until) { for (int i = 0; i < until; i++) { for (int j = 0; j < matrixWidth; j++) { leds[i * matrixHeight + j] = color_shape[i][j]; // send 1 } } }; // fille column with color void fill_x(CRGB color, int column) { for (int i = 0; i < matrixHeight; i++) { leds[i * matrixHeight + column] = color; // send 1 } }; void fill_x_until(CRGB color_shape[][8], int until) { for (int i = 0; i < matrixHeight; i++) { for (int j = 0; j < until; j++) { leds[i * matrixHeight + j] = color_shape[i][j]; // send 1 } } }; // of array in matrix int sound_scale(); // return the actual level of sound intensity void color_scale(int sl); // return color for 10 levels of sound intensity }; Matrix *mym; byte sshape[8] = {B00000000, B10101010, B00000000, B10101010, B00000000, B10101010, B00000000, B10101010}; CRGB matrix[8][8] = { {maplv2, maplv2, negro, negro, negro, negro, negro, negro}, {maplv3, maplv3, maplv3, negro, negro, negro, negro, negro}, {maplv4, maplv4, maplv4, maplv4, negro, negro, negro, negro}, {maplv5, maplv5, maplv5, maplv5, maplv5, negro, negro, negro}, {maplv6, maplv6, maplv6, maplv6, maplv6, maplv6, negro, negro}, {maplv7, maplv7, maplv7, maplv7, maplv7, maplv7, maplv7, negro}, {maplv8, maplv8, maplv8, maplv8, maplv8, maplv8, maplv8, maplv8}, {maplv9, maplv9, maplv9, maplv9, maplv9, maplv9, maplv9, maplv9}, }; unsigned int sample_sound() { unsigned long startMillis = millis(); // Start of sample window unsigned int peakToPeak = 0; unsigned int signalMax = 0; unsigned int signalMin = 1024; // collect data for 50 mS while (millis() - startMillis < sampleWindow) { sample = analogRead(0); if (sample < 1024) { if (sample > signalMax) { signalMax = sample; } else if (sample < signalMin) { signalMin = sample; } } } peakToPeak = signalMax - signalMin; return peakToPeak; } void setup() { Serial.begin(115200); LEDS.addLeds(leds, NUM_LEDS); mym = new Matrix(leds, 64); FastLED.setBrightness(BRIGHTNESS); } void loop() { int sample = sample_sound(); // tomado de https://forum.arduino.cc/t/map-but-log/379910/3 int logmaplv = log(sample + 1) / log(900) * 9; Serial.println(logmaplv); for (int i = 0; i <= logmaplv; i++) { mym->fill_y_until(matrix, i); FastLED.show(); FastLED.delay(30); } FastLED.clear(); }