Led strip met Fastled 1 maal loop aflaten werken

Beste allemaal,

Ik ben al een tijdje bezig met wat kleine dingen in arduino, nu heb ik echter een projectje waar ik niet uit kom
Ik heb een programmatje geschreven om een aantal leds op een ledstrip aan te sturen.
Nu wil ik graag dat deze loop als ik een drukschakelaar activeer 1 maal afgespeeld wordt.
wie kan me uitleggen hoe ik het beste dit in mijn programma en hardware kan inpassen
hieronder de code tot dusver
Alvast bedankt
Groetjes Jeroen
#> include <FastLED.h>

#define NUM_LEDS 18
#define LED_PIN 2

CRGB leds[NUM_LEDS];

void setup() {
FastLED.addLeds<WS2812B, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(100);
}

void loop() {

leds[0] = CRGB::Red;
FastLED.show();
delay(600);

leds[1] = CRGB::Red;
FastLED.show();
delay(600);

leds[2] = CRGB::Red;
FastLED.show();
delay(600);

leds[3] = CRGB::Red;
FastLED.show();
delay(600);

leds[4] = CRGB::Red;
FastLED.show();
delay(600);

leds[5] = CRGB::Red;
FastLED.show();
delay(600);

leds[6] = CRGB::Red;
FastLED.show();
delay(600);

leds[7] = CRGB::Red;
FastLED.show();
delay(600);

leds[8] = CRGB::Red;
FastLED.show();
delay(600);

leds[9] = CRGB::Red;
FastLED.show();
delay(600);

leds[10] = CRGB::Red;
FastLED.show();
delay(600);

leds[11] = CRGB::Red;
FastLED.show();
delay(600);

leds[12] = CRGB::Red;
FastLED.show();
delay(600);

leds[13] = CRGB::Red;
FastLED.show();
delay(600);

leds[14] = CRGB::Red;
FastLED.show();
delay(600);

leds[15] = CRGB::Red;
FastLED.show();
delay(600);

leds[16] = CRGB::Red;
FastLED.show();
delay(600);

leds[17] = CRGB::Red;
FastLED.show();
delay(600);

fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
delay(500);

fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show();
delay(500);

fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
delay(500);

fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show();
delay(500);

fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
delay(500);

}

Heb je al eens gekeken naar de voorbeelden in de IDE? Ik gebrouik de engelstalige IDE en daar zijn het de voorbeelden Button en StateChangeDetection.

Kun je aub. je post hier bewerken; selecteer alle code en klik op image ; sla vervolgens je post weer op.

Heb ik gekeken maar dan blijft de loop lopen en bij button high mag hij het lichtriedeltje maar 1 keer afspelen
Als hij dan weer low wordt mag er niets gebeuren tot de button weer high is

Dan doe je iets verkeerd :wink: Zet je poging hier neer (en gebruik code tags zoals beschreven in mijn vorige antwoord).

Wat betreft de StateChangeDetection: de truc is dat je kijkt of een pin van laag naar hoog gaat (of omgekeerd), niet of een pin laag is of hoog is.

onder aan de loop kun je een while (!knopje) {} dan blijft hetprogramma lekker niks doen tot je op de knop drukt, dat kun je daarna ook bovenaan zetten want dan wacht het tot je op de knop drukt, de ! is voor LOW of HIGH

Zie het nu pas...Maar:
Ik stel voor om het hele riedeltje in de loop() in een subroutine te zetten, bijvoorbeeld: void Riedeltje(){ ...... }
Dan sluit je een drukknopje aan tussen nul en een ingang naar keuze. Je hebt 2 al gebruikt voor de Leds, dus laten we de drukknop dan tussen 3 en GND zetten.
Bovenin krijg je dan #define Drukknop 3 en in de setup() voeg je de regel toe dat aansluiting 3 een ingang is : pinMode(Drukknop, INPUT_PULLUP);
In de loop() ga je dan afvragen of de knop ingedukt is (digitalRead(Drukknop) is dan nul, vandaar het uitroepteken er voor om het te inverteren):

   if(!digitalRead(Drukknop)){ 
     Riedeltje(); 
   }

Dit is de meest eenvoudige uitvoering.. Je kan bij de afvraag ook nog een debouncing inbouwen omdat de schakelaar meerdere pulsjes afgeeft als je 'm indrukt.. maar voorloping kan je hier wel mee uit de voeten, denk ik..
Kees

Hallo, ik ben Wokwi aan het proberen en ik heb je project in Wokwi gezet: https://wokwi.com/arduino/projects/297729336124899848.
Klik op de groene start-knop (onder het kopje "Simulation") om te starten. Klik eerst op de stop-knop om de sketch te kunnen wijzigen.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.