hulp gevraagd met Led dagrijlichten projectje.

Ik heb 2 dagrijleds voor in de auto welke ik wil schakelen via een arduino.
Heb ze aangesloten op pwm poort 9 en 10.
Op het moment dat ik stadslicht aanzet van de auto moeten deze dimmen (25%).
Anders moeten ze op 100% branden.
Niet zo heel moeilijk deze code werkt zoals ik wil.
De pushbutton heb ik vervangen door een relais aangesloten op het stadslicht.

/*
  DRLcontrol
  Using a switch connected to pin 2 to change brightness of 2 drl led lights
  (c) comtech 2014 versie 0.8 BETA
 */
 
const int buttonPin = 2;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status
int kleurRgb = 1;     // both are correct
#define LedR 9
#define LedL 10

void setup() {
  pinMode(LedR, OUTPUT);
  pinMode(LedL, OUTPUT);
}


void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // dimm leds : 
    analogWrite(LedR, 42);  
    analogWrite(LedL, 42);  
  } 
  else {
    // turn LEDs 100% on:
    analogWrite(LedR, 255);  
    analogWrite(LedL, 255);  
  }
}

Maar nu wil ik dat de leds bij het aangaan van 0 naar 100% faden en op het moment dat ze gaan dimmen naar 25% dat ze langzaam terug faden naar 25% en visa versa.
Ik krijg het met een for loop maar niet voor elkaar.
Ze blijven faden van 0 naar 100 en dan weer naar 0 en 100 etc etc.

Heb nu zover deze code daarmee blijft hij aan en uit gaat :astonished:

/*
  DRLcontrol
 Using a switch connected to pin 2 to change brightness of 2 drl led lights
 (c) comtech 2014 versie 0.8 BETA
 */

const int buttonPin = 2;     // the number of the pushbutton pin
int buttonState = 0;         // variable for reading the pushbutton status
int fade = 0;     // both are correct
#define LedR 9
#define LedL 10

void setup() {
  pinMode(LedR, OUTPUT);
  pinMode(LedL, OUTPUT);
}


void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    // dimm leds : 
    for (fade = 255; fade < 42; fade ++)
    {
      analogWrite(LedL, fade);
      analogWrite(LedR, fade);
      if (fade == 42){      // bail out on sensor detect
        fade = 42;
        break;
      }
      delay(25);
      analogWrite(LedL, fade);
      analogWrite(LedR, fade);
    }   
  } 
  else {
    // turn LEDs 100% on:
for (fade = 0; fade < 255; fade ++)
    {
      analogWrite(LedL, fade);
      analogWrite(LedR, fade);
      if (fade == 255){      // bail out on sensor detect
        fade = 255;
        break;
      }
      delay(25);
      analogWrite(LedL, fade);
      analogWrite(LedR, fade);
    }     
  }
}

Wie kan mij helpen??

Allereerst welkom op het forum.

Ik heb niet echt naar je code gekeken o te zien wat ze doet maat men oog viel op dit en dat is zowiezo niet wat jij wil

 for (fade = 255; fade < 42; fade ++)

wat je hier zegt is dat je van 255 tot 42 wilt optellen.
waarsch?nl?k wil je aftellen en dan wordt de code

 for (fade = 255; fade < 42; fade --)

Met vriendelijke groet
Jantje

of nog waarschijnlijker :wink:

for (fade = 255; fade >= 42; fade --)

robtillaart:
of nog waarschijnlijker :wink:

for (fade = 255; fade >= 42; fade --)

euch .... ja, dat denk ik ook :fearful:
Jantje

Hoi.

Jouw code kijkt naar de schakelaar.
Als de schakelaar hoog is (regel 25), worden regels 26 tot en met 39 uitgevoerd.
Anders (regel 40) worden regels 41 tot en met 54 uitgevoerd.

Het probleem is dat er geen andere voorwaarden zijn om die delen uit te voeren.
En dus worden ze steeds maar weer uitgevoerd.
Overigens lees ik in je beschrijving dat de fade steeds heen en weer gaat, maar in je code zie ik dat deze van begin (25 %) tot eind (100 %) loopt, en dan weer naar het begin gaat, of andersom (das afhankelijk van de schakelaar).

Wat je beter kunt doen, is kijken of je de fade al een keer doorlopen hebt.
Wanneer dat het geval is, dan hoef je die niet nog een keer te doen en kun je 'm dus overslaan.

Wat je ook kunt doen, is eindeloos de fade uitrekenen, maar als je aan de boven of ondergrens bent, 'm steeds een stapje terug zetten.
Dan blijft je sketch wel druk, maar de LEDs blijven steken op het nivo dat jij hebt bepaald.

Zoals je ziet, er zijn meerdere mogelijkheden om dit op te lossen.
Soms heeft een iets andere oplossing de voorkeur, zij het om eenvoud van de code, of om efficiëntie van die code.

De delays in je sketch heb ik zogenaamd maar even niet gezien... :roll_eyes:

Bedankt voor de tips maar heb het ondertussen maar anders gedaan zonder de for loop .
Mij nog net even te ingewikkeld.
Ben nog niet zo lang met arduino begonnen heb eerst met pic basic gewerkt.

/*
  DRLcontrol
 Using a switch connected to pin 2 to change brightness of 2 drl led lights
 (c) comtech 2014 versie 1.00
 */

const int buttonPin = 2;     // the number of the button
int buttonState = 0;         // variable for reading the pushbutton status
int brightness = 0;     
#define LedR 9
#define LedL 10

void setup() {
  pinMode(LedR, OUTPUT);
  pinMode(LedL, OUTPUT);
}


void loop(){
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH) {     
    analogWrite(LedR, brightness);
    analogWrite(LedR, brightness);
    brightness = brightness - 2;
    // als brightness kleiner is dan 44 niet meer aftellen
    if (brightness < 30) {
      brightness = 30 ;
    }
    // wait for 10 milliseconds to see the dimming effect
    delay(10);      

    analogWrite(LedR, brightness);  
    analogWrite(LedL, brightness);
  } 
  else {
    // turn LEDs 100% on:
    analogWrite(LedR, brightness);
    analogWrite(LedR, brightness);
    brightness = brightness + 2;
    // als brightness 254 bereikt stoppen:
    if (brightness > 255) {
      brightness = 255 ;
    }
    // wait for 10 milliseconds to see the dimming effect
    delay(10);      
    analogWrite(LedR, brightness);  
    analogWrite(LedL, brightness);  
  }
}