#include <Adafruit_NeoPixel.h>
#define PIXEL_PIN 1
#define PIXEL_COUNT 24
Adafruit_NeoPixel strip = Adafruit_NeoPixel (PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800);
const int LeftTurnInput = 2;
const int RightTurnInput = 5;
const int StandbyInput = 3;
const int BrakeInput = 4;
const int LED = 9;
void setup() {
pinMode(LED, OUTPUT);
pinMode(LeftTurnInput, INPUT);
pinMode(RightTurnInput, INPUT);
pinMode(StandbyInput, INPUT);
pinMode(BrakeInput, INPUT);
strip.begin();
strip.show();
Serial.begin(9600);
}
void loop() {
strip.clear();
byte leftTurnState = (digitalRead(LeftTurnInput) == HIGH) ? 1 : 0;
byte rightTurnState = (digitalRead(RightTurnInput) == HIGH) ? 2 : 0;
byte standbyState = (digitalRead(StandbyInput) == HIGH) ? 4 : 0;
byte brakeState = (digitalRead(BrakeInput) == HIGH) ? 8 : 0;
byte globalState = brakeState | standbyState | rightTurnState | leftTurnState; // 4 bits of a byte
switch (globalState) {
case 0b0000: // none
for(int i=0; i<24; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
}
break;
case 0b0001: // only leftTurnState
leftturn();
break;
case 0b0010: // only rightTurnState
rightturn();
break;
case 0b0011: // both rightTurnState and leftTurnState
rightturn();
delay(0);
leftturn();
break;
}
}
void leftturn(){
for(int i=7;i>-1;i--) {
strip.setPixelColor(i, strip.Color(250, 75, 0));
strip.show();
delay(50);
}
for(int i=7;i>-1;i--) {
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
delay(0);
}
}
void rightturn(){
for(int i=16;i<24;i++) {
strip.setPixelColor(i, strip.Color(250, 75, 0));
strip.show();
delay(50);
}
for(int i=16;i<24;i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0));
strip.show();
delay(0);
}
}