Hirdetés

Keresés

Új hozzászólás Aktív témák

  • válasz razorbenke92 #16218 üzenetére

    Szóval itt van ez a kódrész, ami durván 1200byte-ba fáj
    void spark()
    {
      if(millis() < timer) timer = millis(); //if millis() has overflown
      if(millis() - timer > random(1000,(mode[selectedMode].Speed*40)+1100))
      {
        timer = millis();
        
        uint32_t localColor = presetColor[mode[selectedMode].color];
        
        for(int i=10; i<=60;i++)
        {      
          DIMnFILL(1,localColor,i);
        }
        for(int i=60; i>=20;i--)
        {
          DIMnFILL(5,localColor,i);
        }
        for(int i=20; i<=200;i++)
        {
          DIMnFILL(1,localColor,i);
        }
        for(int i=200; i>=100;i--)
        {
          DIMnFILL(3,localColor,i);
        }  
        colorFill(presetColor[mode[selectedMode].backcolor]);
      }
    }

    a mode tömb belőle készült:
    struct ModePresets 
    {
    byte effect;
    byte color;
    byte backcolor;
    byte Speed;
    };

    a DIMnFILL:
    void DIMnFILL(int delays, uint32_t colors, int dims)
    {
        //colors = Dim(colors,dims);
          colorFill(colors);
          delay(delays);
    }

    ebből a DIM tele van szorzással, osztással, amire a korábban linkelt hint azt mondja, érdemes kerülni, ezért ki van kommentelve

    colorFill
    void colorFill(uint32_t c)
    {
        for(uint16_t i=0; i<strip.numPixels(); i++) 
        {
          strip.setPixelColor(i, c);
        }
        //strip.fill(c);
        strip.show();
    }

    Itt érdekesség, hogy amennyiben a strip.fill()-t használom, bukok 260byteot kb, így inkább a saját megoldásom használom.

    Ez az egyik legegyszerűbb effekt, lebontva alapműveletekig a neopixeles eljárások szintjéig.
    1200byte.

    Minden más itt van: [https://github.com/razorbenke92/digispark_ARGB_controller/blob/main/digispark_ARGB_controller.ino] és az 4144byte-ba fordul a spark() nélkül.

    Köszi, ha valaki belekukkant.

Új hozzászólás Aktív témák