Arduino en WS2811
9 berichten
• Pagina 1 van 1
Arduino en WS2811
Goedeavond/nacht!
Ik heb even een klein vraagje
Ik heb laatst een WS2811 ledstrip ontvangen en deze werkt uitstekend met een arduino, maar nu had ik een vraag.
Is er een mogelijkheid om realtime de kleuren te kunnen veranderen van de ledstrip of een bepaald effect te kunnen laten afspelen via de computer? Zoals bijvoorbeeld via een C# applicatie of bestaat er al een soortgelijk programma?
Heb even snel een layout gemaakt om het idee wat duidelijker te maken:
Iemand enig idee hoe ik dit zou kunnen uitwerken?
Ik heb even een klein vraagje
Ik heb laatst een WS2811 ledstrip ontvangen en deze werkt uitstekend met een arduino, maar nu had ik een vraag.
Is er een mogelijkheid om realtime de kleuren te kunnen veranderen van de ledstrip of een bepaald effect te kunnen laten afspelen via de computer? Zoals bijvoorbeeld via een C# applicatie of bestaat er al een soortgelijk programma?
Heb even snel een layout gemaakt om het idee wat duidelijker te maken:
Iemand enig idee hoe ik dit zou kunnen uitwerken?
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino en WS2811
Meest eenvoudige is gewoon via de com poort de waardes over pompen.
Re: Arduino en WS2811
nicoverduin schreef:Meest eenvoudige is gewoon via de com poort de waardes over pompen.
Moet ik dan gebruik maken van bytes of van strings?
Mijn idee is dus om alle effecte van de ledstrips op te slaan in de sketch, en via een C# applicatie aangeven welk effect moet worden afgespeeld, of is er een betere manier om dit uit te voeren?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino en WS2811
De keuze is geheel aan jou. Een set data van de opslag van de pc geeft meer flexibiliteit dan vooraf programmeren maar maakt de sketch complexer.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Arduino en WS2811
En ik zou gewoon chars naar de arduino sturen en strings geheel vermijden op kleine controllers wegens ontbreken van garbage collection.
Re: Arduino en WS2811
Waarom niet allebei ?
Zowel een effect aanroepen als de mogelijkheid om een reeks van bytes te sturen voor iedere led afzonderlijk.
Een effect aanroepen kan met een enkel byte, zoals 'A' of 'B'.
Als je een reeks van bytes wilt versturen, dan kan het handig zijn om een start byte en een stop byte of een aantal te hebben.
Ik weet niet hoe lang de ledstrip is, maar ik zou de baudrate hoog zetten, bijvoorbeeld 115200. De standaard 9600 baud is langzaam met ongeveer 1000 tekens per seconde.
Volgens de referentie is 115200 het hoogste : https://www.arduino.cc/en/Serial/Begin, ik dacht dat het soms nog wat hoger kan, maar misschien is dat undocumented.
Bij een ATmega32U4 (zoals in de Leonardo of Micro) wordt de baudrate eigenlijk niet gebruikt en is de dataoverdracht nog veel hoger.
Zowel een effect aanroepen als de mogelijkheid om een reeks van bytes te sturen voor iedere led afzonderlijk.
Een effect aanroepen kan met een enkel byte, zoals 'A' of 'B'.
Als je een reeks van bytes wilt versturen, dan kan het handig zijn om een start byte en een stop byte of een aantal te hebben.
Ik weet niet hoe lang de ledstrip is, maar ik zou de baudrate hoog zetten, bijvoorbeeld 115200. De standaard 9600 baud is langzaam met ongeveer 1000 tekens per seconde.
Volgens de referentie is 115200 het hoogste : https://www.arduino.cc/en/Serial/Begin, ik dacht dat het soms nog wat hoger kan, maar misschien is dat undocumented.
Bij een ATmega32U4 (zoals in de Leonardo of Micro) wordt de baudrate eigenlijk niet gebruikt en is de dataoverdracht nog veel hoger.
Re: Arduino en WS2811
Het is gelukt! standaard commando's om de ledstrip van kleur te kunnen veranderen die werken, ik merk wel dat er 2 seconden delay tussen zit, is er een mogelijkheid om de delay te verkleinen?
tevens zit ik tegen het volgende probleem:
Onder aan het script is een stukje dat moet zorgen dat de ledstrip knippert alleen als ik dat effect wil uitvoeren dan knippert de ledstrip 1x wit, en daarna niet meer. terwijl die in een loop moet blijven knipperen.
Iemand enig idee hoe ik dit kan oplossen?
Zie code:
tevens zit ik tegen het volgende probleem:
Onder aan het script is een stukje dat moet zorgen dat de ledstrip knippert alleen als ik dat effect wil uitvoeren dan knippert de ledstrip 1x wit, en daarna niet meer. terwijl die in een loop moet blijven knipperen.
Iemand enig idee hoe ik dit kan oplossen?
Zie code:
- Code: Alles selecteren
#include "FastLED.h"
#define NUM_LEDS 50
#define DATA_PIN 6
#define CLOCK_PIN 13
CRGB leds[NUM_LEDS];
int val;
void setup()
{
Serial.begin(115200); // set serial speed
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
}
void loop()
{
if (Serial.available() == 0) // do nothing if nothing sent
{
if (val == 1 )
{
fill_solid( leds, NUM_LEDS, CRGB::Red);
FastLED.show();
}
/////////
if (val == 2)
{
fill_solid( leds, NUM_LEDS, CRGB::Yellow);
FastLED.show();
}
/////////
{
if (val == 3 )
fill_solid( leds, NUM_LEDS, CRGB::Green);
FastLED.show();
}
if (val == 4 )
{
fill_solid( leds, NUM_LEDS, CRGB::Orange);
FastLED.show();
}
/////////
if (val == 5 )
{
fill_solid( leds, NUM_LEDS, CRGB::Purple);
FastLED.show();
}
/////////
if (val == 6 )
{
fill_solid( leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
}
/////////
if (val == 7 )
{
fill_solid( leds, NUM_LEDS, CRGB::Cyan);
FastLED.show();
}
/////////
if (val == 8 )
{
fill_solid( leds, NUM_LEDS, CRGB::White);
FastLED.show();
delay(500);
FastLED.clear();
FastLED.show();
delay(500);
}
/////////
Serial.println(val);
}//laatste
val = Serial.parseInt(); // deduct ascii value of '0' to find numeric value of sent number
}
Re: Arduino en WS2811
Dit is een belangrijk punt. De afgelopen tijd blijven meerdere mensen hier in hangen op dit forum, omdat ze niet de gedachtensprong kunnen maken dat de loop() steeds opnieuw uitgevoerd wordt.
De loop() wordt steeds opnieuw uitgevoerd, dus zijn er vaak globale variabelen nodig die hun waarde houden als de loop() is afgelopen. Het is zelfs zo dat hoe vaker de loop() per seconde wordt uitgevoerd, des te soepeler alles gaat. Daarom is het vaak nodig om "delay()" te voorkomen door "millis()" te gebruiken. Ook werkt een "state machine" vaak goed samen met de Arduino loop().
Je hoeft dit nog niet te begrijpen, ik schrijf het alleen maar op om je alvast te laten wennen aan de termen "millis()" en "state machine"
Je gebruikt Serial.available() samen met Serial.parseInt(). Die gaan lastig samen. Kies een van de twee.
Het begint er mee dat je eerst goed omschrijft wat het protocol is dat de Arduino ontvangt.
Een getal ? Dat zegt me niets. Echt niet. Ik ben heel serieus.
Je hebt een goede omschrijving nodig.
Wil je een getal van een paar cijfers ? Hoeveel cijfers ? Kan het getal negatief zijn ? Gevolgd door een CarriageReturn of LineFeed ? Of allebei ? En wat als er geen CarriageReturn of LineFeed komt ? Hoe lang wil je dan de timeout laten duren voordat een aantal cijfers als één getal wordt gezien ? En wat als dat uit sync raakt ?
Dit is de reden dat nicoverduin schreef om enkel chars naar de arduino sturen en strings geheel vermijden, en dit is de reden dat ik een enkel byte noemde zoals 'A' en 'B'. Op die manier voorkom je al die problemen.
Doe je best, en maak een goede beschrijving van het protocol. Pas daarna kun je over de code van sketch gaan nadenken.
De loop() wordt steeds opnieuw uitgevoerd, dus zijn er vaak globale variabelen nodig die hun waarde houden als de loop() is afgelopen. Het is zelfs zo dat hoe vaker de loop() per seconde wordt uitgevoerd, des te soepeler alles gaat. Daarom is het vaak nodig om "delay()" te voorkomen door "millis()" te gebruiken. Ook werkt een "state machine" vaak goed samen met de Arduino loop().
Je hoeft dit nog niet te begrijpen, ik schrijf het alleen maar op om je alvast te laten wennen aan de termen "millis()" en "state machine"
Je gebruikt Serial.available() samen met Serial.parseInt(). Die gaan lastig samen. Kies een van de twee.
Het begint er mee dat je eerst goed omschrijft wat het protocol is dat de Arduino ontvangt.
Een getal ? Dat zegt me niets. Echt niet. Ik ben heel serieus.
Je hebt een goede omschrijving nodig.
Wil je een getal van een paar cijfers ? Hoeveel cijfers ? Kan het getal negatief zijn ? Gevolgd door een CarriageReturn of LineFeed ? Of allebei ? En wat als er geen CarriageReturn of LineFeed komt ? Hoe lang wil je dan de timeout laten duren voordat een aantal cijfers als één getal wordt gezien ? En wat als dat uit sync raakt ?
Dit is de reden dat nicoverduin schreef om enkel chars naar de arduino sturen en strings geheel vermijden, en dit is de reden dat ik een enkel byte noemde zoals 'A' en 'B'. Op die manier voorkom je al die problemen.
Doe je best, en maak een goede beschrijving van het protocol. Pas daarna kun je over de code van sketch gaan nadenken.
Re: Arduino en WS2811
Koepel schreef:Dit is een belangrijk punt. De afgelopen tijd blijven meerdere mensen hier in hangen op dit forum, omdat ze niet de gedachtensprong kunnen maken dat de loop() steeds opnieuw uitgevoerd wordt.
De loop() wordt steeds opnieuw uitgevoerd, dus zijn er vaak globale variabelen nodig die hun waarde houden als de loop() is afgelopen. Het is zelfs zo dat hoe vaker de loop() per seconde wordt uitgevoerd, des te soepeler alles gaat. Daarom is het vaak nodig om "delay()" te voorkomen door "millis()" te gebruiken. Ook werkt een "state machine" vaak goed samen met de Arduino loop().
Je hoeft dit nog niet te begrijpen, ik schrijf het alleen maar op om je alvast te laten wennen aan de termen "millis()" en "state machine"
Je gebruikt Serial.available() samen met Serial.parseInt(). Die gaan lastig samen. Kies een van de twee.
Het begint er mee dat je eerst goed omschrijft wat het protocol is dat de Arduino ontvangt.
Een getal ? Dat zegt me niets. Echt niet. Ik ben heel serieus.
Je hebt een goede omschrijving nodig.
Wil je een getal van een paar cijfers ? Hoeveel cijfers ? Kan het getal negatief zijn ? Gevolgd door een CarriageReturn of LineFeed ? Of allebei ? En wat als er geen CarriageReturn of LineFeed komt ? Hoe lang wil je dan de timeout laten duren voordat een aantal cijfers als één getal wordt gezien ? En wat als dat uit sync raakt ?
Dit is de reden dat nicoverduin schreef om enkel chars naar de arduino sturen en strings geheel vermijden, en dit is de reden dat ik een enkel byte noemde zoals 'A' en 'B'. Op die manier voorkom je al die problemen.
Doe je best, en maak een goede beschrijving van het protocol. Pas daarna kun je over de code van sketch gaan nadenken.
Hartstikke bedankt voor het uitbundige antwoord, ik ga er morgen naar kijken en me wat meer verdiepen in de genoemde termen!
Fijne avond!
9 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: wihoxefexip en 40 gasten