Advertisement
msmouse

Untitled

Jan 31st, 2021
1,105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.00 KB | None | 0 0
  1. #include <FastLED.h>
  2. //#include <TinySoftPwm.h>
  3. #define BUILT_IN_LED_PIN  1 /* Digispark Model A (Rev2) built-in LED pin number (Change it to 2 for Model B) */
  4.  
  5.  
  6. // How many leds in your strip?
  7. #define NUM_LEDS 12
  8. #define MULTIPLYER 16
  9.  
  10. // For led chips like WS2812, which have a data line, ground, and power, you just
  11. // need to define DATA_PIN.  For led chipsets that are SPI based (four wires - data, clock,
  12. // ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
  13. // Clock pin only needed for SPI based chipsets when not using hardware SPI
  14. #define DATA_PIN 7
  15. //#define CLOCK_PIN 13
  16.  
  17. // Define the array of leds
  18. CRGB leds[NUM_LEDS];
  19.  
  20. int oldR=0,oldG=0,oldB=0;
  21. int newR=0,newG=0,newB=0;
  22. double nowR=0,nowG=0,nowB=0;
  23. double stepR=0, stepG=0, stepB=0;
  24. int thisled=5;
  25. int leddir=1;
  26.  
  27. void setup() {
  28.     //TinySoftPwm_begin(128, 0); /* 128 x TinySoftPwm_process() calls before overlap (Frequency tuning), 0 = PWM init for all declared pins */
  29.  
  30.     // Uncomment/edit one of the following lines for your leds arrangement.
  31.     // ## Clockless types ##
  32.     //FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);  // GRB ordering is assumed
  33.     // FastLED.addLeds<SM16703, DATA_PIN, RGB>(leds, NUM_LEDS);
  34.     // FastLED.addLeds<TM1829, DATA_PIN, RGB>(leds, NUM_LEDS);
  35.     // FastLED.addLeds<TM1812, DATA_PIN, RGB>(leds, NUM_LEDS);
  36.     // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
  37.     // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
  38.     // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
  39.     // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
  40.     // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
  41.     // FastLED.addLeds<UCS1904, DATA_PIN, RGB>(leds, NUM_LEDS);
  42.     // FastLED.addLeds<UCS2903, DATA_PIN, RGB>(leds, NUM_LEDS);
  43.     // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
  44.     // FastLED.addLeds<WS2852, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
  45.     FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);  // GRB ordering is typical
  46.     // FastLED.addLeds<GS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
  47.     // FastLED.addLeds<SK6812, DATA_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
  48.     // FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
  49.     // FastLED.addLeds<APA106, DATA_PIN, RGB>(leds, NUM_LEDS);
  50.     // FastLED.addLeds<PL9823, DATA_PIN, RGB>(leds, NUM_LEDS);
  51.     // FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
  52.     // FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
  53.     // FastLED.addLeds<WS2813, DATA_PIN, RGB>(leds, NUM_LEDS);
  54.     // FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
  55.     // FastLED.addLeds<WS2811_400, DATA_PIN, RGB>(leds, NUM_LEDS);
  56.     // FastLED.addLeds<GE8822, DATA_PIN, RGB>(leds, NUM_LEDS);
  57.     // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
  58.     // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
  59.     // FastLED.addLeds<LPD1886, DATA_PIN, RGB>(leds, NUM_LEDS);
  60.     // FastLED.addLeds<LPD1886_8BIT, DATA_PIN, RGB>(leds, NUM_LEDS);
  61.     // ## Clocked (SPI) types ##
  62.     // FastLED.addLeds<LPD6803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
  63.     // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
  64.     // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  65.     // FastLED.addLeds<WS2803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  66.     // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
  67.     // FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // BGR ordering is typical
  68.     // FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // BGR ordering is typical
  69.     // FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // BGR ordering is typical
  70.     // FastLED.addLeds<SK9822, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);  // BGR ordering is typical
  71.     leds[0] = CRGB(255,0,0);
  72.     FastLED.show();
  73.     delay(500);
  74.     leds[0] = CRGB(64,0,64);
  75.     FastLED.show();
  76.     delay(500);
  77.     nowR=64; nowG=0; nowB=64;
  78. }
  79.  
  80. void loop() {
  81.  
  82.   static uint32_t StartUs=micros();
  83.   static uint32_t StartMs=millis();
  84.   static uint8_t Pwm=0;
  85.   static int8_t  Dir=1;
  86.  
  87.  
  88.  
  89.   //// Turn the LED on, then pause
  90.   //leds[0] = CRGB::Red;
  91.   //FastLED.show();
  92.   //delay(500);
  93.   //// Now turn the LED off, then pause
  94.   //leds[0] = CRGB::Black;
  95.   //FastLED.show();
  96.   //delay(500);
  97.  
  98.   /***********************************************************/
  99.   /* Call TinySoftPwm_process() with a period of 60 us       */
  100.   /* The PWM frequency = 128 x 60 # 7.7 ms -> F # 130Hz      */
  101.   /* 128 is the first argument passed to TinySoftPwm_begin() */
  102.   /***********************************************************/
  103.   if((micros() - StartUs) >= 20000)
  104.   {
  105.     /* We arrived here every 60 microseconds */
  106.     StartUs=micros();
  107.     //TinySoftPwm_process(); /* This function shall be called periodically (like here, based on micros(), or in a timer ISR) */
  108.     if(thisled>=NUM_LEDS){
  109.       leddir=-1;
  110.     }else if(thisled<=0){
  111.       leddir=1;
  112.     }
  113.     leds[thisled] = CRGB(0,0,0);
  114.     thisled+=leddir;
  115.     //leds[thisled]=CRGB((int)nowR>>MULTIPLYER,(int)nowG>>MULTIPLYER,(int)nowB>>MULTIPLYER);
  116.     FastLED.show();
  117.   }
  118.  
  119.   /*************************************************************/
  120.   /* Increment/decrement PWM on LED Pin with a period of 10 ms */
  121.   /*************************************************************/
  122.   if((millis()-StartMs) >= 10)
  123.   {
  124.     /* We arrived here every 10 milliseconds */
  125.     StartMs=millis();
  126.     Pwm+=Dir; /* increment or decrement PWM depending of sign of Dir */
  127.     //TinySoftPwm_analogWrite(BUILT_IN_LED_PIN, Pwm); /* Update built-in LED for Digispark */
  128.     if(Pwm==255)
  129.        {Dir=-1; /* if PWM reaches the maximum: change direction */
  130.        do_colourselect();
  131.        }
  132.     if(Pwm==0) {
  133.       Dir=+1; /* if PWM reaches the minimum: change direction */
  134.       do_colourselect();
  135.     }
  136.     do_colourfade();
  137.     draw_led(thisled);
  138.     //FastLED.show();
  139.  
  140.   }
  141. }
  142. void setled(int led, CRGB c){
  143.   if(led>=0 && led<NUM_LEDS){
  144.     leds[led]=c;
  145.   }
  146. }
  147. void draw_led(int led){
  148.   int ledoffset=0;
  149.   int x=nowR,y=nowG,z=nowB;
  150.   for(ledoffset=0;ledoffset<=NUM_LEDS;ledoffset++){
  151.     setled(ledoffset,CRGB(x,y,z));
  152.   }
  153.   setled(led,CRGB(255,0,0));
  154.   FastLED.show();
  155.   setled(led,CRGB(0,0,0));
  156.  
  157.  // for(ledoffset=-7;ledoffset<=6;ledoffset++){
  158.  //    setled(led+(leddir*ledoffset),CRGB(0,0,0));
  159.  // }
  160.  //
  161.  // // next 5
  162.  // x=nowR>>MULTIPLYER,y=nowG>>MULTIPLYER,z=nowB>>MULTIPLYER;
  163.  // x=0;y=0;z=0;
  164.  //   for(ledoffset=0;ledoffset<=5;ledoffset++){
  165.  //    
  166.  //     setled(led+(ledoffset*leddir) , CRGB(x,y,z));
  167.  //     x=x/3; y=y/3; z=z/3;
  168.  //   }
  169.  // // current
  170.  //   setled(led, CRGB(nowR>>MULTIPLYER,nowG>>MULTIPLYER,nowB>>MULTIPLYER));
  171.  // // prev 5
  172.  //
  173.  // x=nowR>>MULTIPLYER,y=nowG>>MULTIPLYER,z=nowB>>MULTIPLYER;
  174.  //   for(ledoffset=0;ledoffset<=5;ledoffset++){
  175.  //    
  176.  //     setled(led-(ledoffset*leddir) , CRGB(x,y,z));
  177.  //     x=x>>3; y=y>>3; z=z>>3;
  178.  //   }
  179.     //FastLED.show();
  180.  
  181.   }
  182.  
  183. void do_colourselect(void){
  184.    int brightness=0;
  185.    int s=0, t=0;
  186.    int x,y,z;
  187.    oldR=nowR;
  188.    oldG=nowG;
  189.    oldB=nowB;
  190. //   brightness=random(1<<10);
  191. //   x=random(32768>>1);
  192. //   y=random(32768>>2)<<1;
  193. //   z=random(32768>>4)<<2;
  194.    t=random(32768)%3;
  195. //   s=random(32768)%2;
  196.    if(t==0){
  197.       newR=255;
  198.       newG=0;
  199.       newB=0;
  200.    }else if(t==1){
  201.       newG=255;
  202.       newR=0;
  203.       newB=0;
  204.    }else if(t==2){
  205.       newB=255;
  206.       newG=0;
  207.       newR=0;
  208.      
  209.    }
  210.    
  211.    //newR=(double)16384.0 * ( (double)newR/(double)t ) ;
  212.    //newG=(double)16384.0 * ( (double)newG/(double)t ) ;
  213.    //newB=(double)16384.0 * ( (double)newB/(double)t ) ;
  214.    
  215.    stepR=(double)(newR-oldR)/(double)255.0 ;
  216.    stepG=(double)(newG-oldG)/(double)255.0 ;
  217.    stepB=(double)(newB-oldB)/(double)255.0 ;
  218.    Serial.print("A");
  219.    
  220. }
  221. void do_colourfade(void)
  222. {
  223.     nowR=nowR+stepR;
  224.     nowG=nowG+stepG;
  225.     nowB=nowB+stepB;
  226.    
  227. }
  228.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement