#include <FastLED.h>
#define LED_PIN 5
#define BUZZER_PIN 7
#define NUM_LEDS 50
#define BUTTON_PIN1 2
#define BUTTON_PIN2 3
#define DELAY_MS 50
#define RED_BUTTON_FREQ 100
#define GREEN_BUTTON_FREQ 200
CRGB leds[NUM_LEDS];
int ledCount1 = 0;
int ledCount2 = 0;
bool buttonState1 = false;
bool lastButtonState1 = false;
bool buttonState2 = false;
bool lastButtonState2 = false;
bool isRedButtonPressed = false;
bool isGreenButtonPressed = false;
void setup() {
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
pinMode(BUTTON_PIN1, INPUT_PULLUP);
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
}
void loop() {
buttonState1 = digitalRead(BUTTON_PIN1) == LOW;
buttonState2 = digitalRead(BUTTON_PIN2) == LOW;
if (buttonState1 != lastButtonState1) {
if (buttonState1) {
ledCount1++;
if (ledCount1 > NUM_LEDS) {
ledCount1 = NUM_LEDS;
}
isRedButtonPressed = true;
tone(BUZZER_PIN, RED_BUTTON_FREQ);
}
lastButtonState1 = buttonState1;
}
if (buttonState2 != lastButtonState2) {
if (buttonState2) {
ledCount2++;
if (ledCount2 > NUM_LEDS) {
ledCount2 = NUM_LEDS;
}
isGreenButtonPressed = true;
tone(BUZZER_PIN, GREEN_BUTTON_FREQ);
}
lastButtonState2 = buttonState2;
}
FastLED.clear();
for (int i = 0; i < ledCount1; i++) {
leds[i] = CRGB::Green;
}
for (int i = NUM_LEDS - 1; i >= NUM_LEDS - ledCount2; i--) {
leds[i] = CRGB::Red;
}
if ((ledCount1 + ledCount2) >= NUM_LEDS) {
if (ledCount1 > ledCount2) {
// Call your greenChaserEffect function here
} else if (ledCount2 > ledCount1) {
// Call your redChaserEffect function here
} else {
// Call your tieChaserEffect function here
}
ledCount1 = 0;
ledCount2 = 0;
}
FastLED.show();
if (isRedButtonPressed || isGreenButtonPressed) {
delay(50);
noTone(BUZZER_PIN);
isRedButtonPressed = false;
isGreenButtonPressed = false;
}
delay(50);
}
void tieChaserEffect() {
for (int i = 0; i < NUM_LEDS / 2; i++) {
leds[i] = CRGB::Red;
FastLED.show();
delay(DELAY_MS);
}
for (int i = NUM_LEDS - 1; i >= NUM_LEDS / 2; i--) {
leds[i] = CRGB::Green;
FastLED.show();
delay(DELAY_MS);
}
}
void greenChaserEffect() {
for (int i = 0; i < ledCount1; i++) {
leds[i] = CRGB::Green;
}
FastLED.show();
for (int i = ledCount1; i < NUM_LEDS; i++) {
leds[i] = CRGB::Green;
FastLED.show();
delay(DELAY_MS);
}
}
void redChaserEffect() {
for (int i = NUM_LEDS - 1; i >= NUM_LEDS - ledCount2; i--) {
leds[i] = CRGB::Red;
}
FastLED.show();
for (int i = ledCount2; i > 0; i--) {
leds[i] = CRGB::Red;
FastLED.show();
delay(DELAY_MS);
}
}