Cree led blink met potentiometer en button.
3 berichten
• Pagina 1 van 1
Cree led blink met potentiometer en button.
Hallo,
Ik heb een vraagje over een stukje code.
Voor een lightpainting project ben ik bezig met een zaklamp te bedienen met een kabel van ongeveer 50cm.
De bedoeling is door middel van een potmeter de snelheid van het knipperen te veranderen. En te starten/stoppen met een drukknop.
Het stukje code dat ik heb gevonden is supermooi voor dit, alleen stopt het niet, maar pauzeert de cyclus. Hieronder de code.
Waar moet ik zoeken om dit pauzeren te veranderen in stoppen.
Zit door mijn beperkte kennis al dagen te speuren in boeken en websites maar kan het nog niet vinden.
Had wel iets gemaakt met een simpele delay, maar dan blijft het niet constant branden bij het uitdraaien van de potmeter.
Groet Bert
Ik heb een vraagje over een stukje code.
Voor een lightpainting project ben ik bezig met een zaklamp te bedienen met een kabel van ongeveer 50cm.
De bedoeling is door middel van een potmeter de snelheid van het knipperen te veranderen. En te starten/stoppen met een drukknop.
Het stukje code dat ik heb gevonden is supermooi voor dit, alleen stopt het niet, maar pauzeert de cyclus. Hieronder de code.
Waar moet ik zoeken om dit pauzeren te veranderen in stoppen.
Zit door mijn beperkte kennis al dagen te speuren in boeken en websites maar kan het nog niet vinden.
Had wel iets gemaakt met een simpele delay, maar dan blijft het niet constant branden bij het uitdraaien van de potmeter.
Groet Bert
- Code: Alles selecteren
#define LED_PIN 11
#define BUTTON_PIN 3
#define POTENTIOMETER_PIN A1
unsigned long delayBetweenBlink = 500;
unsigned long lastTimeLEDBlinked = 0;
unsigned long debounceDuration = 50; // millis
unsigned long lastTimeButtonStateChanged = 0;
byte lastButtonState = HIGH;
bool blinkEnabled = true;
byte LEDState = LOW;
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
unsigned long timeNow = millis();
if (timeNow - lastTimeButtonStateChanged > debounceDuration) {
byte buttonState = digitalRead(BUTTON_PIN);
if (buttonState != lastButtonState) {
lastTimeButtonStateChanged = timeNow;
lastButtonState = buttonState;
if (buttonState == HIGH) { // button has been released
blinkEnabled = !blinkEnabled;
}
}
}
int potentiometerValue = analogRead(POTENTIOMETER_PIN);
delayBetweenBlink = map(potentiometerValue, 0, 1024, 0, 2000);
if (blinkEnabled) {
if (timeNow - lastTimeLEDBlinked > delayBetweenBlink) {
lastTimeLEDBlinked = timeNow;
LEDState = (LEDState == HIGH) ? LOW : HIGH;
digitalWrite(LED_PIN, LEDState);
}
}
}
Hou niet van de nachtdienst, maar wel van nachtfotografie
Advertisement
Re: Cree led blink met potentiometer en button.
blinkEnabled = !blinkEnabled;
dan weet je de stand nog niet want het programma is zo snel dat jouw knop al 1000 keer gevraagd is voordat jij de knop hebbediend.
dus die negatie gaat wel maar niet hier dus gewoon fals zeggen en ergens anders true
dan weet je de stand nog niet want het programma is zo snel dat jouw knop al 1000 keer gevraagd is voordat jij de knop hebbediend.
dus die negatie gaat wel maar niet hier dus gewoon fals zeggen en ergens anders true
paul deelen
shooter@home.nl
shooter@home.nl
- FonzieBonzo
- Berichten: 118
- Geregistreerd: 01 Okt 2015, 11:54
- Woonplaats: Castricum
Re: Cree led blink met potentiometer en button.
Als je de knippercode wilt laten stoppen in plaats van pauzeren, kun je een aparte variabele introduceren die bijhoudt of de knippercyclus moet worden gestopt. Je kunt deze variabele bijvoorbeeld stopEnabled noemen.
Je kunt dan het volgende doen:
Voeg een nieuwe variabele stopEnabled toe aan het begin van je code, net zoals je dat met blinkEnabled hebt gedaan. Zet deze variabele op false.
cpp code
In de if-statement waarbij je controleert of de knop is ingedrukt, kun je stopEnabled op true zetten wanneer de knop wordt ingedrukt. Zo wordt de knippercyclus gestopt wanneer de knop wordt ingedrukt.
cpp code
Voeg een nieuwe if-statement toe aan de knippercyclus die controleert of stopEnabled true is. Zo wordt de knippercyclus alleen uitgevoerd wanneer stopEnabled false is.
cpp code
Zet stopEnabled op false wanneer de knop wordt losgelaten, zodat de knippercyclus opnieuw kan worden gestart wanneer de knop opnieuw wordt ingedrukt.
cpp code
Met deze aanpassingen zal de knippercyclus stoppen wanneer de knop wordt ingedrukt, en opnieuw starten wanneer de knop opnieuw wordt ingedrukt. De potentiometer blijft gebruikt worden om de snelheid van het knipperen aan te passen.
Je kunt dan het volgende doen:
Voeg een nieuwe variabele stopEnabled toe aan het begin van je code, net zoals je dat met blinkEnabled hebt gedaan. Zet deze variabele op false.
cpp code
bool blinkEnabled = true;
bool stopEnabled = false;
In de if-statement waarbij je controleert of de knop is ingedrukt, kun je stopEnabled op true zetten wanneer de knop wordt ingedrukt. Zo wordt de knippercyclus gestopt wanneer de knop wordt ingedrukt.
cpp code
if (buttonState == HIGH) { // button has been released
stopEnabled = true;
}
Voeg een nieuwe if-statement toe aan de knippercyclus die controleert of stopEnabled true is. Zo wordt de knippercyclus alleen uitgevoerd wanneer stopEnabled false is.
cpp code
if (!stopEnabled) {
if (timeNow - lastTimeLEDBlinked > delayBetweenBlink) {
lastTimeLEDBlinked = timeNow;
LEDState = (LEDState == HIGH) ? LOW : HIGH;
digitalWrite(LED_PIN, LEDState);
}
}
Zet stopEnabled op false wanneer de knop wordt losgelaten, zodat de knippercyclus opnieuw kan worden gestart wanneer de knop opnieuw wordt ingedrukt.
cpp code
if (buttonState == HIGH) { // button has been released
stopEnabled = false;
}
Met deze aanpassingen zal de knippercyclus stoppen wanneer de knop wordt ingedrukt, en opnieuw starten wanneer de knop opnieuw wordt ingedrukt. De potentiometer blijft gebruikt worden om de snelheid van het knipperen aan te passen.
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 10 gasten