#include <FastLED.h>
#define LED_PIN_1 1
#define LED_PIN_2 0
#define NUM_LEDS 32 // Reduced to 32 LEDs
#define BRIGHTNESS 64
#define LED_TYPE WS2811
#define COLOR_ORDER GRB
CRGB leds1[NUM_LEDS];
CRGB leds2[NUM_LEDS];
int paddlePos = 3;
int ballX = 3;
int ballY = 7;
int ballDirX = 1;
int ballDirY = -1;
bool bricks[NUM_LEDS];
void setup() {
FastLED.addLeds<LED_TYPE, LED_PIN_1, COLOR_ORDER>(leds1, NUM_LEDS);
FastLED.addLeds<LED_TYPE, LED_PIN_2, COLOR_ORDER>(leds2, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
for (int i = 0; i < 3 * 8; i++) {
bricks[i] = true;
}
for (int i = 3 * 8; i < NUM_LEDS; i++) {
bricks[i] = false;
}
}
void loop() {
fill_solid(leds1, NUM_LEDS, CRGB::Black);
fill_solid(leds2, NUM_LEDS, CRGB::Black);
leds1[paddlePos + 7 * 8] = CRGB::White;
leds1[paddlePos + 1 + 7 * 8] = CRGB::White;
leds1[paddlePos + 2 + 7 * 8] = CRGB::White;
leds1[ballX + ballY * 8] = CRGB::Red;
for (int i = 0; i < NUM_LEDS; i++) {
if (bricks[i]) {
leds1[i] = CRGB::Blue;
}
}
ballX += ballDirX;
ballY += ballDirY;
if (ballX < 0 || ballX > 7) {
ballDirX *= -1;
ballX += ballDirX;
}
if (ballY < 0) {
ballDirY *= -1;
ballY += ballDirY;
}
if (ballY > 7) {
ballX = 3;
ballY = 7;
ballDirY = -1;
ballDirX = 1;
for (int i = 0; i < 3 * 8; i++) {
bricks[i] = true;
}
}
if (ballY == 7 && ballX >= paddlePos && ballX <= paddlePos + 2) {
ballDirY *= -1;
ballY += ballDirY;
}
int brickIndex = ballX + ballY * 8;
if (bricks[brickIndex]) {
bricks[brickIndex] = false;
ballDirY *= -1;
ballY += ballDirY;
}
if (ballX < paddlePos + 1){
if (paddlePos > 0){
paddlePos--;
}
}
if (ballX > paddlePos + 1){
if (paddlePos < 5){
paddlePos++;
}
}
// Draw random points on the second screen
for (int i = 0; i < 5; i++) { // Draw 5 random points
int randomPixel = random(NUM_LEDS);
leds2[randomPixel] = CHSV(random(256), 255, 255);
}
FastLED.show();
delay(100);
}