Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FastLED.h>
- //#include <TinySoftPwm.h>
- #define BUILT_IN_LED_PIN 1 /* Digispark Model A (Rev2) built-in LED pin number (Change it to 2 for Model B) */
- // How many leds in your strip?
- #define NUM_LEDS 12
- #define MULTIPLYER 16
- // For led chips like WS2812, which have a data line, ground, and power, you just
- // need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock,
- // ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
- // Clock pin only needed for SPI based chipsets when not using hardware SPI
- #define DATA_PIN 7
- //#define CLOCK_PIN 13
- // Define the array of leds
- CRGB leds[NUM_LEDS];
- int oldR=0,oldG=0,oldB=0;
- int newR=0,newG=0,newB=0;
- double nowR=0,nowG=0,nowB=0;
- double stepR=0, stepG=0, stepB=0;
- int thisled=5;
- int leddir=1;
- void setup() {
- //TinySoftPwm_begin(128, 0); /* 128 x TinySoftPwm_process() calls before overlap (Frequency tuning), 0 = PWM init for all declared pins */
- // Uncomment/edit one of the following lines for your leds arrangement.
- // ## Clockless types ##
- //FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); // GRB ordering is assumed
- // FastLED.addLeds<SM16703, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<TM1829, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<TM1812, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<TM1809, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<TM1804, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<TM1803, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<UCS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<UCS1903B, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<UCS1904, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<UCS2903, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
- // FastLED.addLeds<WS2852, DATA_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
- FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); // GRB ordering is typical
- // FastLED.addLeds<GS1903, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<SK6812, DATA_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
- // FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<APA106, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<PL9823, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<SK6822, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<WS2813, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<APA104, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<WS2811_400, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<GE8822, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<GW6205, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<GW6205_400, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<LPD1886, DATA_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<LPD1886_8BIT, DATA_PIN, RGB>(leds, NUM_LEDS);
- // ## Clocked (SPI) types ##
- // FastLED.addLeds<LPD6803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
- // FastLED.addLeds<LPD8806, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // GRB ordering is typical
- // FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<WS2803, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<SM16716, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
- // FastLED.addLeds<P9813, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // BGR ordering is typical
- // FastLED.addLeds<DOTSTAR, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // BGR ordering is typical
- // FastLED.addLeds<APA102, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // BGR ordering is typical
- // FastLED.addLeds<SK9822, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS); // BGR ordering is typical
- leds[0] = CRGB(255,0,0);
- FastLED.show();
- delay(500);
- leds[0] = CRGB(64,0,64);
- FastLED.show();
- delay(500);
- nowR=64; nowG=0; nowB=64;
- }
- void loop() {
- static uint32_t StartUs=micros();
- static uint32_t StartMs=millis();
- static uint8_t Pwm=0;
- static int8_t Dir=1;
- //// Turn the LED on, then pause
- //leds[0] = CRGB::Red;
- //FastLED.show();
- //delay(500);
- //// Now turn the LED off, then pause
- //leds[0] = CRGB::Black;
- //FastLED.show();
- //delay(500);
- /***********************************************************/
- /* Call TinySoftPwm_process() with a period of 60 us */
- /* The PWM frequency = 128 x 60 # 7.7 ms -> F # 130Hz */
- /* 128 is the first argument passed to TinySoftPwm_begin() */
- /***********************************************************/
- if((micros() - StartUs) >= 20000)
- {
- /* We arrived here every 60 microseconds */
- StartUs=micros();
- //TinySoftPwm_process(); /* This function shall be called periodically (like here, based on micros(), or in a timer ISR) */
- if(thisled>=NUM_LEDS){
- leddir=-1;
- }else if(thisled<=0){
- leddir=1;
- }
- leds[thisled] = CRGB(0,0,0);
- thisled+=leddir;
- //leds[thisled]=CRGB((int)nowR>>MULTIPLYER,(int)nowG>>MULTIPLYER,(int)nowB>>MULTIPLYER);
- FastLED.show();
- }
- /*************************************************************/
- /* Increment/decrement PWM on LED Pin with a period of 10 ms */
- /*************************************************************/
- if((millis()-StartMs) >= 10)
- {
- /* We arrived here every 10 milliseconds */
- StartMs=millis();
- Pwm+=Dir; /* increment or decrement PWM depending of sign of Dir */
- //TinySoftPwm_analogWrite(BUILT_IN_LED_PIN, Pwm); /* Update built-in LED for Digispark */
- if(Pwm==255)
- {Dir=-1; /* if PWM reaches the maximum: change direction */
- do_colourselect();
- }
- if(Pwm==0) {
- Dir=+1; /* if PWM reaches the minimum: change direction */
- do_colourselect();
- }
- do_colourfade();
- draw_led(thisled);
- //FastLED.show();
- }
- }
- void setled(int led, CRGB c){
- if(led>=0 && led<NUM_LEDS){
- leds[led]=c;
- }
- }
- void draw_led(int led){
- int ledoffset=0;
- int x=nowR,y=nowG,z=nowB;
- for(ledoffset=0;ledoffset<=NUM_LEDS;ledoffset++){
- setled(ledoffset,CRGB(x,y,z));
- }
- setled(led,CRGB(255,0,0));
- FastLED.show();
- setled(led,CRGB(0,0,0));
- // for(ledoffset=-7;ledoffset<=6;ledoffset++){
- // setled(led+(leddir*ledoffset),CRGB(0,0,0));
- // }
- //
- // // next 5
- // x=nowR>>MULTIPLYER,y=nowG>>MULTIPLYER,z=nowB>>MULTIPLYER;
- // x=0;y=0;z=0;
- // for(ledoffset=0;ledoffset<=5;ledoffset++){
- //
- // setled(led+(ledoffset*leddir) , CRGB(x,y,z));
- // x=x/3; y=y/3; z=z/3;
- // }
- // // current
- // setled(led, CRGB(nowR>>MULTIPLYER,nowG>>MULTIPLYER,nowB>>MULTIPLYER));
- // // prev 5
- //
- // x=nowR>>MULTIPLYER,y=nowG>>MULTIPLYER,z=nowB>>MULTIPLYER;
- // for(ledoffset=0;ledoffset<=5;ledoffset++){
- //
- // setled(led-(ledoffset*leddir) , CRGB(x,y,z));
- // x=x>>3; y=y>>3; z=z>>3;
- // }
- //FastLED.show();
- }
- void do_colourselect(void){
- int brightness=0;
- int s=0, t=0;
- int x,y,z;
- oldR=nowR;
- oldG=nowG;
- oldB=nowB;
- // brightness=random(1<<10);
- // x=random(32768>>1);
- // y=random(32768>>2)<<1;
- // z=random(32768>>4)<<2;
- t=random(32768)%3;
- // s=random(32768)%2;
- if(t==0){
- newR=255;
- newG=0;
- newB=0;
- }else if(t==1){
- newG=255;
- newR=0;
- newB=0;
- }else if(t==2){
- newB=255;
- newG=0;
- newR=0;
- }
- //newR=(double)16384.0 * ( (double)newR/(double)t ) ;
- //newG=(double)16384.0 * ( (double)newG/(double)t ) ;
- //newB=(double)16384.0 * ( (double)newB/(double)t ) ;
- stepR=(double)(newR-oldR)/(double)255.0 ;
- stepG=(double)(newG-oldG)/(double)255.0 ;
- stepB=(double)(newB-oldB)/(double)255.0 ;
- Serial.print("A");
- }
- void do_colourfade(void)
- {
- nowR=nowR+stepR;
- nowG=nowG+stepG;
- nowB=nowB+stepB;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement