#include <FastLED.h>
#define NUM_STRIPS 6
#define NUM_LEDS_PART_A 50
#define NUM_LEDS_PART_B 25
#define NUM_LEDS_PART_C 3
CRGB ledsA[NUM_LEDS_PART_A];
CRGB ledsB[NUM_STRIPS][NUM_LEDS_PART_B];
CRGB ledsC[NUM_LEDS_PART_C];
//input pins - CSAK a tail lights PIN változott A0-ra
const int buttonPinL = 2;
const int buttonPinR = 3;
const int buttonPinEng = 4;
const int buttonPinKnightRider = 5;
const int buttonPinBrake = 6;
const int buttonPinTailLights = A0; // CSAK EZ VÁLTOZOTT: 4-ről A0-ra
const int buttonPinReverse = 7;
int halfOfLeds = (NUM_LEDS_PART_A/2);
int buttonStateL = 0;
int buttonStateR = 0;
int engineOn = 0;
int maxBrtN = 0;
int KnightRiderState = 0;
int KnightRiderToOff = 0;
int Brake = 0;
int Reverse = 0;
int TailLights = 0;
int leftLeds = 0;
int rightLeds = 0;
int tailLeft = halfOfLeds-1;
int tailLeftSmall = 0;
int tailRight = halfOfLeds;
int tailRightSmall = 0;
int brakeToOffL = 0;
int brakeToOffR = 0;
int stateLT = 0;
int stateRT = 0;
uint8_t gBrtL = 0;
uint8_t gBrtR = 0;
int TailOn = 0;
// The RGB color codes can be found here https://github.com/FastLED/FastLED/wiki/Pixel-reference
unsigned long turnColor = 0xFFFF00;
unsigned long dashTurnColor = 0x008000;
unsigned long dashHazardColor = 0xff6a00;
unsigned long dashDayColor = 0xFFFFFF;
unsigned long dashKnightRiderColor = 0xFF0000;
unsigned long dashTailColor = 0x0000FF;
int showSignalBigStrip = 0;
int showTailBrakeReverseSmalStrip = 1;
int maxBrt = 254;
int maxBrtNight = 254;
int maxBrtBrake = 254;
int maxBrtReverse = 254;
int maxBrtTailLights = 180;
uint8_t gHue = 0;
int knightRiderRainbow = 0;
int knightRiderOvrDayL = 1;
int knightRiderSpeed = 20;
int knightRiderTail = 5;
int delayTurnLedAnim = 20;
int delayTurnLedOff = 100;
int delayLedToDayLight = 5;
int tailDelay = 20;
int nrAnimAfterOff = 5;
unsigned long currentMillis = 0;
unsigned long previousMillis = 0;
int delayForHazard = 500;
unsigned long currentMillisSC = 0;
unsigned long previousMillisSC = 0;
void setup() {
Serial.begin(115200);
pinMode(buttonPinL, INPUT);
pinMode(buttonPinR, INPUT);
pinMode(buttonPinEng, INPUT);
pinMode(buttonPinKnightRider, INPUT);
pinMode(buttonPinBrake, INPUT);
pinMode(buttonPinReverse, INPUT);
pinMode(buttonPinTailLights, INPUT);
FastLED.addLeds<NEOPIXEL, 13>(ledsA, NUM_LEDS_PART_A);
FastLED.addLeds<NEOPIXEL, 12>(ledsB[0], NUM_LEDS_PART_B);
FastLED.addLeds<NEOPIXEL, 11>(ledsB[1], NUM_LEDS_PART_B);
FastLED.addLeds<NEOPIXEL, 10>(ledsB[2], NUM_LEDS_PART_B);
FastLED.addLeds<NEOPIXEL, 9>(ledsB[3], NUM_LEDS_PART_B);
FastLED.addLeds<NEOPIXEL, 8>(ledsC, NUM_LEDS_PART_C);
attachInterrupt(digitalPinToInterrupt(buttonPinL), btnPressL, RISING);
attachInterrupt(digitalPinToInterrupt(buttonPinR), btnPressR, RISING);
fill_solid(ledsA, NUM_LEDS_PART_A, CRGB::Black);
fill_solid(ledsB[0], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[1], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[2], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[3], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsC, NUM_LEDS_PART_C, CRGB::Black);
FastLED.show();
}
void loop() {
buttonStateL = digitalRead(buttonPinL);
buttonStateR = digitalRead(buttonPinR);
engineOn = digitalRead(buttonPinEng);
KnightRiderState = digitalRead(buttonPinKnightRider);
currentMillisSC = millis();
if(buttonStateL == HIGH){
stateLT = 1;
previousMillisSC = currentMillisSC;
}else{
if(currentMillisSC-previousMillisSC >= delayForHazard && stateLT >= nrAnimAfterOff && stateRT == 0){
stateLT = 0;
}
}
if(buttonStateR == HIGH){
stateRT = 1;
previousMillisSC = currentMillisSC;
}else{
if(currentMillisSC-previousMillisSC >= delayForHazard && stateRT >= nrAnimAfterOff && stateLT == 0){
stateRT = 0;
}
}
if(stateLT != 0 && stateRT != 0){
leftLeds = NUM_LEDS_PART_B-1;
rightLeds = NUM_LEDS_PART_A-NUM_LEDS_PART_B;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
if(showSignalBigStrip == 1){
ledsA[leftLeds] = turnColor;
ledsA[rightLeds] = turnColor;
}
ledsB[0][dot] = turnColor;
ledsB[1][dot] = turnColor;
ledsB[2][dot] = turnColor;
ledsB[3][dot] = turnColor;
ledsC[0] = dashHazardColor;
ledsC[2] = dashHazardColor;
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedAnim >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
leftLeds--;
rightLeds++;
}
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
if(showSignalBigStrip == 1){
leftLeds = NUM_LEDS_PART_B-1;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
ledsA[leftLeds] = 0x000000;
leftLeds--;
}
rightLeds = NUM_LEDS_PART_A-NUM_LEDS_PART_B;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
ledsA[rightLeds] = 0x000000;
rightLeds++;
}
}
fill_solid(ledsB[0], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[1], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[2], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[3], NUM_LEDS_PART_B, CRGB::Black);
ledsC[0] = CRGB::Black;
ledsC[2] = CRGB::Black;
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
buttonStateL = digitalRead(buttonPinL);
buttonStateR = digitalRead(buttonPinR);
stateLT++;
stateRT++;
if(buttonStateL != HIGH && buttonStateR != HIGH && stateLT >= nrAnimAfterOff && stateRT >= nrAnimAfterOff){
if(buttonStateL == HIGH){
stateLT = 1;
}else{
stateLT = 0;
gBrtL = 0;
}
if(buttonStateR == HIGH){
stateRT = 1;
}else{
stateRT = 0;
gBrtR = 0;
}
if(buttonStateL != HIGH && buttonStateR != HIGH){
currentMillis = previousMillis = millis();
while(previousMillis + delayLedToDayLight >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
resetTailPositions();
}
}
}else if(stateLT != 0){
if(KnightRiderState == HIGH){
fill_solid(ledsB[1], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[3], NUM_LEDS_PART_B, CRGB::Black);
}
leftLeds = NUM_LEDS_PART_B-1;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
if(showSignalBigStrip == 1){
ledsA[leftLeds] = turnColor;
}
ledsB[0][dot] = turnColor;
ledsB[2][dot] = turnColor;
ledsC[0] = dashTurnColor;
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedAnim >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
leftLeds--;
}
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
leftLeds = NUM_LEDS_PART_B-1;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
if(showSignalBigStrip == 1){
ledsA[leftLeds] = 0x000000;
}
ledsB[0][dot] = 0x000000;
ledsB[2][dot] = 0x000000;
ledsC[0] = 0x000000;
leftLeds--;
}
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
stateLT++;
if(stateLT >= nrAnimAfterOff && buttonStateL != HIGH){
stateLT = 0;
gBrtL = 0;
currentMillis = previousMillis = millis();
while(previousMillis + delayLedToDayLight >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
resetTailPositions();
}
}else if(stateRT != 0){
if(KnightRiderState == HIGH){
fill_solid(ledsB[0], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[2], NUM_LEDS_PART_B, CRGB::Black);
}
rightLeds = NUM_LEDS_PART_A-NUM_LEDS_PART_B;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
if(showSignalBigStrip == 1){
ledsA[rightLeds] = turnColor;
}
ledsB[1][dot] = turnColor;
ledsB[3][dot] = turnColor;
ledsC[2] = dashTurnColor;
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedAnim >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
rightLeds++;
}
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
rightLeds = NUM_LEDS_PART_A-NUM_LEDS_PART_B;
for(int dot = 0; dot < NUM_LEDS_PART_B; dot++) {
if(showSignalBigStrip == 1){
ledsA[rightLeds] = 0x000000;
}
ledsB[1][dot] = 0x000000;
ledsB[3][dot] = 0x000000;
ledsC[2] = 0x000000;
rightLeds++;
}
FastLED.show();
currentMillis = previousMillis = millis();
while(previousMillis + delayTurnLedOff >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
stateRT++;
if(stateRT >= nrAnimAfterOff && buttonStateR != HIGH){
stateRT = 0;
gBrtR = 0;
currentMillis = previousMillis = millis();
while(previousMillis + delayLedToDayLight >= currentMillis){
TailAndBrakeAndReverse();
FastLED.show();
currentMillis = millis();
}
resetTailPositions();
}
}else{
if(knightRiderOvrDayL == 1 && KnightRiderState == HIGH && engineOn == HIGH){
engineOn = LOW;
}
if(TailLights == HIGH && engineOn == HIGH){
maxBrtN = maxBrtNight;
}else{
maxBrtN = maxBrt;
}
if(stateLT == 0 && engineOn == HIGH){
if(gBrtL <= maxBrtN){
EVERY_N_MILLISECONDS( 1 ) { gBrtL++; }
fill_solid( ledsB[2], NUM_LEDS_PART_B, CHSV(0,0,gBrtL));
}else if(gBrtL >= maxBrtN){
EVERY_N_MILLISECONDS( 1 ) { gBrtL--; }
fill_solid( ledsB[2], NUM_LEDS_PART_B, CHSV(0,0,gBrtL));
}
}else{
if(gBrtL > 0){
EVERY_N_MILLISECONDS( 1 ) { gBrtL--; }
fill_solid( ledsB[2], NUM_LEDS_PART_B, CHSV(0,0,gBrtL));
}
}
if(stateRT == 0 && engineOn == HIGH){
if(gBrtR <= maxBrtN){
EVERY_N_MILLISECONDS( 1 ) { gBrtR++; }
fill_solid( ledsB[3], NUM_LEDS_PART_B, CHSV(0,0,gBrtR));
}else if(gBrtR >= maxBrtN){
EVERY_N_MILLISECONDS( 1 ) { gBrtR--; }
fill_solid( ledsB[3], NUM_LEDS_PART_B, CHSV(0,0,gBrtR));
}
}else{
if(gBrtR > 0){
EVERY_N_MILLISECONDS( 1 ) { gBrtR--; }
fill_solid( ledsB[3], NUM_LEDS_PART_B, CHSV(0,0,gBrtR));
}
}
if(KnightRiderState == HIGH && engineOn == LOW){
if(knightRiderRainbow == 1){
EVERY_N_MILLISECONDS( 20 ) { gHue++; }
}
fadeToBlackBy( ledsB[0], NUM_LEDS_PART_B, knightRiderTail);
fadeToBlackBy( ledsB[1], NUM_LEDS_PART_B, knightRiderTail);
fadeToBlackBy( ledsB[2], NUM_LEDS_PART_B, knightRiderTail);
fadeToBlackBy( ledsB[3], NUM_LEDS_PART_B, knightRiderTail);
int pos = beatsin16( knightRiderSpeed, 0, NUM_LEDS_PART_B-1 );
ledsB[0][pos] += CHSV( gHue, 255, 192);
ledsB[1][pos] += CHSV( gHue, 255, 192);
ledsB[2][pos] += CHSV( gHue, 255, 192);
ledsB[3][pos] += CHSV( gHue, 255, 192);
KnightRiderToOff = 1;
}else{
if(KnightRiderToOff == 1){
fill_solid(ledsB[0], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[1], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[2], NUM_LEDS_PART_B, CRGB::Black);
fill_solid(ledsB[3], NUM_LEDS_PART_B, CRGB::Black);
resetTailPositions();
KnightRiderToOff = 0;
}
}
TailAndBrakeAndReverse();
FastLED.show();
}
}
void TailAndBrakeAndReverse(){
Brake = digitalRead(buttonPinBrake);
TailLights = digitalRead(buttonPinTailLights);
Reverse = digitalRead(buttonPinReverse);
if(Reverse == HIGH){
fill_solid(ledsA, NUM_LEDS_PART_A, CRGB::White);
if(showTailBrakeReverseSmalStrip == 1){
fill_solid(ledsB[0], NUM_LEDS_PART_B, CRGB::White);
fill_solid(ledsB[1], NUM_LEDS_PART_B, CRGB::White);
}
return;
}
if(TailLights == HIGH && Brake == LOW){
if(stateLT == 0 && stateRT == 0){
if(tailLeft >= 0){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
if(showTailBrakeReverseSmalStrip == 1 && tailLeft < NUM_LEDS_PART_B){
tailLeftSmall = map(tailLeft,NUM_LEDS_PART_B-1,0,0,NUM_LEDS_PART_B-1);
ledsB[0][tailLeftSmall]=CHSV(0,255,maxBrtTailLights);
}
tailLeft--;
}
}
if(tailRight < NUM_LEDS_PART_A){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
if(showTailBrakeReverseSmalStrip == 1 && tailRight > NUM_LEDS_PART_A-NUM_LEDS_PART_B-1){
tailRightSmall = map(tailRight,NUM_LEDS_PART_A-NUM_LEDS_PART_B-1,NUM_LEDS_PART_A-1,0,NUM_LEDS_PART_B-1);
ledsB[1][tailRightSmall]=CHSV(0,255,maxBrtTailLights);
}
tailRight++;
}
}
}else if(stateLT != 0 && stateRT != 0){
if(showSignalBigStrip == 1){
if(tailLeft >= NUM_LEDS_PART_B){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
tailLeft--;
}
}
if(tailRight < NUM_LEDS_PART_A-NUM_LEDS_PART_B){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
tailRight++;
}
}
}else{
if(tailLeft >= 0){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
tailLeft--;
}
}
if(tailRight < NUM_LEDS_PART_A){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
tailRight++;
}
}
}
}else{
if(stateLT != 0){
if(showSignalBigStrip == 1){
if(tailLeft >= NUM_LEDS_PART_B){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
tailLeft--;
}
}
}else{
if(tailLeft >= 0){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
tailLeft--;
}
}
}
if(tailRight < NUM_LEDS_PART_A){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
if(showTailBrakeReverseSmalStrip == 1 && tailRight > NUM_LEDS_PART_A-NUM_LEDS_PART_B-1){
tailRightSmall = map(tailRight,NUM_LEDS_PART_A-NUM_LEDS_PART_B-1,NUM_LEDS_PART_A-1,0,NUM_LEDS_PART_B-1);
ledsB[1][tailRightSmall]=CHSV(0,255,maxBrtTailLights);
}
tailRight++;
}
}
}
if(stateRT != 0){
if(tailLeft >= 0){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailLeft]=CHSV(0,255,maxBrtTailLights);
if(showTailBrakeReverseSmalStrip == 1 && tailLeft < NUM_LEDS_PART_B){
tailLeftSmall = map(tailLeft,NUM_LEDS_PART_B-1,0,0,NUM_LEDS_PART_B-1);
ledsB[0][tailLeftSmall]=CHSV(0,255,maxBrtTailLights);
}
tailLeft--;
}
}
if(showSignalBigStrip == 1){
if(tailRight < NUM_LEDS_PART_A-NUM_LEDS_PART_B){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
tailRight++;
}
}
}else{
if(tailRight < NUM_LEDS_PART_A){
EVERY_N_MILLISECONDS( tailDelay ) {
ledsA[tailRight]=CHSV(0,255,maxBrtTailLights);
tailRight++;
}
}
}
}
}
}else if(Brake == HIGH){
if(stateLT == 0 && stateRT == 0){
fill_solid( ledsA, NUM_LEDS_PART_A, CHSV(0,255,maxBrtBrake));
if(showTailBrakeReverseSmalStrip == 1){
fill_solid( ledsB[0], NUM_LEDS_PART_B, CHSV(0,255,maxBrtBrake));
fill_solid( ledsB[1], NUM_LEDS_PART_B, CHSV(0,255,maxBrtBrake));
}
}else if(stateLT != 0 && stateRT != 0){
if(showSignalBigStrip == 1){
for(int i = NUM_LEDS_PART_B; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = halfOfLeds; i < NUM_LEDS_PART_A-NUM_LEDS_PART_B; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}else{
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}
}else{
if(stateLT != 0){
if(showSignalBigStrip == 1){
for(int i = NUM_LEDS_PART_B; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}else{
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}
if(showTailBrakeReverseSmalStrip == 1){
fill_solid( ledsB[1], NUM_LEDS_PART_B, CHSV(0,255,maxBrtBrake));
}
}
if(stateRT != 0){
if(showSignalBigStrip == 1){
for(int i = halfOfLeds; i < NUM_LEDS_PART_A-NUM_LEDS_PART_B; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}else{
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,255,maxBrtBrake);
}
}
if(showTailBrakeReverseSmalStrip == 1){
fill_solid( ledsB[0], NUM_LEDS_PART_B, CHSV(0,255,maxBrtBrake));
}
}
}
tailLeft = halfOfLeds-1;
tailRight = halfOfLeds;
brakeToOffL = 1;
brakeToOffR = 1;
}else{
if(tailLeft < halfOfLeds-1){
EVERY_N_MILLISECONDS( tailDelay ) {
tailLeft++;
ledsA[tailLeft]=CHSV(0,0,0);
if(showTailBrakeReverseSmalStrip == 1 && tailLeft < NUM_LEDS_PART_B){
tailLeftSmall = map(tailLeft,NUM_LEDS_PART_B-1,0,0,NUM_LEDS_PART_B-1);
ledsB[0][tailLeftSmall]=CHSV(0,0,0);
}
}
}else{
if(stateLT != 0){
if(brakeToOffL == 1){
if(showSignalBigStrip == 1){
for(int i = NUM_LEDS_PART_B; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,0,0);
}
}else{
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,0,0);
}
}
brakeToOffL = 0;
}
}else{
for(int i = 0; i < halfOfLeds; i++){
ledsA[i] = CHSV(0,0,0);
}
if(KnightRiderState == LOW){
fill_solid( ledsB[0], NUM_LEDS_PART_B, CHSV(0,0,0));
}
}
}
if(tailRight > halfOfLeds){
EVERY_N_MILLISECONDS( tailDelay ) {
tailRight--;
ledsA[tailRight]=CHSV(0,0,0);
if(showTailBrakeReverseSmalStrip == 1 && tailRight > NUM_LEDS_PART_A-NUM_LEDS_PART_B-1){
tailRightSmall = map(tailRight,NUM_LEDS_PART_A-NUM_LEDS_PART_B-1,NUM_LEDS_PART_A-1,0,NUM_LEDS_PART_B-1);
ledsB[1][tailRightSmall]=CHSV(0,0,0);
}
}
}else{
if(stateRT != 0){
if(brakeToOffR == 1){
if(showSignalBigStrip == 1){
for(int i = halfOfLeds; i < NUM_LEDS_PART_A-NUM_LEDS_PART_B; i++){
ledsA[i] = CHSV(0,0,0);
}
}else{
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,0,0);
}
}
brakeToOffR = 0;
}
}else{
for(int i = halfOfLeds; i < NUM_LEDS_PART_A; i++){
ledsA[i] = CHSV(0,0,0);
}
if(KnightRiderState == LOW){
fill_solid( ledsB[1], NUM_LEDS_PART_B, CHSV(0,0,0));
}
}
}
}
if(engineOn == HIGH && TailLights == LOW){
ledsC[1] = dashDayColor;
}else if(KnightRiderState == HIGH){
ledsC[1] = dashKnightRiderColor;
}else if(TailLights == HIGH){
ledsC[1] = dashTailColor;
}else{
ledsC[1] = 0x000000;
}
}
void resetTailPositions(){
if(showSignalBigStrip == 1){
tailLeft = NUM_LEDS_PART_B;
tailRight = NUM_LEDS_PART_A-NUM_LEDS_PART_B;
}else{
tailLeft = halfOfLeds-1;
tailRight = halfOfLeds;
}
}
void btnPressL(){
stateLT = 1;
for(int nr = 0; nr < 1500; nr++) {
buttonStateR = digitalRead(buttonPinR);
if(buttonStateR == HIGH){
stateRT = 1;
}
}
}
void btnPressR(){
stateRT = 1;
for(int nr = 0; nr < 1500; nr++) {
buttonStateL = digitalRead(buttonPinL);
if(buttonStateL == HIGH){
stateLT = 1;
}
}
}