Pagina1 van 1
Forum

Welkom bij de Tweaking4All gemeenschapsforums!
Voor je gaat deelnemen, bekijk de Forum Regels!

Specifieke onderwerpen: Start het onderwerp met de naam van het programma of systeem.
Bijvoorbeeld “MacOS X – Jouw vraag“, of bijvoorbeeld “MS Word – Jouw Tip of Truc“.

Merk op: Omschakelen naar een andere taal zal niet werken als je een post aan het lezen bent aangezien er waarschijnlijk geen vertaling beschikbaar is.



Arduino - LED raceb...
 
Deel:
Meldingen
Alles wissen

[Opgelost] Arduino - LED racebaan project

55 Berichten
3 Gebruikers
0 Reactions
8,654 Bekeken
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Haha, ja ik ken het "werk" probleem.
Zou mooi zijn om voor je dagelijks brood dit soort projectjes te doen he?
Zo probeer ik al bijna 3 jaar m'n website zo te krijgen dat ik er van rond kan komen, maar lukken doet het echt niet.

Geen haast hoor voor wat betreft de volgende stap.
Ik zit hier ook te klooien met werk, een job in Houston (ja in Texas!) voor 6 to 24 maanden. Betaald goed, maar een hoop gedoe om dat allemaal rond te krijgen (ik heb een groen kaart) met verhuis enz.


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Niet wat ik voor ogen had.

Wit =start finish en mag blijven branden.

Groen, rood, blauw en geel mogen rond gaan. Groen en rood gaan maar blauw en geel blijven staan. Lol ik denk motor kapot.

Ik heb ingegeven te starten van -56 en dan begint hij te lopen tot het begin van de strip. Daar duurt het even voordat hij weer overnieuw begint bij -56..hij loopt wel door maar laat het niet zien.

Ziet er wel grappig uit lol.

https://youtu.be/Ry7SwTBBpfc


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Haha, ja dat ziet er inderdaad naar uit dat ze hun motor hebben opgeblazen hahah 

Wat is de sketch code ..?


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

hoi hans.

zullen we eerst eens naar het standaard gaan. dus zonder knipperen en langzamer rijden. maar wel met 5 ledjes die achter elkaar blijven gaan. ik zou ook graag willen weten als we met 2 leds in 1 kleurgaan werken hoe die vertraging erop moet bij de twee led.

zo...nu heb ik eerst geschreven en ga nu proberen de sketch code erop te zetten ;) :) :) :) :)

het zal wel een zooitje zijn nu maar dat krijg je als je een leek bent in programmeren lol.

// 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 148

// 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 finish = 56;
int groen = 55;
int rood = 53;
int blauw = 51;
int geel = 49;
int trackposition = 55;
  
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++;
     groen = trackposition;

     // Make sure looser lags behind and does not pass winner
     if(trackposition<2) {                  // keep together at start
       rood = groen;
     }
     else if (trackposition<NUM_LEDS-2) {   // random moves until close to finish
       rood = rood + random(3);
       if (rood>groen) { rood = groen; }
     }                                      // slowdown rood near finish
   }
   else // we reached the finish, blink green, fade blue, and reset track
   {
     // Blink current positions and show green car
     leds[NUM_LEDS-rood].r = 0xFF;
     leds[NUM_LEDS-rood].g = 0x00;
     leds[NUM_LEDS-rood].b = 0x00;
    
     for (int flash; flash<FLASHES; flash++) {
       // set green car color
       leds[NUM_LEDS-groen].r = 0x00;
       leds[NUM_LEDS-groen].g = 0xFF;
       leds[NUM_LEDS-groen].b = 0x30;
      
       // fade blue car, by reducing the blu intensity
       // adapt for other colors if needed
       leds[NUM_LEDS-rood].b = leds[NUM_LEDS-rood].b - (leds[NUM_LEDS-rood].b/2);
      
       FastLED.show();
       delay(FLASH_DELAY);
       // Hide green car for flashing
       leds[NUM_LEDS-groen] = CRGB::Black;
       FastLED.show();
       delay(FLASH_DELAY);
     }
    
     // Hide blue car again after done flashing/fading
     leds[NUM_LEDS-rood] = CRGB::Black;
     FastLED.show();
    
     // Reset track
     trackposition=55;
     groen=55;
     rood=53;
   }
   // Display Cars - white if they share the same position
   if (groen==rood==blauw==geel) {
     leds[NUM_LEDS-groen].r = 0xFF;
     leds[NUM_LEDS-groen].g = 0xFF;
     leds[NUM_LEDS-groen].b = 0xFF;
   }
   else
   {
     leds[NUM_LEDS-groen].r = 0x00;
     leds[NUM_LEDS-groen].g = 0xFF;
     leds[NUM_LEDS-groen].b = 0x30;
  
     leds[NUM_LEDS-rood].r = 0xFF;
     leds[NUM_LEDS-rood].g = 0x00;
     leds[NUM_LEDS-rood].b = 0x00;

     leds[NUM_LEDS-finish].r = 0xFF;
     leds[NUM_LEDS-finish].g = 0xFF;
     leds[NUM_LEDS-finish].b = 0xFF;
    
     leds[NUM_LEDS-blauw].r = 0x00;
     leds[NUM_LEDS-blauw].g = 0x00;
     leds[NUM_LEDS-blauw].b = 0xFF;

     leds[NUM_LEDS-geel].r = 0xFF;
     leds[NUM_LEDS-geel].g = 0xFF;
     leds[NUM_LEDS-geel].b = 0x00;
   }
  
   FastLED.show();
     
   // Wait a little bit
   delay(RACE_DELAY);
  
   // Turn our current led back to black for the next loop around
   leds[NUM_LEDS-groen] = CRGB::Black;
   leds[NUM_LEDS-rood] = CRGB::Black;
}


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

Hoi hans.

Hoe moeilijk kan het zijn om MY FIRST LED, MOVING ONE DOT ON A STRIP om daar 2 van te maken. Nu ben ik al twee dagen bezig en ik kan niet eens 2 leds achter elkaar laten rondgaan. Ik dacht ik zal een vooraan beginnen, maar nee hoor ook dat lukt niet eens. Ik begrijp nog steeds dat programma niet hoe het wetkt. Bijna alles in die code verandert maar het helpt niet. Volgrns mij moet ik er een apparte code bijzetten zodat hij weet dat niet alleen led 0 aan moet maar ook led 2.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Hoi Alexander,

ik ben even de code kwijt waarmee je destijds begonnen was, maar ik kan je het belangrijkste stukje uitleggen van mijn voorbeeld:

if (trackposition<NUM_LEDS) {
     trackposition++;
     groen = trackposition;
     // Make sure looser lags behind and does not pass winner
     if(trackposition<2) { // keep together at start
       rood = groen;
     } 
     else if (trackposition<NUM_LEDS-2) { // random moves until close to finish
       rood = rood + random(3);
       if (rood>groen) { rood = groen; }
     } // slowdown rood near finish 
   }

Als eerste kijken we of we nog posities op de baan overhebben om vooruit te kunnen gaan met de auto's.
Dit doen we door te kijken of trackposition kleiner is dan NUM_LEDS (het aantal leds).
Is dat het geval dan verhogen we trackposition met 1 (trackposition++).

Om nu een beetje gelijk te starten, doen we voor de eerste 2 posities alsof de auto's ongeveer even snel rijden, dus als "trackposition<2" is de positie van de rode auto gelijk aan de groene.

Als we echter voorbij het 2de LEDje zijn en we nog 2 stappen van de finish verwijderd zijn (trackposition<NUM_LEDS-2) dan gaan we random dingen met de positie van de rode doen. Maar ... het toevoegen van de willekeurige vooruitgang (random(3)) moet toegevoegd worden aan de voorgaande positie van de rode auto anders zou de auto wel heel erg rare sprongen gaan maken.

Dus dan doen we dit: de positie van de rode auto is gelijk aan de oude positie van de rode auto plus een willekeurig getal tussen 0 en 3.

Uiteraard willen we dat groen aan kop blijft dus, dus als de nieuwe positie van rood > groen is, dan forceren we de positie van rood = positie van groen. Dus geen inhalen.

Mocht je nu nog meer auto's willen toevoegen, b.v. blauw en geel, dan moet je de code zo aanpassen dat er in deze loop iets met de posities gedaan wordt. De eenvoudigste aanpassing:

if (trackposition<NUM_LEDS) {
     trackposition++;
     groen = trackposition;
     // Make sure looser lags behind and does not pass winner
     if(trackposition<2) { // keep together at start
       rood = groen;
     } 
     else if (trackposition<NUM_LEDS-2) { // random moves until close to finish
       rood = rood + random(3);
       if (rood>groen) { rood = groen; }
       blauw = blauw + random(3);
       if (blauw>groen) { blauw = groen; }
       geel = geel + random(3);
       if (geel>groen) { geel = groen; }
     } // slowdown rood near finish 
   }

In deze aanpassen doen we hetzelfde als met de rode auto, maar door random(3) zouden deze posities zich anders moeten gedragen, of althans redelijk anders.

Sorry voor de late reactie. Het is hier bij mij thuis een beetje een bende, omdat ik druk bezig ben met voorbereiden op verhuizen naar Houston Texas. Helaas zijn hier in Nederland niet veel opties voor mijn expertise om fatsoenlijk betaald werk te vinden, en ik heb recentelijk ook de lotto niet gewonnen of een vette erfenis ontvangen haha ... Dus ik moet wel.
Ik zou liever dit soort dingen de hele dag door doen (en dat meen ik), maar helaas betaald dat de kost niet ... 


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

hoi hans

ik ben weer ff bezig geweest en heb het even over een andere boeg gegooid. misschien is deze makkelijker.

nu kun je zien dat er bij
int mercedes1]=crgb(0,127,27),(200/SPEED);  
200 staat. dit gaat dus niet werken omdat er onderaan de regel de STEPDURACTION op 50 staat denk ik. heel even gaat het goed met die 200 speed maar vlak daarna gaat hij terug naar die 50 denk ik.

zou je eens kunnen kijken wat er fout gaat aub.

verder werkt het goed. ik heb nu 11 leds aangezet in verschillende kleuren en ze lopen allemaal achter elkaar.

groetjes Alexander van loon.

#include "FastLED.h"

///////////////////////////////////////////////////////////////////////////////////////////


#define NUM_LEDS 148     // How many leds are in the strip?
#define SPEED       10   // How fast the colors move.  Higher numbers = faster motion
#define STEPS        2   // How wide the bands of color are.  1 = more like a gradient, 10 = more like stripes
#define DATA_PIN 6       // Data pin that led data will be written out over
//#define CLOCK_PIN 8      // Clock pin only needed for SPI based chipsets when not using hardware SPI
CRGB leds[NUM_LEDS];     // This is an array of leds.  One item for each led in your strip.

// This function sets up the ledsand tells the controller about them
void setup() {
 // sanity check delay - allows reprogramming if accidently blowing power w/leds
    delay(2000);

    
      FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
     
}

// This function runs over and over, and is where you do the magic to light
// your leds.
void setLEDcolors(unsigned long time)
{
  memset(leds,0,sizeof(leds));
  int Mercedes1=((time+84)%NUM_LEDS);
  leds[Mercedes1]=CRGB(0,127, 27),(200 /SPEED);
 
  int RedBull2=((time+62)%NUM_LEDS);
  leds[RedBull2]=CRGB(64, 0, 64);
  int Ferrarie3=((time+60)%NUM_LEDS);
  leds[Ferrarie3]=CRGB(127, 0, 0);
  int Williams4=((time+58)%NUM_LEDS);
  leds[Williams4]=CRGB(127,127,127);
  int ForceIndia5=((time+56)%NUM_LEDS);
  leds[ForceIndia5]=CRGB(127, 51,0);
  int Sauber6=((time+54)%NUM_LEDS);
  leds[Sauber6]=CRGB(26,102,127);
  int ToroRosso7=((time+52)%NUM_LEDS);
  leds[ToroRosso7]=CRGB(0, 0,127);
  int Renault8((time+50)%NUM_LEDS);
  leds[Renault8]=CRGB(127,127, 0);
  int Haas9=((time+48)%NUM_LEDS);
  leds[Haas9]=CRGB(64, 64, 64);
  int McLaren10=((time+46)%NUM_LEDS);
  leds[McLaren10]=CRGB(0, 60,0);
  int Manor11=((time+44)%NUM_LEDS);
  leds[Manor11]=CRGB(77, 0, 0); 
  FastLED.show();
}


#define STEPDURATION 50
unsigned long stepTime;
unsigned long lastLEDupdate;

void loop(){
 
  if (millis()-lastLEDupdate>=STEPDURATION)
  {
    lastLEDupdate+=STEPDURATION;
    stepTime++;
    setLEDcolors(stepTime);
  }
}


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

sorry hans. het lukt me nog niet met die code fatsoenlijk te plaatsen.


   
BeantwoordenCiteren
 Hans
(@hans)
Famed Member Admin
Deelgenomen: 12 jaar geleden
Berichten: 2859
Topic starter  

Helaas ben ik zelf ook even afwezig geweest - ik zit midden in een verhuis van NL naar de VS ...
Zodra ik weer tijd kan maken (ik moet het hele zooitje in m'n eentje uitpakken, schoonmaken en opbergen voor ik m'n huis weer een beetje op orde heb, en dan ook nog eens iedere dag 8 uur naar m'n werk gaan - wat het zaakje erg tijdrovend maakt) wil ik er weer eens in duiken, want ik vindt het wel een leuk project ...

Ik verwacht over een weekje of 2 of 3 weer tijd te hebben ... sorry 


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 

hoi hans.

je hoeft geen sorry te zeggen. ik begrijp je helemaal. ik hoop dat jou verhuizing naar de vs helemaal soepel verloopt.

ik zoek ondertussen weer wat verder of ik ergens anders achter kan zien te komen. dit is echt zo moeilijk voor mij. ik begrijp er eigenlijk helemaal niets van.

groetjes Alexander van loon


   
BeantwoordenCiteren
Pagina 4 / 4
Deel: