#include "FastLED.h"
// Matrix size
#define LED_COLS 40
#define LED_ROWS 40
#define NUM_LEDS LED_COLS * LED_ROWS
#define MATRIX_TYPE 1
// LEDs pin
#define DATA_PIN 3
// LED brightness
#define BRIGHTNESS 255
// Define the array of leds
CRGB leds[NUM_LEDS];

void draw() {
  uint16_t t = millis() / 60;
  for (uint8_t x = 0; x < LED_COLS; x++) {
    for (uint8_t y = 0; y < LED_ROWS; y++) {
      CRGB col;
      col.r = sin8((x + t) - y);
      col.g = sin8((x - t) + (y - t));
      col.b = sin8(x + (y + t));
      leds[XY(x, y)] = col;
    }
  }
}

void setup() {
  FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
  draw();
  FastLED.show();
} //loop


uint16_t XY (uint8_t x, uint8_t y) {

  if ((y % 2 == 0) || MATRIX_TYPE)                     // если чётная строка
  {
    return ((uint32_t)(y  + 1) * LED_COLS - 1 - x) % (LED_COLS * LED_ROWS);
  }
  else                                                      // если нечётная строка
  {
    return ((uint32_t)y  * LED_COLS + LED_ROWS - x - 1) % (LED_COLS * LED_ROWS);
  }
}