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  

Prima 

No hurry .... 


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

// Use if you want to force the software SPI subsystem to be used for some reason (generally, you don't)
// #define FASTLED_FORCE_SOFTWARE_SPI
// Use if you want to force non-accelerated pin access (hint: you really don't, it breaks lots of things)
// #define FASTLED_FORCE_SOFTWARE_SPI
// #define FASTLED_FORCE_SOFTWARE_PINS
#include "FastLED.h"

///////////////////////////////////////////////////////////////////////////////////////////
//
// Move a white dot along the strip of leds.  This program simply shows how to configure the leds,
// and then how to turn a single pixel white and then off, moving down the line of pixels.
//

// How many leds are in the strip?
#define NUM_LEDS 147

// Data pin that led data will be written out over
#define DATA_PIN 6

// Clock pin only needed for SPI based chipsets when not using hardware SPI
//#define CLOCK_PIN 8

// This is an array of leds.  One item for each led in your strip.
CRGB leds[NUM_LEDS];

// 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 loop() {
   // Move a single white led
   for(int whiteLed = NUM_LEDS-1 ; whiteLed>=0; whiteLed --) {
      // Turn our current led on to white, then show the leds
   
      leds[whiteLed].r = 0x00;
      leds[whiteLed].g = 0xFF;
      leds[whiteLed].b = 0x30;
      FastLED.show();

     
      // Wait a little bit
      delay(100);

      // Turn our current led back to black for the next loop around
      leds[whiteLed] = CRGB::Black;
   }
}


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

<pre style="width: 1023px; height: 727px;">

// Use if you want to force the software SPI subsystem to be used for some reason (generally, you don't)
// #define FASTLED_FORCE_SOFTWARE_SPI
// Use if you want to force non-accelerated pin access (hint: you really don't, it breaks lots of things)
// #define FASTLED_FORCE_SOFTWARE_SPI
// #define FASTLED_FORCE_SOFTWARE_PINS
#include "FastLED.h" ///////////////////////////////////////////////////////////////////////////////////////////
//
// Move a white dot along the strip of leds.  This program simply shows how to configure the leds,
// and then how to turn a single pixel white and then off, moving down the line of pixels.
// // How many leds are in the strip?
#define NUM_LEDS 147 // Data pin that led data will be written out over
#define DATA_PIN 6 // Clock pin only needed for SPI based chipsets when not using hardware SPI
//#define CLOCK_PIN 8 // This is an array of leds.  One item for each led in your strip.
CRGB leds[NUM_LEDS]; // 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 loop() {
   // Move a single white led
   for(int whiteLed = NUM_LEDS-1 ; whiteLed>=0; whiteLed --) {
      // Turn our current led on to white, then show the leds
   
      leds[whiteLed].r = 0x00;
      leds[whiteLed].g = 0xFF;
      leds[whiteLed].b = 0x30;
      FastLED.show();      
      // Wait a little bit
      delay(100);       // Turn our current led back to black for the next loop around
      leds[whiteLed] = CRGB::Black;
   }
}

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

hoi hans.

ik weet niet wat ik verkeerd deed maar ik kon geen tekst meer schrijven bij de code dus doe ik het maar zo.

hierboven is de code hoe hij nu gaat.

mvg Alexander van loon


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

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;
}

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

Overigens niet vergeten NUM_LEDS aan te passen - ik prul met maar 60 LEDs omdat ik die toevallig als strip had liggen.

Het kan zijn dat je een beetje moet tweaken om de race beter te laten lijkt bij meer LEDs.

Onder ideale omstandig heden zou ik de blauwe auto alleen vertragen in de bochten natuurlijk om het "echter" te laten lijkt, maar kijk maar eens hoe dit gaat voor jouw race baan .. ik ben heel erg benieuwd! 


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

Heb even een videootje in elkaar geprutst.
Koste wat moeite om een 1080p video te verkleinen, croppen en audio te verwijderen zodat het niet te gek groot werd ...
Originele opname was 38 Mb (iPhone 6S Plus - 1080p etc), en toch nog naar net over de 2Mb kunnen brengen met HandBrake 


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

Dat ziet er al heel leuk uit op jou film. Top gedaan.

De race mag voor altijd doorgaan want als ze op het knopje drukken begint hij opnieuw. Op deze manier kunnen de andere ledjes op een ronde gezet worden ;) . Het liefst heb im dat ik elk ledje appart kan instellen in snelheden. Zodat groen het hardts rijd en blauw iets langzamer en evtueel rood weer een stukje langzamer. En zo met 6 ledjes.

In het begin bij de start staan de ledjes te wachten voor ongeveer 10 seconden. De startopstelling is  led 1 groen. Led 2uit. Led 3 blauw. Led 4 uit. Led 5 rood led 6 ui. Enz...de start/finish mag ten alle tijden zwak wit oplichten. Nu weet ik even alleen niet meer welk led nr de start/finish was. Zal ik nog even moeten terug kijken of opnieuw tellen.

Lijkt mij zeer moeilijk dit te kunnen programmeren. Maar het hoeft ook niet voor niks. Voor niks gaat de zon op.

Ik zal vanavond die code invoeren en bekijken hoe het er uit ziet. 

Alvast bedankt

En met vriendelijke groet

Alexander vsn loon


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

Hoi Alexander,

Ach, geld hoeft het niet te kosten, als we maar lol hebben toch?
Dit soort projectjes vindt ik altijd wel leuk, dus ik heb er ook plezier aan ...

Het programmeren is niet moeilijk, maar je moet er even aan wennen hoe het gedaan wordt en hoe je op die manier gaat denken. Dat kost een beetje oefenen, ook voor mij hoor ...

Wat LEDs tellen betreft, loop ik ook af en toe in de knoei, omdat de volgorde omgedraaid is. Vandaar dat ik de code heb aangepast zodat ik gewoon kan tellen 1-2-3-4... etc. Het kan ook netter gedaan worden door een functie te maken die de "auto's" wegzet. 

B.v. i.p.v

     leds[NUM_LEDS-winner].r = 0x00;
     leds[NUM_LEDS-winner].g = 0xFF;
     leds[NUM_LEDS-winner].b = 0x30;

Een functie maken:

void set_greencar(lednumber) {
     leds[NUM_LEDS-lednumber].r = 0x00;
     leds[NUM_LEDS-lednumber].g = 0xFF;
     leds[NUM_LEDS-lednumber].b = 0x30;
}

en dan dus de functie aanroepen met:

set_greencar(winner);

De code wordt dan veel leesbaarder. Je kunt dat natuurlijk zo gek make als je zelf wilt.

Het eindeloos door racen leek me leuk, maar dan wordt het rekening houden met de finish-lijn wat lastiger. De achter stand van de andere auto mag dan dus niet verloren gaan, en de achterstand mag misschien ook niet te gek worden. Maar dat is misschien iets voor later.

Ik ben benieuwd hoe dit gaat lopen met 294 LEDs 


   
BeantwoordenCiteren
(@alexander44)
Eminent Member
Deelgenomen: 9 jaar geleden
Berichten: 29
 
Deze is mercedes tegen redbull. Lol

https://www.dropbox.com/s/pimwoxf3ylfnh39/20160804_184923.mp4?dl=0

En deze is mercedes tegen ferrari whahaha. Even dollen met de kleuren. Zier er leuk uit alleen hoeft die een niet af te remmen voor bochten. Ik heb liever dat ik de snelheden appart kan instellen in het programma hahaha
Ik dacht ik zet ze in dropbox zodat je ze in full hd kunt bekijken. 😉😉😉

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

Hoi hans.

 Het zijn maar 147 leds ;) ;) ;)


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

Haha, helemaal overheen gelezen (de 147 LEDs), maar stukken beter dan maar 60 

Ik ben de videos aan het downloaden, wat met mijn verbinding wel duurt hahah ... 


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

Ik heb jouw filmpjes wat verkleint, audio verwijderd, en wat strakker gecomprimeerd. Voor het geval jouw DropBox share in de toekomst komt te vervallen en anderen de video's toch nog willen zien ...

Het ziet er leuk uit, we gaan de goede kant op 

Ik bedacht me net dat als je de LEDs zou verdubbelen en de delay halveren (dus 50 ipv 100), dat het e.e.a. er dan soepeler uit gaat zien. Ik kan me echter voorstellen dat het wel een ellende zal zijn om dat te doen.

Wat wordt de volgende stap?


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

Haha, merk dat ik audio vergeten was bij de tweede video ... maakt niks uit ...

Hier nog twee snaphsots zodat andere gebruikers meteen een afbeelding kunnen zien.


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

De volgende stap is dat ik er max leds in verschillende kleuren wil inzetten. 

Dat is een goed idee met twee leds en vertraging...

Ik zal er zelf ook wat dieper in moeten duiken. Maar nog niet echt de tijd voor gehad.. dit is mijn laatste werkdag en dan 3 weken vakantie...kan ik eindelijk ff wat gasn proberen


   
BeantwoordenCiteren
Pagina 3 / 4
Deel: