#include <FastLED.h>
// This was copy/pasted from my TestSoulmate Waves dbg, which didn't work, to this new project
// both sketch.ino and diagram.json
// Alas, the other project didn't display anything, this does
// I had tried changing diagram.json to use
// "type": "wokwi-led-matrix",
// rather than
// "type": "wokwi-neopixel-canvas",
// and it gave no errors but displayed only black. Maybe wokwi sometimes doesn't change
// everything when you edit diagram.json?
#define BRIGHTNESS 255
#define ROWS 16
#define COLS 16
#define N_LEDS (ROWS*COLS)
CRGB leds[N_LEDS];
void setup() {
// put your setup code here, to run once:
//Serial.begin(115200);
//Serial.println("Hello, ESP32!");
FastLED.addLeds<WS2812B, 12, GRB>(leds, N_LEDS);
FastLED.setBrightness( BRIGHTNESS );
}
// Your pattern code goes here.
// This draw() function is called repeatedly and the LEDs will be
// printed after every loop.
//
// Some helpful variables:
// ROWS: number of rows
// COLS: number of columns
// N_LEDS: total number of LEDs (LED_COLS * LED_ROWS)
// leds: the LED array to print to
//
// You can also use:
// uint16_t gridIndexHorizontal(x, y) - the index of a given x/y coordinate
// uint8_t beatsin8(bpm, minimum, maximum, offset) - an 8-bit sine wave
//
// For more information, visit https://github.com/FastLED/FastLED/wiki/Overview
#define LED_ROWS ROWS
#define LED_COLS COLS
#define SOULMATE_SERPENTINE 1
#define SOULMATE_MIRROR 0
#define SOULMATE_REVERSE 0
int16_t gridIndexHorizontal(int16_t x, int16_t y) {
if (y > LED_ROWS) return -1;
if (x > LED_COLS) return -1;
if (x < 0) return -1;
if (y < 0) return -1;
int16_t xIndex = x;
// Serpentine row
bool oddRow = y % 2 != 1;
if (SOULMATE_SERPENTINE && oddRow) {
xIndex = LED_COLS - 1 - xIndex;
}
// Mirrored left-to-right
// Don't apply if we're reversing it (reversing does the same)
if (SOULMATE_MIRROR && !SOULMATE_REVERSE) {
xIndex = LED_COLS - 1 - xIndex;
}
int16_t index = y * LED_COLS + xIndex;
if (index > -1 && index < N_LEDS) {
return index;
}
return -1;
}
uint16_t XY(uint8_t x, uint8_t y) {
// return (y * LED_COLS) + x;
return gridIndexHorizontal(x, y);
}
void draw() {
static uint8_t off = 0;
for(uint8_t i = 0; i<COLS; i++) {
for(uint8_t j = 0; j<ROWS; j++){
int k = gridIndexHorizontal(i,j);
uint8_t t = beatsin8(1*256, N_LEDS/4, N_LEDS/4*3); // Move 1/4 to 3/4
//leds[k] = CHSV(uint8_t(100), 255, 255);
leds[k] = CHSV(uint8_t(t*3+i*16+j*16+off), 255, 255);
}
}
off++;
}
void loop() {
FastLED.delay(100); // this speeds up the simulation
draw();
FastLED.show();
FastLED.setBrightness( BRIGHTNESS );
}