arduino mega + 2 ledstrips

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 7
Geregistreerd: 12 Jan 2017, 18:36

arduino mega + 2 ledstrips

Berichtdoor mk323f » 12 Jan 2017, 20:27

Hallo, en aangenaam kennis te maken, ik ben nieuw op het forum en ook vrij nieuw op het gebied van arduino.

Ik heb mijzelf 2 ledstrips aangeschaft die ik wil gaan sturen via de arduino mega.
De ledstrips zijn van het type WS2813 deze werken exact hetzelfde als type WS2812B alleen heeft de WS2813 een backup data aansluiting, mocht er een led kapot gaan dan blijven de overige leds in de strip wel werken via de backup aansluiting.
Het aansluiten ging allemaal prima en met de tests van internet werken de leds naar behoren, nu ik wat verder wil gaan en zelf een sketch probeer te schrijven stuit ik toch op problemen.

Ik heb voor mijn sketch de colorWipe functie uit de neopixel strandtest geisoleerd en geprobeerd voor elkaar te krijgen wat ik voor ogen had.
Ik wilde beide strips de colorWipe functie tegelijkertijd laten uitvoeren maar met een vertraging tussen de strips, strip 1 begint bijvoorbeeld 1 seconde eerder dan strip 2.
Om het iets beter te kunnen zien heb ik ook geprobeerd strip 1 een andere kleur te geven.

Ik krijg het wel voor elkaar om op beide strips de colorwipe functie uit te voeren, maar beide strips beginnen op het zelfde moment en ook hebben beide strips dezelfde kleur.

Heeft er iemand misschien een ideetje om dit werkend te krijgen

Code: Alles selecteren
#include <Adafruit_NeoPixel.h>

#define NUMPIXELS 83

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(NUMPIXELS, 6, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(NUMPIXELS, 4, NEO_GRB + NEO_KHZ800);


void setup() {

  strip_a.begin();
  strip_b.begin();
}

void loop()
    {
    colorWipe(strip_a.Color(255, 0, 0), 50); // Red
    delay(1000);
    colorWipe(strip_a.Color(0, 0, 255), 50); // Blue
    }
   
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip_a.numPixels(); i++)
  for(uint16_t i=0; i<strip_b.numPixels(); i++){
    strip_a.setPixelColor(i, c);
    strip_b.setPixelColor(i, c);
    strip_a.show();
    strip_b.show();
    delay(250);   

}}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: arduino mega + 2 ledstrips

Berichtdoor shooter » 12 Jan 2017, 20:51

je stuurt naar beide dan ook hetzelfde toe, de pixelColor is hetzelfde
je mag natuurlijk altijd in de loop ook een colorwipe voor strip_b zetten, met andere kleuren.
verder staat er een regel teveel in de colorwipe functie, (je gebruikt de i teveel, )
paul deelen
shooter@home.nl

Berichten: 7
Geregistreerd: 12 Jan 2017, 18:36

Re: arduino mega + 2 ledstrips

Berichtdoor mk323f » 12 Jan 2017, 22:53

Bedankt voor je antwoord, mag ik zo vrij zijn om te vragen hoe ik dit op de beste manier kan wijzigen?
Ik ben nog vrij nieuw op het gebied van arduino, maar ik hoop het wel graag te leren aan de hand van voorbeelden.
Of weet je misschien een site waar ik het beste terecht kan om het onder de knie te krijgen?
alvast bedankt

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: arduino mega + 2 ledstrips

Berichtdoor Koepel » 13 Jan 2017, 00:52

Naar dit stukje heb ik verwonderd zitten kijken:
Code: Alles selecteren
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip_a.numPixels(); i++)
  for(uint16_t i=0; i<strip_b.numPixels(); i++){
    strip_a.setPixelColor(i, c);
    strip_b.setPixelColor(i, c);
    strip_a.show();
    strip_b.show();
    delay(250);   
}}

Kun je de tekst netter schrijven ? zodat de structuur van de code beter te zien is ? Je kunt ook Ctrl+T doen.
Kies je eigen stijl, en gebruik die consequent. In je kleine sketch heb je al drie stijlen door elkaar :o
Mijn stijl is op deze manier (waarschuwing: de code zelf is niet correct):
Code: Alles selecteren
void colorWipe( uint32_t c, uint8_t wait)
{
  for( uint16_t i=0; i<strip_a.numPixels(); i++)
  {
    for( uint16_t i=0; i<strip_b.numPixels(); i++)
    {
      strip_a.setPixelColor( i, c);
      strip_b.setPixelColor( i, c);
      strip_a.show();
      strip_b.show();
      delay( 250);   
    }
  }
}

Je gebruikt de variabele "i" in beide for-loops. Als ik daar lang over nadenk, dan kun je een tweede "i" met een tweede for-loop declareren en binnen die for-loop geeft de compiler de voorkeur aan de binnenste "i". Het is echter niet netjes. Dus je zou beter een van de "i" een andere naam kunnen geven. Maar... volgens mij heeft shooter gelijk, en wil je eigenlijk geen twee for-loops binnen elkaar, en zou je een regel met een for-loop kunnen verwijderen.

Berichten: 7
Geregistreerd: 12 Jan 2017, 18:36

Re: arduino mega + 2 ledstrips

Berichtdoor mk323f » 13 Jan 2017, 21:05

Ik kijk net zo verwonderd naar hetzelfde stukje :lol:

Ik heb geprobeerd jullie zo goed mogelijk te begrijpen, mocht dit niet zo zijn hoor ik graag waar ik het mis heb.

Ik heb de colorwipe nu apart van elkaar gezet 1 voor strip a, 1 voor b, ook heb ik nu de code wat netter geschreven.
De ctrl-t was ook een goede suggestie die kende ik nog niet.
Beide colorwipes gebruiken nu ook aparte namen.

De kleuren worden nu goed weergegeven, het lukt me alleen niet om de colorwipes tegelijkertijd (of nog liever met een kleine vertraging tussen de 2 ledstrips) te laten lopen.
Op het moment loopt strip 1 eerst helemaal vol met rood, waarna strip 2 begint aan blauw.


Code: Alles selecteren
void loop()
{
  colorWipe_a(strip_a.Color(255, 0, 0), 50); // Red
  colorWipe_b(strip_b.Color(0, 0, 255), 50); // Blue
}

void colorWipe_a(uint32_t c, uint8_t wait)
{
  for (uint16_t i = 0; i < strip_a.numPixels(); i++)
  {
    strip_a.setPixelColor(i, c);
    strip_a.show();
    delay(100);
  }
}

void colorWipe_b(uint32_t d, uint8_t wait)
{
  for (uint16_t j = 0; j < strip_b.numPixels(); j++)
  {
    strip_b.setPixelColor(j, d);
    strip_b.show();
    delay(100);
  }
}

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: arduino mega + 2 ledstrips

Berichtdoor Koepel » 13 Jan 2017, 22:16

Met een kleine vertraging ? Dat kan met millis(), maar laat dat maar even rusten en probeer eerst meer ervaring op te doen met gewoon programmeren.

Je hebt nu twee for-loops die achter elkaar worden uitgevoerd. Aangezien ze beiden hetzelfde aantal leds hebben, kun je ze ook in één loop doen. De kleuren zijn anders, dus daar zijn twee parameter voor nodig.
Code: Alles selecteren
void colorWipe_ab(uint32_t c, uint32_t d, uint8_t wait)
{
  for (uint16_t i = 0; i < NUMPIXELS; i++)
  {
    strip_a.setPixelColor(i, c);
    strip_a.show();
    strip_b.setPixelColor(i, d);
    strip_b.show();
    delay(100);
  }
}

Ziet dat er logisch en duidelijk uit ? Je had het bijna zelf kunnen bedenken ;)

Berichten: 7
Geregistreerd: 12 Jan 2017, 18:36

Re: arduino mega + 2 ledstrips

Berichtdoor mk323f » 13 Jan 2017, 23:10

Bedankt voor je reactie, op het moment heb ik alleen de ledstrips om aan te sluiten op de arduino en te programmeren.
Door het programmeren van de strips probeer ik het ook een beetje onder de knie te krijgen.

Je code ziet er inderdaad logischer en een stuk compacter uit, alleen bij het verifieren krijg ik de volgende foutmelding.

too few arguments to function 'void colorWipe_ab(uint32_t, uint32_t, uint8_t)'

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: arduino mega + 2 ledstrips

Berichtdoor Koepel » 13 Jan 2017, 23:18

Ik heb ze beide gecombineerd, en nu zijn er twee parameters voor de kleur.
Dus de aanroep zal zoiets worden:
Code: Alles selecteren
  colorWipe_ab(strip_a.Color(255, 0, 0), strip_b.Color(0, 0, 255), 50); // Red for a, Blue for b

Ik weet eerlijk gezegd niet of het de bedoeling is dat 'strip_a.Color()' daar zo gebruikt wordt. Ik heb wel een NeoPixel in een project, maar dat is lang geleden.

Berichten: 7
Geregistreerd: 12 Jan 2017, 18:36

Re: arduino mega + 2 ledstrips

Berichtdoor mk323f » 13 Jan 2017, 23:44

het zat hem indd in de aanroep, weer wat geleerd bedankt.
mills() ga ik morgen ook even uitzoeken bedankt voor die tip

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: arduino mega + 2 ledstrips

Berichtdoor shooter » 13 Jan 2017, 23:55

ja millis() is prima, want je moet af van die for loops en delay, je moet gewoon gaan optellen telkens als de tijd (met millis() voorbij is.
maak op papier eens een schema van wat je wilt dat maakt het schrijven makkelijk.
om te debuggen kun je Serial.print gebruiken samen met de monitor.
paul deelen
shooter@home.nl

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten