DRL + DYNAMIC LED INDICATOR FOR CAR

Hi friends,

i want to make a project: DRL (daytime running light) + dynamic turn indicator.

when the turn switch is not on, the DRL should work, and when the turn switch is on, the dynamic turn indicator should work.

I bought an RGB tape ws2812b, arduino nano and buck converter (for lowering 12v to 5v).

i found one diagram and code but it's not exactly ok.

  1. drl sometimes flashes and sometimes no I think the problem is in the code I just don't know exactly where?

  2. how will the arduino know when to turn on the DRL and when to turn the dynamic turn signal?

  3. how to connect pin 2 and pin 3?

#include "FastLED.h"


#define NUM_LEDS 60
#define DATA_PIN 4

CRGB leds[NUM_LEDS];

const int buttonPin2 = 2;   
const int buttonPin3 = 3;
int buttonState2 = 0;   
int buttonState3 = 0;     

void setup() {


pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS);


}

void TurnSignal() {

for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB(66, 255, 0);
FastLED.setBrightness (255);
FastLED.show();
delay(4);
}

delay(100);                               
FastLED.clear();
FastLED.show();                           
delay(350);                                 
}

void DRL() {

FastLED.showColor(CRGB (66, 255, 0));
FastLED.setBrightness (95);                                   
}


void loop() {

buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);

if (buttonState2 == HIGH) {

TurnSignal();

}

if (buttonState3 == HIGH && buttonState2 == LOW) {

DRL();

}

if (buttonState3 == LOW && buttonState2 == LOW) {

FastLED.clear();
FastLED.show();
}
}

Please follow the advice on posting a programming question given in Read this before posting a programming question

In particular note the advice to Auto format code in the IDE and to use code tags when posting code here

The DRL sounds great but check the laws governing headlights, local and national. Realize if it fails at night somebody could get badly injured or killed.

DRLs are little more than a pretentious nuisance to oncoming drivers! :astonished:

if you don't know how to help I would ask you without unnecessary comments thank you

can someone rewrite the code for one LED strip, without hazzard lights, that the DRL is yellow instead of white and that the DRL is constantly working except when the turn signal is turned on.
[tt][color=#222222]#include <FastLED.h> 
#define NUM_STRIPS 2 // number of led strips (in this example are front left and front right)
#define NUM_LEDS_PER_STRIP 20 // number of leds per each strip
CRGB leds[NUM_STRIPS][NUM_LEDS_PER_STRIP];
uint8_t gHue = 0; // rotating "base color" used by many of the patterns

const int buttonPinL = 2; // turn left
const int buttonPinR = 3; // turn right
const int buttonPinEng = 4; // engine on to start day lights
const int buttonPinKnightRider = 5; // knight rider lights

int buttonStateL = 0;
int buttonStateR = 0;
int engineOn = 0;
int KnightRiderState = 0;

int stateL = 0;
int stateR = 0;

uint8_t gBrtL = 0;
uint8_t gBrtR = 0;
int maxBrt = 120; // maxim brightness day lights - from 0 to 255

int delayTurnLedAnim = 25; //delay of each led in turn light animation
int delayTurnLedOff = 250; //delay from animation to black (is used twice)
int delayLedToDayLight = 500; // delay from animation to day light on
int nrAnimAfterOff = 3; // number of animations for a single impulse

void setup() { 
 //Serial.begin(9600);
 pinMode(buttonPinL, INPUT);
 pinMode(buttonPinR, INPUT);
 pinMode(buttonPinEng, INPUT);
 pinMode(buttonPinKnightRider, INPUT);
 
 FastLED.addLeds<NEOPIXEL, 8>(leds[0], NUM_LEDS_PER_STRIP); //led strip for front left
 FastLED.addLeds<NEOPIXEL, 9>(leds[1], NUM_LEDS_PER_STRIP); //led strip for front right
 
 attachInterrupt(digitalPinToInterrupt(buttonPinL),btnPressL,RISING); // we use interrupt for instant reaction of turn lights
 attachInterrupt(digitalPinToInterrupt(buttonPinR),btnPressR,RISING); // we use interrupt for instant reaction of turn lights

 fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
 fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
 FastLED.show();
}

void loop() {
 // read the input state
 buttonStateL = digitalRead(buttonPinL); 
 buttonStateR = digitalRead(buttonPinR);
 KnightRiderState = digitalRead(buttonPinKnightRider);
 EVERY_N_MILLISECONDS( 1 ){
 engineOn = digitalRead(buttonPinEng);
 }

 //function for hazard lights
 if(stateL != 0 && stateR != 0){ 
 
 for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) { 
 leds[0][dot] = 0xff6a00; // color for left turn light
 leds[1][dot] = 0xff6a00; // color for right turn light
 FastLED.show();
 delay(delayTurnLedAnim);
 }
 
 delay(delayTurnLedOff);
 fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
 fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
 FastLED.show();
 delay(delayTurnLedOff);

 if(buttonStateL != HIGH || buttonStateR != HIGH){
 
 if(buttonStateL == HIGH){
 stateL = 1;
 }else{
 stateL = 0;
 gBrtL = 0;
 }
 
 if(buttonStateR == HIGH){
 stateR = 1;
 }else{
 stateR = 0;
 gBrtR = 0;
 }
 
 if(buttonStateL != HIGH && buttonStateR != HIGH){
 delay(delayLedToDayLight); 
 }
 
 }

 //function for left turn lights
 }else if(stateL != 0){
 
 if(KnightRiderState == HIGH && engineOn == LOW){
 fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
 }
 
 for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) { 
 leds[0][dot] = 0xff6a00; // color for left turn light
 FastLED.show();
 delay(delayTurnLedAnim);
 }
 
 delay(delayTurnLedOff);
 fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
 FastLED.show();
 delay(delayTurnLedOff);

 stateL++;
 if(stateL >= nrAnimAfterOff && buttonStateL != HIGH){
 stateL = 0;
 gBrtL = 0;
 delay(delayLedToDayLight);
 }

 //function for right turn lights
 }else if(stateR != 0){
 
 if(KnightRiderState == HIGH && engineOn == LOW){
 fill_solid(leds[0], NUM_LEDS_PER_STRIP, CRGB::Black);
 }
 
 for(int dot = 0; dot < NUM_LEDS_PER_STRIP; dot++) { 
 leds[1][dot] = 0xff6a00; // color for right turn light
 FastLED.show();
 delay(delayTurnLedAnim);
 }
 
 delay(delayTurnLedOff);
 fill_solid(leds[1], NUM_LEDS_PER_STRIP, CRGB::Black);
 FastLED.show();
 delay(delayTurnLedOff);

 stateR++;
 if(stateR >= nrAnimAfterOff && buttonStateR != HIGH){
 stateR = 0;
 gBrtR = 0;
 delay(delayLedToDayLight);
 }
 
 }else{
 
 if(stateL == 0 && engineOn == HIGH){
 if(gBrtL <= maxBrt){
 EVERY_N_MILLISECONDS( 1 ) { gBrtL++; } 
 fill_solid( leds[0], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtL));
 FastLED.show();
 }
 }else{
 if(gBrtL > 0){
 EVERY_N_MILLISECONDS( 1 ) { gBrtL--; } 
 fill_solid( leds[0], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtL));
 FastLED.show();
 }else{
 if(KnightRiderState == HIGH){ 
 gHue = 0;
 //EVERY_N_MILLISECONDS( 20 ) { gHue++; }
 fadeToBlackBy( leds[0], NUM_LEDS_PER_STRIP, 20);
 int pos = beatsin16( 30, 0, NUM_LEDS_PER_STRIP-1 );
 leds[0][pos] += CHSV( gHue, 255, 192);
 FastLED.show();
 }
 }
 }

 if(stateR == 0 && engineOn == HIGH){
 if(gBrtR <= maxBrt){ 
 EVERY_N_MILLISECONDS( 1 ) { gBrtR++; }
 fill_solid( leds[1], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtR));
 FastLED.show(); 
 } 
 }else{
 if(gBrtR > 0){ 
 EVERY_N_MILLISECONDS( 1 ) { gBrtR--; }
 fill_solid( leds[1], NUM_LEDS_PER_STRIP, CHSV(0,0,gBrtR));
 FastLED.show();
 }else{
 if(KnightRiderState == HIGH){ 
 gHue = 0;
 //EVERY_N_MILLISECONDS( 20 ) { gHue++; }
 fadeToBlackBy( leds[1], NUM_LEDS_PER_STRIP, 20);
 int pos = beatsin16( 30, 0, NUM_LEDS_PER_STRIP-1 );
 leds[1][pos] += CHSV( gHue, 255, 192);
 FastLED.show();
 }
 }
 }
 }
}

void btnPressL(){
 stateL = 1;
 for(int nr = 0; nr < 1500; nr++) { 
 buttonStateR = digitalRead(buttonPinR);
 if(buttonStateR == 1){
 stateR = 1; 
 }
 }
}

void btnPressR(){
 stateR = 1;
 for(int nr = 0; nr < 1500; nr++) { 
 buttonStateL = digitalRead(buttonPinL); 
 if(buttonStateL == 1){
 stateL = 1;
 }
 }
}[/color]
[/tt]