Hoi,
Ik wil graag een looplicht maken voor op voertuigen(signalisatie).
Toevallig heb ik COB led's gevonden via aliexpress.
(
https://nl.aliexpress.com/item/Big-Promotion-High-Power-10W-COB-LED-St…
)
Ik stuur deze led's op 12V met behulp van mosfet's via een arduino.
Ik heb zelf een soort "PWM"-sturing gemaakt waardoor ik de leds min of meer kan dimmen, dit lijkt allemaal goed te werken maar nu wil ik meerdere programma's maken voor mijn looplicht en hier gaat het mis.
Met 1 drukknop zou ik een integer willen laten optellen die zo de verschillende casen in mijn programma stuurt. Het probleem is dat wanneer mijn sturing bezig is aan een programma en ik wil een ander programma selecteren hij deze puls meestal overslaat. Waarschijnlijk zal ik dit probleem niet kunnen wegkrijgen zolang ik de delay functie blijf gebruiken. Ik vind hier niet echt een oplossing voor waarbij ik mijn eigen PWM-modulatie kan behouden. Het gebruik van een Led driver zou ook een oplossing zijn maar hier heb ik geen enkele ervaring mee. Ik hoop dat ik hier wat extra input kan vergaren, alvast bedankt!
c code:
#include "Arduino.h"
int programma = 0; // case number
int knopstatus = LOW; // button status
int vorigeknopstatus = LOW; // last button status
unsigned int aantijd = 9; // on time PWM pulse
unsigned int uittijd = 1; // off time PWM pulse
long knipper = 0; // PWM counter
long knippering = 5000; // max PWM
int schakelaar = 13; // button pin
void setup(/* arguments */) {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(13, INPUT);
}
void loop(/* arguments */) {
knopstatus = digitalRead(schakelaar);
while ((knopstatus != vorigeknopstatus) && (knopstatus == HIGH)) {
programma++;
delay(200);
vorigeknopstatus = knopstatus;
}
/* code */
switch (programma) {
case 1:
{
do {
digitalWrite(2, HIGH);
delayMicroseconds(aantijd);
digitalWrite(2, LOW);
delayMicroseconds(uittijd);
knipper++;
} while(knipper < knippering);
delay(100);
knipper = 0;
do {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
delayMicroseconds(aantijd);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
delayMicroseconds(uittijd);
knipper++;
} while(knipper < knippering);
delay(50);
knipper = 0;
do {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delayMicroseconds(aantijd);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
delayMicroseconds(uittijd);
knipper++;
} while(knipper < knippering);
delay(100);
knipper = 0;
do {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delayMicroseconds(aantijd);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
delayMicroseconds(uittijd);
knipper++;
} while(knipper < knippering);
delay(100);
knipper = 0;
do {
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
delayMicroseconds(aantijd);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delayMicroseconds(uittijd);
knipper++;
} while(knipper < knippering);
delay(700);
knipper = 0;
}
break;
case 2:
{
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
delay(200);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(200);
}
break;
case 3:
{
programma = 1;
}
default:
{
programma = 1;
}
break;
}
}