Ok, hier komt een aardig lang verhaal.
Lees het eerst even helemaal door, en dan nog eens (een paar keer) en misschien in kleinere stappen.
Probeer niet alles wat ik hier noem in 1 keer te verwerken, want daarmee zou je eenvoudig het overzicht weer kunnen kwijtraken.
Jij neemt aan dat je erg veel if ... then regels moet maken om overflows te voorkomen, omdat je nu een helderheid wil maken voor 4 LEDs en de andere 2 uit wil zetten.
Die andere 2 uitzetten zal geen probleem zijn.
Maar voor de overigen begrijp ik wel waarom je dat denkt.
Ik vertel je nu dat je helemaal niet zoveel if ... then hoeft te doen.
Maar je moet wel wat onthouden (heb je 'm weer).
Wat je eerst gaat doen is de overflow aan de onderkant en aan de bovenkont voorkomen.
Omdat we in een cirkel gaan, wordt de overflow aan de bovenkant gereset naar de onderkant, en aan de onderkant gaat 'ie naar de bovenkant.
Dat hadden we al onder controle.
De rest doe je dan door dat onthouden.
Daarvoor heb je naast currentLed, wat meer variabelen nodig.
Ik noem die dan maar trail,trail1 en trail2 (trail als in nagloei spoor).
In het begin geef je currentLed een startwaarde mee, zeg maar 2 (ongeveer in het midden dus, maar daar mag jij van maken wat je wil).
Alle trails zet je daar op dezelfde waarde omdat je ergens moet beginnen.
Nu ga je bepalen weke uitgang er welke waarde moet krijgen.
Dat doe je door met de laatste waarde te beginnen, daar is een reden voor.
Eerder heb ik al eens genoemd dat je het menselijke lichaam met logarithmische waardes het best bedient.
Dat betekent dat wat je eerder voorstelde met 100 %, 75 %, 50 % en 25%, je wel een verloop ziet, maar dat je met die stappen niet mooi gelijkmatige toenames ziet.
Daarom denk ik eerder aan 100%, 46%, 21% en 10% (dat zijn natuurlijk geen willekeurige waardes, maar heb ik opgezocht).
Deze percentages zijn dus de helderheden die je dan zou aansturen.
Vertaald naar de analog outputs krijg je dan 255, 117, 54 en 25.
Wat je daar dan mee doet, is alle LEDs op 0 zetten, en meteen daarna trail2 op 25, trail1 op 54, trail op 117 en currentLed op 255.
In het begin zijn alle de inhouden allemaal gelijk en stuur je dus in werkelijkheid maar 1 LED aan en dat gaat dusdanig snel dat je de verschillen niet gaat zien.
Wanneer je alle LEDs hebt aangestuurd, ga je bekijken welke kant je op zal gaan, en eventueel hoe snel.
Nu kopieer je de waarde van currentLed naar trail, de waarde uit trail naar trail1 en de waarde uit trail1 naar trail2, en dus ook in deze volgorde.
Daarna geef je aan currentLed de nieuwe waarde (dus pinnummer) die je zojuist bepaald hebt.
Je gaat straks met het volgende rondje door loop() deze waardes gebruiken, en zo bouw je je nagloei spoor op.
Omdat je de overflows al onder controle houdt met currentLed, gaan de andere LEDs dus nooit overflowen en ga je jezelf een hele berg if ... then uitsparen.
Eerder had ik het ook al over basic wiskunde.
Dat kun je gebruiken voor de richting en voor de snelheid.
Ook hiervoor gebruiken we het geheugen.
We maken dus ook variabelen en ik zou dan spd voor snelheid en dir voor richting gebruiken, maar daar mag je zelf namen voor bedenken die jij handiger vind.
Je hoeft nu aan dir maar 2 waarden toe te kennen, te weten 1 of -1.
Vervolgens hoog je currentLed op met de waarde uit dir.
Daarna kun je nog een snelheid gaan verwerken.
Dat kun je doen door iets te bedenken (kan misschien wel op verschillende manieren) waardoor je niet alleen bepaalt of de knop links of rechts van het midden zit, maar ook hoe ver.
Het resultaat daaruit kun je schalen (dat heb je al eerder toegepast meen ik) naar bruikbare waardes en die vermenigvuldig je vervolgens met een basiswaarde waarvan dat resultaat dan weer in spd terecht komt.
spd bepaalt vervolgens de vertraging tussen tussen het eind van loop() en het begin van de volgende stap.
De uitdaging die daarna zou kunnen komen, is dit dan weer op de blink without delay manier te doen.
In dit verhaal heb ik je een stuk of 10 (zojuist nog even snel geteld) verschillende dingen aangevoerd die te samen de oplossing kunnen vormen voor de eerder opgegeven opgave.
Probeer die niet allemaal tegelijk uit te voeren, maar ze 1 voor 1 op te pikken en uit te werken.
Daar gaat wat tijd inzitten, maar het zal de moeite waard zijn.
Ik vind het zelf erg leuk om dit soort puzzels op te pikken en al helemaal wanneer me dat dan ook na wat zwoegen toch lukt.
Veel succes met het uitwerken hiervan, en schroom niet je vragen te stellen.
Ik zag nog een foutje en heb dat gewijzigd met rode tekst