Ledfade met library

Hoi!
Ik heb een arduino project waar bepaalde eisen aan zitten. Ik ben een beginner en ik werk met een Arduino UNO board. Nu heb ik het volgende concept bedacht:

Je hebt 5 leds (3 rode en 2 groene), een afstandssensor en een button. Als ik niet op de button klik gebeurt er niks. Als ik hem ingedrukt houd en mijn hand tussen de waarde 0 en 15 voor de afstandssensor komt, gaan de rode leds aan. Als ik mijn hand tussen de waarde 20 en 50 van de afstandssensor houd, gaan de groene leds aan. Zo heb ik een warm/koud traject gemaakt.

Ik wil nu alleen een ledfade library erin verwerken, waarbij de leds vervagen als ik mijn hand ervoor houd (dus bijv. als ik mijn hand tussen waarde 0 en 15 houd dan gaan de rode leds aan en faden ze aan en uit).

Ik heb alle code van het eerste deel zonder de library al wel werkend, maar bij het tweede deel loop ik steeds vast doordat hij de ledfade niet accepteert in mijn loop. Wie kan mij hiermee helpen?

Hieronder mijn code en als je verder scrollt de voorbeeld code van de library die ik heb gevonden en die ik probeer te verwerken in mijn code.

// define pins

#define echoPin 11 // Echo Pin
#define trigPin 12 // Trigger Pin
long duration, distance; // Tijd om afstand te meten
int RedLedPineen = 8;
int RedLedPintwee = 6;
int RedLedPindrie = 2;
int GreenLedPineen = 9;
int GreenLedPintwee = 5;

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {

digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
//Hiermee wordt de snelheid van het geluid gemeten
distance = duration/58.2;

// De rode led geeft licht als je binnen 0 en 15 afstand komt
if (distance > 0 && distance < 15) {
int RedValue=(25-distance)*10.2;
analogWrite(RedLedPineen, RedValue);
analogWrite(RedLedPintwee, RedValue);
analogWrite(RedLedPindrie, RedValue);
} else {
analogWrite(RedLedPineen, 0);
analogWrite(RedLedPintwee, 0);
analogWrite(RedLedPindrie, 0);
}

// De groene led geeft licht als je binnen 20 en 50 afstand komt
if (distance > 20 && distance <= 50) {
int GreenValue = (25-distance)*10.2;
analogWrite(GreenLedPineen, GreenValue);
analogWrite(GreenLedPintwee, GreenValue);
} else {
analogWrite(GreenLedPineen, 0);
analogWrite(GreenLedPintwee, 0);
}

// de lampjes worden vertraagd
delay(100);

Serial.println(distance);
//delay(50);
}

De gevonden code van de library:

#include <FadeLed.h>

//make two FadeLed objects for pin 5 (leds[0]) and pin 6 (leds[1])
FadeLed leds[2] = {5, 6};

//it doesn't need to be an array, you can also make separate named objects
//still all updated with FadeLed::update()

//we turn this pin on will leds[1] is fading down
const byte FadeDownPin = 12;
//we turn this pin on will leds[1] is fading up
const byte FadeUpPin = 13;

unsigned long millisLast;

void setup() {
//set pin mode of the fade pins
pinMode(FadeDownPin, OUTPUT);
pinMode(FadeUpPin, OUTPUT);

//set the interval (ms) between LED updates
//it's the same for all FadeLed objects
//call BEFORE setTime() otherwise the time calculation is wrong
//default is 50ms (gives 20 updates a second)
//FadeLed::setInterval(50);

//led[0] will take 10 seconds to fade from 0 to max
//takes less time for smaller difference
leds[0].setTime(10000);

//We fade it to halve brightness
//so will take 5 seconds
leds[0].set(50);

//leds[1] will use the default fade time of 2 seconds
//leds[1].setTime(2000);

//We turn this LED fully on directly (without fading) now
leds[1].beginOn();
//is the same as (100 is max brightness with default gamma correction)
//leds[1].begin(100);

//and we let it fade to off for now
leds[1].off();
//same as
//leds[1].set(0);
}

void loop() {
// main function call to update all fadeLeds
//must be called often to make it work
FadeLed::update();

//we let leds[0] fade up and down all the time
//up to halve brightness (50 for default gamma table)
//to see if it's done fading we can check .done()
if(leds[0].done()){
//.get() will return the current brightness
//so this will tell us if we are not at 0
if(leds[0].get()){
//then we are done fading up, let's fade down again
leds[0].off();
}
//or we are at 0
else{
//then we are done fading down, let's fade up again
leds[0].set(50);
}
}

//We let leds[1] fade up or down every 5 seconds
//we fade up in 4 seconds and down in 2 seconds.

//change every 5 seconds
//see: Blink without delay
if(millis() - millisLast > 5000){
millisLast = millis();

//if LED is not off (.get() returns something bigger then 0 which gives true)
if(leds[1].get()){
//we set the fading time to 2 seconds
leds[1].setTime(2000);
//and start to fade off
leds[1].off();
}
//if the LED is off
else{
//we set the fading time to 4 seconds
leds[1].setTime(4000);
//and start to fade to full brightness
leds[1].on();
//same as (100 is max brightness with default gamma correction)
//leds[1].set(100);
}
}

//.falling() will be true/HIGH while the LED is fading down
//.rising() will be true/HIGH while the LED is fading up
//we can use this to trigger actions like turning on another LED while fading up/down
digitalWrite(FadeDownPin, leds[1].falling());
digitalWrite(FadeUpPin, leds[1].rising());
}

Hoi rdn1710, welkom !

Complimenten voor jouw 1e posting, ziet er zorgvuldig opgesteld uit en de code is netjes geplaatst zoals het de bedoeling is.

Ik zie dit in jouw code staan:

int RedLedPineen = 8;
int RedLedPintwee = 6;
int RedLedPindrie = 2;
int GreenLedPineen = 9;
int GreenLedPintwee = 5;

Het faden doe je middels PWM.
Maar pinnen 2 en 8 kunnen geen hardwarematige PWM doen.

Verder word er in het voorbeeld naar blink without delay verwezen, maar verder word daar niet op ingegaan.
Maar dat is wel een belangrijk punt.
Want jij gebruikt wel delays.
Sommigen daarvan heb je daadwerkelijk nodig, anderen kun je veel beter oplossen
Dit is een veel voorkomende oorzaak van problemen, en daarom heb ik daar ook een stukje over geschreven (klik !), dus neem dat eens door zou ik zeggen.