mbed Christmas tree using NeoPixel

Dependencies:   mbed

Fork of JBB_SerialLED_test by Junichi Katsu

main.cpp

Committer:
MACRUM
Date:
2015-12-04
Revision:
1:789215018659
Parent:
0:57df396a2de8
Child:
2:435f94e9bb06

File content as of revision 1:789215018659:

/**
 * X'mas tree LED blinky using NeoPixel
 *
 * Copyright (C) 2015 Toyomasa Watarai (MACRUM)
 */

#include "mbed.h"
#include "LEDStrip.h"

#define START_ID  2
#define NUM_LEDS  10
#define MAX_LEVEL 100

Ticker blinker0, blinker1, blinker2, blinker3, blinker4, blinker5, blinker6, blinker7, blinker8, blinker9;
int led0_val, led1_val, led2_val, led3_val, led4_val, led5_val, led6_val, led7_val, led8_val, led9_val;

void blink_1()
{
    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
    for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
}

void blink_2()
{
    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, i, 0, 0);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, MAX_LEVEL, i, 0);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
    for( int i=0 ; i <= MAX_LEVEL ; i++ ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, MAX_LEVEL, MAX_LEVEL, i);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
    for( int i=MAX_LEVEL ; i >= 0 ; i-- ) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            tapeSet(j, i, i, i);	// LED No , Red , Green , Blue
        }
        tapeSend();
        wait_ms(15);
    }
}

void blink_3()
{
    for( int i = START_ID ; i <= (START_ID + NUM_LEDS); i++) {
        for (int j = START_ID; j <= (START_ID + NUM_LEDS); j++) {
            if ( i == j) {
                tapeSet(j, MAX_LEVEL, 0, 0);	// LED No , Red , Green , Blue
            } else {
                tapeSet(j, 0, 0, 0);	// LED No , Red , Green , Blue
            }

        }
        tapeSend();
        wait_ms(100);
    }
}

#define WAIT_TIME0 0.19
#define WAIT_TIME1 0.25
#define WAIT_TIME2 0.3
#define WAIT_TIME3 0.2
#define WAIT_TIME4 0.22
#define WAIT_TIME5 0.3
#define WAIT_TIME6 0.17
#define WAIT_TIME7 0.24
#define WAIT_TIME8 0.18
#define WAIT_TIME9 0.28

#define INTERVAL0 9
#define INTERVAL1 14
#define INTERVAL2 20
#define INTERVAL3 17
#define INTERVAL4 30
#define INTERVAL5 20
#define INTERVAL6 25
#define INTERVAL7 17
#define INTERVAL8 22
#define INTERVAL9 19

extern int wakeup;

void led0_event()
{
    tapeSet(START_ID + 0, led0_val, led0_val, led0_val);
    wakeup = 1;

    if (led0_val <= 0)
        led0_val = MAX_LEVEL;
    else
        led0_val -= INTERVAL0;

    if (led0_val < 0)
        led0_val = 0;
}

void led1_event()
{
    tapeSet(START_ID + 1, led1_val, led1_val, led1_val);
    wakeup = 1;

    if (led1_val <= 0)
        led1_val = MAX_LEVEL;
    else
        led1_val -= INTERVAL1;

    if (led1_val < 0)
        led1_val = 0;
}

void led2_event()
{
    tapeSet(START_ID + 2, led2_val, led2_val, led2_val);
    wakeup = 1;

    if (led2_val <= 0)
        led2_val = MAX_LEVEL;
    else
        led2_val -= INTERVAL2;

    if (led2_val < 0)
        led2_val = 0;
}

void led3_event()
{
    tapeSet(START_ID + 3, led3_val, led3_val, led3_val);
    wakeup = 1;

    if (led3_val <= 0)
        led3_val = MAX_LEVEL;
    else
        led3_val -= INTERVAL3;

    if (led3_val < 0)
        led3_val = 0;
}

void led4_event()
{
    tapeSet(START_ID + 4, led4_val, led4_val, led4_val);
    wakeup = 1;

    if (led4_val <= 0)
        led4_val = MAX_LEVEL;
    else
        led4_val -= INTERVAL4;

    if (led4_val < 0)
        led4_val = 0;
}

void led5_event()
{
    tapeSet(START_ID + 5, led5_val, led5_val, led5_val);
    wakeup = 1;

    if (led5_val <= 0)
        led5_val = MAX_LEVEL;
    else
        led5_val -= INTERVAL5;

    if (led5_val < 0)
        led5_val = 0;
}

void led6_event()
{
    tapeSet(START_ID + 6, led6_val, led6_val, led6_val);
    wakeup = 1;

    if (led6_val <= 0)
        led6_val = MAX_LEVEL;
    else
        led6_val -= INTERVAL6;

    if (led6_val < 0)
        led6_val = 0;
}

void led7_event()
{
    tapeSet(START_ID + 7, led7_val, led7_val, led7_val);
    wakeup = 1;

    if (led7_val <= 0)
        led7_val = MAX_LEVEL;
    else
        led7_val -= INTERVAL7;

    if (led7_val < 0)
        led7_val = 0;
}

void led8_event()
{
    tapeSet(START_ID + 8, led8_val, led8_val, led8_val);
    wakeup = 1;

    if (led8_val <= 0)
        led8_val = MAX_LEVEL;
    else
        led8_val -= INTERVAL8;

    if (led8_val < 0)
        led8_val = 0;
}

void led9_event()
{
    tapeSet(START_ID + 9, led9_val, led9_val, led9_val);
    wakeup = 1;

    if (led9_val <= 0)
        led9_val = MAX_LEVEL;
    else
        led9_val -= INTERVAL9;

    if (led9_val < 0)
        led9_val = 0;
}

void blink_4()
{
    led0_val = MAX_LEVEL;
    led1_val = MAX_LEVEL;
    led2_val = MAX_LEVEL;
    led3_val = MAX_LEVEL;
    led4_val = MAX_LEVEL;
    led5_val = MAX_LEVEL;
    led6_val = MAX_LEVEL;
    led7_val = MAX_LEVEL;
    led8_val = MAX_LEVEL;
    led9_val = MAX_LEVEL;

    blinker0.attach(&led0_event, WAIT_TIME0);
    blinker1.attach(&led1_event, WAIT_TIME1);
    blinker2.attach(&led2_event, WAIT_TIME2);
    blinker3.attach(&led3_event, WAIT_TIME3);
    blinker4.attach(&led4_event, WAIT_TIME4);
    blinker5.attach(&led5_event, WAIT_TIME5);
    blinker6.attach(&led6_event, WAIT_TIME6);
    blinker7.attach(&led7_event, WAIT_TIME7);
    blinker8.attach(&led8_event, WAIT_TIME8);
    blinker9.attach(&led9_event, WAIT_TIME9);

    wait(8);

    blinker0.detach();
    blinker1.detach();
    blinker2.detach();
    blinker3.detach();
    blinker4.detach();
    blinker5.detach();
    blinker6.detach();
    blinker7.detach();
    blinker8.detach();
    blinker9.detach();
}

int main()
{
    const int loops = 3;
    tapeInit(0, START_ID + NUM_LEDS);	// freq( 0:default ) , SerialLED num

    int i = 0;
    while(1) {
        if ((i/loops) == 0) {
            blink_4();
        }
        if ((i/loops) == 1) {
            blink_2();
        }
        if ((i/loops) == 2) {
            blink_3();
        }
        if ((i/loops) == 3) {
            blink_1();
        }

        i++;
        if (i >= (loops * 4)) {
            i = 0;
        }
    }
}