#include #include "xtensa/core-macros.h" #include #include "main.h" #define R1 42 #define G1 40 #define BL1 41 #define R2 38 #define G2 37 #define BL2 39 #define CH_A 45 #define CH_B 36 #define CH_C 48 #define CH_D 35 #define CH_E 21 #define CLK 2 #define LAT 47 #define OE 14 #define PIN_E 21 #define PANEL_WIDTH 64 #define PANEL_HEIGHT 32 // Panel height of 64 will required PIN_E to be defined. #define PANELS_NUMBER 1 #define PANE_WIDTH PANEL_WIDTH * PANELS_NUMBER #define PANE_HEIGHT PANEL_HEIGHT #define NUM_LEDS PANE_WIDTH*PANE_HEIGHT #define ONBOARD_LED 13 MatrixPanel_I2S_DMA *matrix = nullptr; int start_x = 5; int start_y = 5; int end_x = 59; int end_y = 27; int anchor_x = 16; int anchor_y = 24; void setup(){ Serial.begin(BAUD_RATE); pinMode(ONBOARD_LED, OUTPUT); // redefine pins if required 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(PANEL_WIDTH, PANEL_HEIGHT, PANELS_NUMBER, _pins); mxconfig.gpio.e = PIN_E; mxconfig.driver = HUB75_I2S_CFG::FM6126A; // for panels using FM6126A chips mxconfig.latch_blanking = 4; mxconfig.i2sspeed = HUB75_I2S_CFG::HZ_10M; mxconfig.clkphase = false; //mxconfig.double_buff = true; matrix = new MatrixPanel_I2S_DMA(mxconfig); matrix->begin(); matrix->setBrightness8(64); matrix->fillScreenRGB888(0, 0, 0); } int interpolate(int from, int to, float percent) { int difference = to - from; return from + ( difference * percent ); } void draw_bezier(int x1, int y1, int x2, int y2, int x3, int y3, float percent) { // draw lines to p2 matrix->drawLine(x1, y1, x2, y2, matrix->color565(16, 16, 16)); matrix->drawLine(x2, y2, x3, y3, matrix->color565(16, 16, 16)); int xa = interpolate(x1, x2, percent); int ya = interpolate(y1, y2, percent); int xb = interpolate(x2, x3, percent); int yb = interpolate(y2, y3, percent); //matrix->drawLine(xa, ya, xb, yb, matrix->color565(0, 128, 0)); int x = interpolate(xa, xb, percent); int y = interpolate(ya, yb, percent); matrix->drawPixel(x, y, matrix->color565(255, 255, 255)); } void loop() { // matrix ->flipDMABuffer(); matrix->clearScreen(); // delay(25); anchor_y += 1; if (anchor_y >= 32) { anchor_y = 0; } for (float i = 0; i < 1; i += 0.02) { draw_bezier(start_x, start_y, anchor_x, anchor_y, end_x, end_y, i); } matrix->drawPixel(start_x, start_y, matrix->color565(255, 0, 0)); matrix->drawPixel(end_x, end_y, matrix->color565(255, 0, 0)); matrix->drawPixel(anchor_x, anchor_y, matrix->color565(255, 0, 255)); delay(100); }