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:
7:242f14ed9055
Parent:
6:59f1db26a9ff
Child:
8:a179aad4fa2e

File content as of revision 7:242f14ed9055:

#include "mbed.h"
#include "gpio_api.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)
  {
    uint32_t pinValue = gpio.pin & 0x1F;  // Mimicing mbed/libraries/mbed/vendor/NXP/capi/gpio_api.c
    
    __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();
        //asm volatile("nop\n");
        __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;

DigitalOut myled(LED1);
PololuLedStrip ledStrip(p8);

DigitalOut myled2(LED2);

#define LED_COUNT 60
rgb_color colors[LED_COUNT];

int main() {
    gpio_t gpio;
    gpio_init(&gpio, p8, PIN_OUTPUT);

    while(1) {
        myled2 = !myled2.read();
        ledStrip.write(colors, LED_COUNT);
        wait_ms(200);
    }
}