kopia lustrzana https://github.com/donnersm/FFT_ESP32_Analyzer
156 wiersze
8.6 KiB
C
156 wiersze
8.6 KiB
C
|
/********************************************************************************************************************************************************
|
||
|
* *
|
||
|
* Project: FFT Spectrum Analyzer *
|
||
|
* Target Platform: ESP32 *
|
||
|
* *
|
||
|
* Version: 1.0 *
|
||
|
* Hardware setup: See github *
|
||
|
* Spectrum analyses done with analog chips MSGEQ7 *
|
||
|
* *
|
||
|
* Mark Donners *
|
||
|
* The Electronic Engineer *
|
||
|
* Website: www.theelectronicengineer.nl *
|
||
|
* facebook: https://www.facebook.com/TheelectronicEngineer *
|
||
|
* youtube: https://www.youtube.com/channel/UCm5wy-2RoXGjG2F9wpDFF3w *
|
||
|
* github: https://github.com/donnersm *
|
||
|
* *
|
||
|
********************************************************************************************************************************************************/
|
||
|
|
||
|
|
||
|
#pragma once
|
||
|
#include "Settings.h"
|
||
|
/* There are several options to display the data from the FFT.
|
||
|
* 1. Use a ledstrip like WS2812 or simular
|
||
|
* 2. Use a Hub75 display
|
||
|
* 3. Using both is possible but not recommended because of the required speed.
|
||
|
*/
|
||
|
|
||
|
// select one of these and comment out the other
|
||
|
//#define Ledstrip
|
||
|
#define HUB75
|
||
|
|
||
|
//Panel settings change to match your setup
|
||
|
#ifdef HUB75
|
||
|
#define PANEL_WIDTH 64
|
||
|
#define PANEL_HEIGHT 64 // Panel height of 64 will required PIN_E to be defined.
|
||
|
#define PANELS_NUMBER 2 // Number of chained panels, if just a single panel, obviously set to 1
|
||
|
// only need to match panel settings above
|
||
|
#define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER
|
||
|
#define PANE_HEIGHT PANEL_HEIGHT
|
||
|
const uint8_t kMatrixWidth = PANEL_WIDTH * PANELS_NUMBER; // Matrix width --> number of columns in your led matrix
|
||
|
const uint8_t kMatrixHeight = PANEL_HEIGHT; // Matrix height --> number of leds per column
|
||
|
#endif
|
||
|
|
||
|
|
||
|
|
||
|
// Ledstrip settings
|
||
|
#define CHIPSET WS2812B // LED strip type
|
||
|
#define LED_PIN 21 // LED strip data
|
||
|
//#define SERPENTINE false // Set to false if you're LEDS are connected end to end, true if serpentine
|
||
|
#define COLOR_ORDER GRB // If colours look wrong, play with this
|
||
|
#define LED_VOLTS 5 // Usually 5 or 12
|
||
|
#define MAX_MILLIAMPS 2000 // Careful with the amount of power here if running off USB port
|
||
|
#ifdef Ledstrip
|
||
|
const uint8_t kMatrixWidth =32;//128; // Matrix width --> number of columns in your led matrix
|
||
|
const uint8_t kMatrixHeight = 16;//64; // Matrix height --> number of leds per column
|
||
|
#define PANE_WIDTH kMatrixWidth
|
||
|
#endif
|
||
|
|
||
|
#define BAR_WIDTH (kMatrixWidth /(numBands )) // If width >= 8 light 1 LED width per bar, >= 16 light 2 LEDs width bar etc
|
||
|
#define TOP (kMatrixHeight - 0) // Don't allow the bars to go offscreen
|
||
|
#define NeededWidth (BAR_WIDTH * numBands) // we need this to see if all bands fit or that we have left over space
|
||
|
#define NUM_LEDS (kMatrixWidth * kMatrixHeight) // Total number of LEDs
|
||
|
CRGB leds[NUM_LEDS];
|
||
|
|
||
|
//***********************************************************************
|
||
|
// These are the settings for the Hub75 display
|
||
|
// pin settings, dont change unless you are using customized hardware
|
||
|
//***********************************************************************
|
||
|
|
||
|
#define A_PIN 23
|
||
|
#define B_PIN 19
|
||
|
#define C_PIN 5
|
||
|
#define D_PIN 17
|
||
|
#define E_PIN 22
|
||
|
#define LAT_PIN 18
|
||
|
#define OE_PIN 15
|
||
|
#define CLK_PIN 16
|
||
|
#define R1_PIN 33
|
||
|
#define B2_PIN 13
|
||
|
#define R2_PIN 14
|
||
|
#define G2_PIN 12
|
||
|
#define G1_PIN 26
|
||
|
#define B1_PIN 27
|
||
|
|
||
|
|
||
|
#ifdef HUB75
|
||
|
// placeholder for the matrix object
|
||
|
MatrixPanel_I2S_DMA *dma_display = nullptr;
|
||
|
#endif
|
||
|
|
||
|
|
||
|
// See manual if you need to change these settings
|
||
|
#ifdef Ledstrip
|
||
|
// FastLED_NeoMaxtrix - see https://github.com/marcmerlin/FastLED_NeoMatrix for Tiled Matrixes, Zig-Zag and so forth
|
||
|
FastLED_NeoMatrix *matrix = new FastLED_NeoMatrix(leds, kMatrixWidth, kMatrixHeight,
|
||
|
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
|
||
|
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG +
|
||
|
NEO_TILE_TOP + NEO_TILE_LEFT + NEO_TILE_ROWS);
|
||
|
|
||
|
/* // this one is used if you are using a ledstrip setup simular to the one from the acryllic spectrum analyzer
|
||
|
FastLED_NeoMatrix *matrix = new FastLED_NeoMatrix(leds, kMatrixWidth, kMatrixHeight,
|
||
|
NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT +
|
||
|
NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE +
|
||
|
NEO_TILE_TOP + NEO_TILE_LEFT + NEO_TILE_ROWS);
|
||
|
*/
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// See manual if you need to change these settings
|
||
|
void SetupHUB75(void){
|
||
|
#ifdef HUB75
|
||
|
HUB75_I2S_CFG mxconfig;
|
||
|
mxconfig.mx_height = PANEL_HEIGHT; // we have 64 pix heigh panels
|
||
|
mxconfig.mx_width = PANEL_WIDTH;
|
||
|
mxconfig.chain_length = PANELS_NUMBER; // we have 2 panels chained
|
||
|
mxconfig.gpio.e = E_PIN; // we MUST assign pin e to some free pin on a board to drive 64 pix height panels with 1/32 scan
|
||
|
mxconfig.gpio.r1 =R1_PIN;
|
||
|
mxconfig.gpio.g1 = G1_PIN;
|
||
|
mxconfig.gpio.b1 = B1_PIN;
|
||
|
mxconfig.gpio.r2 = R2_PIN;
|
||
|
mxconfig.gpio.g2 = G2_PIN;
|
||
|
mxconfig.gpio.b2 = B2_PIN;
|
||
|
mxconfig.gpio.a = A_PIN;
|
||
|
mxconfig.gpio.b = B_PIN;
|
||
|
mxconfig.gpio.c = C_PIN;
|
||
|
mxconfig.gpio.d = D_PIN;
|
||
|
mxconfig.gpio.e = E_PIN;
|
||
|
mxconfig.gpio.lat = LAT_PIN;
|
||
|
mxconfig.gpio.oe = OE_PIN;
|
||
|
mxconfig.gpio.clk = CLK_PIN;
|
||
|
mxconfig.driver = HUB75_I2S_CFG::MBI5124; // in case that we use panels based on FM6126A chip, we can change that
|
||
|
mxconfig.clkphase = true; // some panels need a reversed clockpulse I first encountered it in batch may 2021 PH3 64*64 V4.1 HX
|
||
|
mxconfig.latch_blanking = 4;
|
||
|
//mxconfig.i2sspeed = HUB75_I2S_CFG::HZ_20M;
|
||
|
// OK, now we can create our matrix object
|
||
|
dma_display = new MatrixPanel_I2S_DMA(mxconfig);
|
||
|
// dma_display->setLatBlanking(2);
|
||
|
// let's adjust default brightness to about xx%
|
||
|
dma_display->setBrightness8(50); // range is 0-255, 0 - 0%, 255 - 100%
|
||
|
//dma_display->setBrightness8(map(analogRead(BRIGHTNESSPOT),0,4095,10,BRIGHTNESSMAX));
|
||
|
// Allocate memory and start DMA display
|
||
|
if( not dma_display->begin() )
|
||
|
Serial.println("****** !KABOOM! I2S memory allocation failed ***********");
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
void SetupLEDSTRIP(void){
|
||
|
#ifdef Ledstrip
|
||
|
FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
|
||
|
FastLED.setMaxPowerInVoltsAndMilliamps(LED_VOLTS, MAX_MILLIAMPS);
|
||
|
FastLED.setBrightness(BRIGHTNESSMARK);
|
||
|
FastLED.clear();
|
||
|
#endif
|
||
|
}
|