#include <Adafruit_NeoPixel.h>
#define LED_PIN 2
#define NUM_LEDS 16
#define RIGHT_PIN 4
#define LEFT_PIN 5
#define TWINKLE_PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
// Sequential orange light effect on power-up (2 times)
for (int i = 0; i < 2; i++) {
sequentialOrangeEffect();
}
pinMode(RIGHT_PIN, INPUT);
pinMode(LEFT_PIN, INPUT);
pinMode(TWINKLE_PIN, INPUT);
}
void loop() {
int rightSignal = digitalRead(RIGHT_PIN);
int leftSignal = digitalRead(LEFT_PIN);
int twinkleSignal = digitalRead(TWINKLE_PIN);
if (rightSignal == HIGH && leftSignal == HIGH) {
hazardEffect(); // Hazard effect if both signals are HIGH
} else if (rightSignal == HIGH) {
rightSequentialEffect();
} else if (leftSignal == HIGH) {
leftSequentialEffect();
} else if (twinkleSignal == HIGH) {
twinkleEffect();
} else {
strip.clear();
strip.show(); // Turn off the lights if no signal is received
}
}
void sequentialOrangeEffect() {
int delayTime = 50; // Adjust delay as needed
for (int i = 0; i < NUM_LEDS / 2; i++) {
strip.setPixelColor(NUM_LEDS / 2 - 1 - i, strip.Color(255, 165, 0)); // Left half
strip.setPixelColor(NUM_LEDS / 2 + i, strip.Color(255, 165, 0)); // Right half
strip.show();
delay(delayTime);
}
strip.clear();
strip.show();
}
void rightSequentialEffect() {
int delayTime = 100; // Quick response delay
for (int i = 0; i < NUM_LEDS / 2; i++) {
strip.setPixelColor(NUM_LEDS / 2 + i, strip.Color(255, 165, 0)); // Right half
strip.show();
delay(delayTime);
}
strip.clear();
strip.show();
}
void leftSequentialEffect() {
int delayTime = 100; // Quick response delay
for (int i = 0; i < NUM_LEDS / 2; i++) {
strip.setPixelColor(NUM_LEDS / 2 - 1 - i, strip.Color(255, 165, 0)); // Left half
strip.show();
delay(delayTime);
}
strip.clear();
strip.show();
}
void twinkleEffect() {
int delayTime = 500; // Adjust twinkle speed as needed
for (int i = 0; i < NUM_LEDS; i++) {
if (random(4) > 1) { // Random twinkle effect
strip.setPixelColor(i, strip.Color(255, 255, 255));
} else {
strip.setPixelColor(i, 0);
}
}
strip.show();
delay(delayTime);
}
void hazardEffect() {
int delayTime = 100; // Quick response delay
for (int i = 0; i < NUM_LEDS / 2; i++) {
strip.setPixelColor(NUM_LEDS / 2 - 1 - i, strip.Color(255, 165, 0)); // Left half
strip.setPixelColor(NUM_LEDS / 2 + i, strip.Color(255, 165, 0)); // Right half
strip.show();
delay(delayTime);
}
strip.clear();
strip.show();
}