This is an example program for the PololuLedStrip library. It generates a simple moving gradient pattern.

Dependencies:   PololuLedStrip mbed LedStripGradient

Dependents:   LedStripGradient led_phare_crf

For more information, see the PololuLedStrip library.

main.cpp

Committer:
DavidEGrayson
Date:
2013-02-26
Revision:
8:a179aad4fa2e
Parent:
7:242f14ed9055
Child:
9:b1c530cad69b

File content as of revision 8:a179aad4fa2e:

#include "mbed.h"

namespace Pololu
{
    #ifndef _POLOLU_RGB_COLOR
    #define _POLOLU_RGB_COLOR
    typedef struct rgb_color
    {
        uint8_t red, green, blue;
    } rgb_color;
    #endif

    extern "C" int led_strip_write_color(rgb_color *, volatile uint32_t * set, volatile uint32_t * clear, uint32_t mask);

    class PololuLedStrip
    {
        static bool interruptFriendly;
        public:
        gpio_t gpio;
        PololuLedStrip(PinName pin);
        void write(rgb_color * colors, unsigned int count);
    };

    bool PololuLedStrip::interruptFriendly;

    PololuLedStrip::PololuLedStrip(PinName pinName)
    {
       gpio_init(&gpio, pinName, PIN_OUTPUT);
    }

    void PololuLedStrip::write(rgb_color * colors, unsigned int count)
    {
        __disable_irq();   // Disable interrupts temporarily because we don't want our pulse timing to be messed up.
    
        while(count--)
        {
            led_strip_write_color(colors++, gpio.reg_set, gpio.reg_clr, gpio.mask);
      
            if (interruptFriendly)
            {
                __enable_irq();
                __nop();
                __nop();
                __nop();
                __disable_irq();
            }
        }
        __enable_irq();   // Re-enable interrupts now that we are done.
        wait_us(24);      // Hold the line low for 24 microseconds to send the reset signal.
    }
}

using namespace Pololu;

#define LED_COUNT 60
rgb_color colors[LED_COUNT];

PololuLedStrip ledStrip(p8);

DigitalOut led2(LED2);

Timer timer;

int main()
{
    timer.start();

    while(1)
    {
        uint8_t time = timer.read_ms() >> 2;
        for(uint8_t i = 0; i < LED_COUNT; i++)
        {
            uint8_t x = time - 8*i;
            colors[i] = (rgb_color){ x, 255 - x, x };
        }
    
        led2 = !led2.read();
        ledStrip.write(colors, LED_COUNT);
        wait_ms(10);
    }
}