Code opdracht

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 1
Geregistreerd: 02 Dec 2020, 12:42

Code opdracht

Berichtdoor RDN1710 » 02 Dec 2020, 12:51

Hoi!
Ik heb een arduino project waar bepaalde eisen aan zitten. 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?



Mijn code van het eerste deel:

// 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);
}


Code die ik heb gevonden voor de fadeled library (werkend):

#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());
}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Code opdracht

Berichtdoor shooter » 02 Dec 2020, 16:52

je zult die fadeled wel eerst moeten vinden en dan de zip in de IDE ophaelen, dan even zoeken of je de include goed hebt, soms moet er master bij.
poorten 5 en 6 en 9 ,10 en 11 zijn PWM die kunnen dus faden.
omdat er meerdere libs zijn graag jouw versie erbij zetten, of een link waar te vinden
en lees de docs die erbij horen.
je moet bijvoorbeeld vaak updaten, maar ik heb de lib nog niet gelezen.
je kunt het ook heel simpel zelf bouwen met wat software zelf schrijven, dan kun je het de onderwijzer ook uit leggen. (graag)
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten