OK, ziet er goed uit.
Het niet meer kunnen schrijven gebeurt soms ja, ik moet daarvoor de editor nog bewerken hier om dat te fixen. Als je namelijk eerst code plaatst, is er geen regel meer na de code om te schijven. Ik wou dat WordPress/bbPress daar een betere editor zouden bieden ...
Dus de groene raceauto draait rondjes en je wilt dat er nog een bij komt, die dus eigenlijk steeds "achter" blijft,.. right?
Moet de race steeds opnieuw beginnen?
Ik denk dan aan een ander LEDje dat steeds 1 to 3 stappen "achter blijft" t.a.v. de groene.
Als de groene door de finish gaat: beiden laten knipperen. Even wachten en weer opnieuw beginnen?
Heb jouw code even herschreven (kijk vooral eens naar de define's in het begin).
Ik heb de race positie telling ook even omgegooid, dat denkt wat makkelijker om van nul naar het einde te gaan i.p.v. andersom ...
De blauwe auto (looser) raced met de groene auto (winner) en de blauwe auto haalt nooit de groen in.
Als ze echter op dezelfde positie staan, dan wordt die LED wit.
Ik heb de "achterstand" van de blauwe auto random gemaakt, je kunt daar evt. mee spelen.
Ik heb dit even snel getest met 60 LEDs en het loopt best geinig.
Aan de eindstreep knippert de groene auto (zie ook FLASHES en FLASH_DELAY) en daarna begint de race weer.
// RACE TRACK
// Two cars race, blue and green. Green always wins.
// Finish: green car flashes/blinks and the blue car fades.
#include "FastLED.h"
// How many leds are in the strip?
#define NUM_LEDS 60
// define race speed delay
#define RACE_DELAY 100
// define flashes after win
#define FLASHES 10
// define Flash delay
#define FLASH_DELAY 50
// Data pin that led data will be written out over
#define DATA_PIN 6
// This is an array of leds. One item for each led in your strip.
CRGB leds[NUM_LEDS];
// Define cars and trackposition
int winner = 0;
int looser = 0;
int trackposition = 0;
void setup() {
delay(2000);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
randomSeed(analogRead(0)); // used for better semi random numbers
}
// The Race
void loop() {
// Go to the next track position and position the cars
if (trackposition<NUM_LEDS) {
trackposition++;
winner = trackposition;
// Make sure looser lags behind and does not pass winner
if(trackposition<2) { // keep together at start
looser = winner;
}
else if (trackposition<NUM_LEDS-2) { // random moves until close to finish
looser = looser + random(3);
if (looser>winner) { looser = winner; }
} // slowdown looser near finish
}
else // we reached the finish, blink green, fade blue, and reset track
{
// Blink current positions and show blue car
leds[NUM_LEDS-looser].r = 0x00;
leds[NUM_LEDS-looser].g = 0x00;
leds[NUM_LEDS-looser].b = 0xFF;
for (int flash; flash<FLASHES; flash++) {
// set green car color
leds[NUM_LEDS-winner].r = 0x00;
leds[NUM_LEDS-winner].g = 0xFF;
leds[NUM_LEDS-winner].b = 0x30;
// fade blue car, by reducing the blu intensity
// adapt for other colors if needed
leds[NUM_LEDS-looser].b = leds[NUM_LEDS-looser].b - (leds[NUM_LEDS-looser].b/2);
FastLED.show();
delay(FLASH_DELAY);
// Hide green car for flashing
leds[NUM_LEDS-winner] = CRGB::Black;
FastLED.show();
delay(FLASH_DELAY);
}
// Hide blue car again after done flashing/fading
leds[NUM_LEDS-looser] = CRGB::Black;
FastLED.show();
// Reset track
trackposition=0;
winner=0;
looser=0;
}
// Display Cars - white if they share the same position
if (winner==looser) {
leds[NUM_LEDS-winner].r = 0xFF;
leds[NUM_LEDS-winner].g = 0xFF;
leds[NUM_LEDS-winner].b = 0xFF;
}
else
{
leds[NUM_LEDS-winner].r = 0x00;
leds[NUM_LEDS-winner].g = 0xFF;
leds[NUM_LEDS-winner].b = 0x30;
leds[NUM_LEDS-looser].r = 0x00;
leds[NUM_LEDS-looser].g = 0x00;
leds[NUM_LEDS-looser].b = 0xFF;
}
FastLED.show();
// Wait a little bit
delay(RACE_DELAY);
// Turn our current led back to black for the next loop around
leds[NUM_LEDS-winner] = CRGB::Black;
leds[NUM_LEDS-looser] = CRGB::Black;
}