Ledstrip in 13 stukjes verdeeld

Arduino specifieke Software
Berichten: 10
Geregistreerd: 10 Aug 2020, 20:29
Woonplaats: 's-Hertogenbosch (Hintham)

Ledstrip in 13 stukjes verdeeld

Berichtdoor Nicoooootje » 11 Nov 2020, 22:42

Heb het volgende waar ik niet uitkom. Tenminste heb het werkend maar volgens mij kan het eenvoudiger.

Heb een ledstrip WS2812b van 299 leds. Deze gebruikt ik voor mijn trap en heb deze opgedeeld in 13 strips van 23 leds. Nu heb ik een stukje code waar ik graag zou willen dat de 13 strips precies hetzelfde doen. Heb het nu als volgt opgelost maar volgens mij moet dit met veel minder code kunnen.

Code: Alles selecteren
void OutsideToCenter(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for (int i = 0; i <= ((23 - EyeSize) / 2); i++) {
    //setAll(0, 0, 0);
    strip.setPixelColor(i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 23, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 46, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 69, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 92, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 115, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 138, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 161, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 184, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 207, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 230, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 253, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 276, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      strip.setPixelColor(i + j, red, green, blue);
      strip.setPixelColor(i + 23 + j, red, green, blue);
      strip.setPixelColor(i + 46 + j, red, green, blue);
      strip.setPixelColor(i + 69 + j, red, green, blue);
      strip.setPixelColor(i + 92 + j, red, green, blue);
      strip.setPixelColor(i + 115 + j, red, green, blue);
      strip.setPixelColor(i + 138 + j, red, green, blue);
      strip.setPixelColor(i + 161 + j, red, green, blue);
      strip.setPixelColor(i + 184 + j, red, green, blue);
      strip.setPixelColor(i + 207 + j, red, green, blue);
      strip.setPixelColor(i + 230 + j, red, green, blue);
      strip.setPixelColor(i + 253 + j, red, green, blue);
      strip.setPixelColor(i + 276 + j, red, green, blue);
    }
    strip.setPixelColor(i + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 23 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 46 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 69 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 92 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 115 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 138 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 161 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 184 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 207 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 230 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 253 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(i + 276 + EyeSize + 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 23 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 46 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 69 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 92 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 115 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 138 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 161 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 184 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 207 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 230 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 253 - i, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 276 - i, red / 10, green / 10, blue / 10);
    for (int j = 1; j <= EyeSize; j++) {
      strip.setPixelColor(23 - i - j, red, green, blue);
      strip.setPixelColor(23 + 23 - i - j, red, green, blue);
      strip.setPixelColor(23 + 46 - i - j, red, green, blue);
      strip.setPixelColor(23 + 69 - i - j, red, green, blue);
      strip.setPixelColor(23 + 92 - i - j, red, green, blue);
      strip.setPixelColor(23 + 115 - i - j, red, green, blue);
      strip.setPixelColor(23 + 138 - i - j, red, green, blue);
      strip.setPixelColor(23 + 161 - i - j, red, green, blue);
      strip.setPixelColor(23 + 184 - i - j, red, green, blue);
      strip.setPixelColor(23 + 207 - i - j, red, green, blue);
      strip.setPixelColor(23 + 230 - i - j, red, green, blue);
      strip.setPixelColor(23 + 253 - i - j, red, green, blue);
      strip.setPixelColor(23 + 276 - i - j, red, green, blue);
    }
    strip.setPixelColor(23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 46 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 69 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 92 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 115 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 138 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 161 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 184 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 207 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 230 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 253 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.setPixelColor(23 + 276 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    strip.show();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
}

Advertisement

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

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor shooter » 12 Nov 2020, 17:25

ik zou define gebruiken dus strip[1] =23 strip[2]=46 ....

of nog simpeler for teller=0 to 13 step 1
{
strip[teller]=teller*23}
for teller 0 to 13
dan kun je dus ook strip.setpixelcolor(teller) in 1 regel zetten en die 13 keer herhalen.
en je kunt ook red/10 als een define neerzetten dus #define dimmedred 25 enz.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 10 Aug 2020, 20:29
Woonplaats: 's-Hertogenbosch (Hintham)

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor Nicoooootje » 12 Nov 2020, 21:38

Heb nu dit gedaan maar loopt niet lekker. Loopt eigenlijk helemaal niet.

Code: Alles selecteren
void CenterToOutside(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for (uint16_t j = 0; j < 13; j++) {
    int start = strip.numPixels() / 13 * j;
    for (int i = ((23 - EyeSize) / 2); i >= 0; i--) {
      //setAll(0, 0, 0);
      strip.setPixelColor(i, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(i + j, red, green, blue);
        strip.setPixelColor(start + i + j, red, green, blue);
      }
      strip.setPixelColor(i + EyeSize + 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i + EyeSize + 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(23 - i, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i + 23 - i, red / 10, green / 10, blue / 10);

      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(23 - i - j, red, green, blue);
        strip.setPixelColor(start + i + 23 - i - j, red, green, blue);
      }
      strip.setPixelColor(23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i + 23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    }
    strip.show();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
}

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

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor shooter » 13 Nov 2020, 16:16

dat snap ik wel, ik denk dat het allemaal erg snel gaat omdat de speeddelay niet op de goeie plek staat danwel er iets fout gaat met de haakjes.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 10 Aug 2020, 20:29
Woonplaats: 's-Hertogenbosch (Hintham)

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor Nicoooootje » 13 Nov 2020, 21:25

Heb de speed delay verplaatst en nu doet hij het. Alleen gaan de strips na elkaar aan en ze moeten alles tegelijker tijd doen. Heb de strip.show() ook al verplaatst maar zonder succes.

Code: Alles selecteren
void CenterToOutside(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for (uint16_t j = 0; j < 13; j++) {
    int start = strip.numPixels() / 13 * j;
    for (int i = ((23 - EyeSize) / 2); i >= 0; i--) {
      strip.setPixelColor(start + i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(start + i + j, red, green, blue);
      }
      strip.setPixelColor(start + i + EyeSize + 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i + 23 - i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        //strip.setPixelColor(23 - i - j, red, green, blue);
        strip.setPixelColor(start + 23 - i - j, red, green, blue);
      }
      strip.setPixelColor(start + 23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
      strip.show();
      delay(SpeedDelay);
    }
    delay(ReturnDelay);
  } 
}

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

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor shooter » 14 Nov 2020, 16:00

even voor je zelf een flowschema maken, en daar elke stap inzetten dan komt daar vanzelf een actievolgorde uit.
en lekker zelf puzzelen, ipv een kant en klare oplossing dioe ik je wel kan geven maar doe het niet
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 10 Aug 2020, 20:29
Woonplaats: 's-Hertogenbosch (Hintham)

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor Nicoooootje » 16 Nov 2020, 16:01

Heb hem na wat uurtjes puzzelen zo als ik hem wil. maar....haha het gaat nu allemaal wat langzaam. Hoop dat je me kunt helpen om hem wat sneller te laten gaan. Heb de speeddelay en returndelay al uitgezet maar nog steeds te langzaam. Dit is wat ik nu heb.

Code: Alles selecteren
  for (int i = ((23 - EyeSize) / 2); i >= 0; i--) {
    for (uint16_t j = 0; j < 13; j++) {
      int start = strip.numPixels() / 13 * j;
      strip.setPixelColor(start + i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(start + i + j, red, green, blue);
      }
      strip.setPixelColor(start + i + EyeSize + 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + i + 23 - i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(start + 23 - i - j, red, green, blue);
      }
      strip.setPixelColor(start + 23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
      //delay(SpeedDelay);
      strip.show();
    }
    //delay(ReturnDelay);
  }
}

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

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor shooter » 17 Nov 2020, 16:01

iedere keer als je een andere toestand hebt moet je wel een strip.show doen.
paul deelen
shooter@home.nl

Berichten: 10
Geregistreerd: 10 Aug 2020, 20:29
Woonplaats: 's-Hertogenbosch (Hintham)

Re: Ledstrip in 13 stukjes verdeeld

Berichtdoor Nicoooootje » 18 Nov 2020, 20:20

De show.strip stond idd verkeerd. Nu werkt het. Dankje wel

Code: Alles selecteren
void CenterToOutside(byte red, byte green, byte blue, int EyeSize, int SpeedDelay, int ReturnDelay) {
  for (int i = ((23 - EyeSize) / 2); i >= 0; i--) {
    for (uint16_t j = 0; j < 13; j++) {
      int start = strip.numPixels() / 13 * j;
      strip.setPixelColor(start + i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(start + i + j, red, green, blue);
      }
      strip.setPixelColor(start + i + EyeSize + 1, red / 10, green / 10, blue / 10);
      strip.setPixelColor(start + 23 - i, red / 10, green / 10, blue / 10);
      for (int j = 1; j <= EyeSize; j++) {
        strip.setPixelColor(start + 23 - i - j, red, green, blue);
      }
      strip.setPixelColor(start + 23 - i - EyeSize - 1, red / 10, green / 10, blue / 10);
    }
    strip.show();
    delay(SpeedDelay);
  }
  delay(ReturnDelay);
}

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 21 gasten