2021-08-17 16:13:11 +02:00
|
|
|
#include <ESP32-HUB75-MatrixPanel-I2S-DMA.h>
|
|
|
|
|
|
|
|
/*--------------------- MATRIX GPIO CONFIG -------------------------*/
|
|
|
|
#define R1_PIN 25
|
|
|
|
#define G1_PIN 26
|
|
|
|
#define B1_PIN 27
|
|
|
|
#define R2_PIN 14
|
|
|
|
#define G2_PIN 12
|
|
|
|
#define B2_PIN 13
|
|
|
|
#define A_PIN 23
|
|
|
|
#define B_PIN 19 // Changed from library default
|
|
|
|
#define C_PIN 5
|
|
|
|
#define D_PIN 17
|
2019-05-11 16:20:53 +02:00
|
|
|
#define E_PIN -1
|
2021-08-17 16:13:11 +02:00
|
|
|
#define LAT_PIN 4
|
2019-05-11 16:20:53 +02:00
|
|
|
#define OE_PIN 15
|
2021-08-17 16:13:11 +02:00
|
|
|
#define CLK_PIN 16
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
|
2021-08-17 16:13:11 +02:00
|
|
|
/*--------------------- MATRIX PANEL CONFIG -------------------------*/
|
|
|
|
#define PANEL_RES_X 64 // Number of pixels wide of each INDIVIDUAL panel module.
|
|
|
|
#define PANEL_RES_Y 32 // Number of pixels tall of each INDIVIDUAL panel module.
|
|
|
|
#define PANEL_CHAIN 1 // Total number of panels chained one to another
|
|
|
|
|
|
|
|
/*
|
|
|
|
//Another way of creating config structure
|
|
|
|
//Custom pin mapping for all pins
|
|
|
|
HUB75_I2S_CFG::i2s_pins _pins={R1, G1, BL1, R2, G2, BL2, CH_A, CH_B, CH_C, CH_D, CH_E, LAT, OE, CLK};
|
|
|
|
HUB75_I2S_CFG mxconfig(
|
|
|
|
64, // width
|
|
|
|
64, // height
|
|
|
|
4, // chain length
|
|
|
|
_pins, // pin mapping
|
|
|
|
HUB75_I2S_CFG::FM6126A // driver chip
|
|
|
|
);
|
|
|
|
|
|
|
|
*/
|
|
|
|
MatrixPanel_I2S_DMA *dma_display = nullptr;
|
|
|
|
|
|
|
|
// Module configuration
|
|
|
|
HUB75_I2S_CFG mxconfig(
|
|
|
|
PANEL_RES_X, // module width
|
|
|
|
PANEL_RES_Y, // module height
|
|
|
|
PANEL_CHAIN // Chain length
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
//mxconfig.gpio.e = -1; // Assign a pin if you have a 64x64 panel
|
|
|
|
//mxconfig.clkphase = false; // Change this if you have issues with ghosting.
|
|
|
|
//mxconfig.driver = HUB75_I2S_CFG::FM6126A; // Change this according to your pane.
|
2019-05-11 16:20:53 +02:00
|
|
|
|
2021-02-10 16:49:19 +01:00
|
|
|
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
#include <FastLED.h>
|
|
|
|
|
|
|
|
#include "Effects.h"
|
|
|
|
Effects effects;
|
|
|
|
|
|
|
|
#include "Drawable.h"
|
|
|
|
#include "Playlist.h"
|
|
|
|
//#include "Geometry.h"
|
|
|
|
|
|
|
|
#include "Patterns.h"
|
|
|
|
Patterns patterns;
|
|
|
|
|
|
|
|
/* -------------------------- Some variables -------------------------- */
|
2020-12-01 17:28:17 +01:00
|
|
|
unsigned long fps = 0, fps_timer; // fps (this is NOT a matix refresh rate!)
|
|
|
|
unsigned int default_fps = 30, pattern_fps = 30; // default fps limit (this is not a matix refresh conuter!)
|
|
|
|
unsigned long ms_animation_max_duration = 20000; // 20 seconds
|
|
|
|
unsigned long last_frame=0, ms_previous=0;
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
void setup()
|
|
|
|
{
|
2021-08-17 16:13:11 +02:00
|
|
|
/************** SERIAL **************/
|
2019-05-11 16:20:53 +02:00
|
|
|
Serial.begin(115200);
|
|
|
|
delay(250);
|
2021-08-17 16:13:11 +02:00
|
|
|
|
|
|
|
/************** DISPLAY **************/
|
|
|
|
Serial.println("...Starting Display");
|
|
|
|
dma_display = new MatrixPanel_I2S_DMA(mxconfig);
|
|
|
|
dma_display->begin();
|
|
|
|
dma_display->setBrightness8(90); //0-255
|
|
|
|
|
|
|
|
dma_display->fillScreenRGB888(128,0,0);
|
|
|
|
delay(1000);
|
|
|
|
dma_display->fillScreenRGB888(0,0,128);
|
|
|
|
delay(1000);
|
|
|
|
dma_display->clearScreen();
|
|
|
|
delay(1000);
|
2019-05-11 16:20:53 +02:00
|
|
|
Serial.println("**************** Starting Aurora Effects Demo ****************");
|
|
|
|
|
2021-08-17 16:13:11 +02:00
|
|
|
|
2019-05-11 16:20:53 +02:00
|
|
|
// setup the effects generator
|
|
|
|
effects.Setup();
|
|
|
|
|
|
|
|
delay(500);
|
|
|
|
Serial.println("Effects being loaded: ");
|
|
|
|
listPatterns();
|
2021-08-17 16:13:11 +02:00
|
|
|
|
2019-05-11 16:20:53 +02:00
|
|
|
|
2020-12-01 17:28:17 +01:00
|
|
|
patterns.moveRandom(1); // start from a random pattern
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
Serial.print("Starting with pattern: ");
|
|
|
|
Serial.println(patterns.getCurrentPatternName());
|
2020-12-01 17:28:17 +01:00
|
|
|
patterns.start();
|
|
|
|
ms_previous = millis();
|
|
|
|
fps_timer = millis();
|
2019-05-11 16:20:53 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void loop()
|
|
|
|
{
|
|
|
|
// menu.run(mainMenuItems, mainMenuItemCount);
|
|
|
|
|
2020-12-01 17:28:17 +01:00
|
|
|
if ( (millis() - ms_previous) > ms_animation_max_duration )
|
|
|
|
{
|
2019-05-11 16:20:53 +02:00
|
|
|
patterns.stop();
|
2020-12-01 17:28:17 +01:00
|
|
|
patterns.moveRandom(1);
|
|
|
|
//patterns.move(1);
|
2019-05-11 16:20:53 +02:00
|
|
|
patterns.start();
|
|
|
|
|
|
|
|
Serial.print("Changing pattern to: ");
|
|
|
|
Serial.println(patterns.getCurrentPatternName());
|
|
|
|
|
2020-12-01 17:28:17 +01:00
|
|
|
ms_previous = millis();
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
// Select a random palette as well
|
|
|
|
//effects.RandomPalette();
|
|
|
|
}
|
|
|
|
|
2020-12-01 17:28:17 +01:00
|
|
|
if ( 1000 / pattern_fps + last_frame < millis()){
|
|
|
|
last_frame = millis();
|
|
|
|
pattern_fps = patterns.drawFrame();
|
|
|
|
if (!pattern_fps)
|
|
|
|
pattern_fps = default_fps;
|
|
|
|
|
|
|
|
++fps;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (fps_timer + 1000 < millis()){
|
2020-12-02 20:39:03 +01:00
|
|
|
Serial.printf_P(PSTR("Effect fps: %ld\n"), fps);
|
2020-12-01 17:28:17 +01:00
|
|
|
fps_timer = millis();
|
|
|
|
fps = 0;
|
|
|
|
}
|
2019-05-11 16:20:53 +02:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void listPatterns() {
|
|
|
|
patterns.listPatterns();
|
2021-08-17 16:13:11 +02:00
|
|
|
}
|