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.

Committer:
DavidEGrayson
Date:
Tue Feb 26 03:12:26 2013 +0000
Revision:
8:a179aad4fa2e
Parent:
7:242f14ed9055
Child:
9:b1c530cad69b
First attempt at a gradient pattern.  Tested only on the oscilloscope.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DavidEGrayson 8:a179aad4fa2e 1 #include "mbed.h"
DavidEGrayson 8:a179aad4fa2e 2
DavidEGrayson 8:a179aad4fa2e 3 namespace Pololu
DavidEGrayson 8:a179aad4fa2e 4 {
DavidEGrayson 8:a179aad4fa2e 5 #ifndef _POLOLU_RGB_COLOR
DavidEGrayson 8:a179aad4fa2e 6 #define _POLOLU_RGB_COLOR
DavidEGrayson 8:a179aad4fa2e 7 typedef struct rgb_color
DavidEGrayson 8:a179aad4fa2e 8 {
DavidEGrayson 8:a179aad4fa2e 9 uint8_t red, green, blue;
DavidEGrayson 8:a179aad4fa2e 10 } rgb_color;
DavidEGrayson 8:a179aad4fa2e 11 #endif
DavidEGrayson 8:a179aad4fa2e 12
DavidEGrayson 8:a179aad4fa2e 13 extern "C" int led_strip_write_color(rgb_color *, volatile uint32_t * set, volatile uint32_t * clear, uint32_t mask);
DavidEGrayson 8:a179aad4fa2e 14
DavidEGrayson 8:a179aad4fa2e 15 class PololuLedStrip
DavidEGrayson 8:a179aad4fa2e 16 {
DavidEGrayson 8:a179aad4fa2e 17 static bool interruptFriendly;
DavidEGrayson 8:a179aad4fa2e 18 public:
DavidEGrayson 8:a179aad4fa2e 19 gpio_t gpio;
DavidEGrayson 8:a179aad4fa2e 20 PololuLedStrip(PinName pin);
DavidEGrayson 8:a179aad4fa2e 21 void write(rgb_color * colors, unsigned int count);
DavidEGrayson 8:a179aad4fa2e 22 };
DavidEGrayson 8:a179aad4fa2e 23
DavidEGrayson 8:a179aad4fa2e 24 bool PololuLedStrip::interruptFriendly;
DavidEGrayson 8:a179aad4fa2e 25
DavidEGrayson 8:a179aad4fa2e 26 PololuLedStrip::PololuLedStrip(PinName pinName)
DavidEGrayson 8:a179aad4fa2e 27 {
DavidEGrayson 8:a179aad4fa2e 28 gpio_init(&gpio, pinName, PIN_OUTPUT);
DavidEGrayson 8:a179aad4fa2e 29 }
DavidEGrayson 8:a179aad4fa2e 30
DavidEGrayson 8:a179aad4fa2e 31 void PololuLedStrip::write(rgb_color * colors, unsigned int count)
DavidEGrayson 8:a179aad4fa2e 32 {
DavidEGrayson 8:a179aad4fa2e 33 __disable_irq(); // Disable interrupts temporarily because we don't want our pulse timing to be messed up.
DavidEGrayson 8:a179aad4fa2e 34
DavidEGrayson 8:a179aad4fa2e 35 while(count--)
DavidEGrayson 8:a179aad4fa2e 36 {
DavidEGrayson 8:a179aad4fa2e 37 led_strip_write_color(colors++, gpio.reg_set, gpio.reg_clr, gpio.mask);
DavidEGrayson 8:a179aad4fa2e 38
DavidEGrayson 8:a179aad4fa2e 39 if (interruptFriendly)
DavidEGrayson 8:a179aad4fa2e 40 {
DavidEGrayson 8:a179aad4fa2e 41 __enable_irq();
DavidEGrayson 8:a179aad4fa2e 42 __nop();
DavidEGrayson 8:a179aad4fa2e 43 __nop();
DavidEGrayson 8:a179aad4fa2e 44 __nop();
DavidEGrayson 8:a179aad4fa2e 45 __disable_irq();
DavidEGrayson 8:a179aad4fa2e 46 }
DavidEGrayson 8:a179aad4fa2e 47 }
DavidEGrayson 8:a179aad4fa2e 48 __enable_irq(); // Re-enable interrupts now that we are done.
DavidEGrayson 8:a179aad4fa2e 49 wait_us(24); // Hold the line low for 24 microseconds to send the reset signal.
DavidEGrayson 8:a179aad4fa2e 50 }
DavidEGrayson 8:a179aad4fa2e 51 }
DavidEGrayson 8:a179aad4fa2e 52
DavidEGrayson 8:a179aad4fa2e 53 using namespace Pololu;
DavidEGrayson 8:a179aad4fa2e 54
DavidEGrayson 8:a179aad4fa2e 55 #define LED_COUNT 60
DavidEGrayson 8:a179aad4fa2e 56 rgb_color colors[LED_COUNT];
DavidEGrayson 8:a179aad4fa2e 57
DavidEGrayson 8:a179aad4fa2e 58 PololuLedStrip ledStrip(p8);
DavidEGrayson 8:a179aad4fa2e 59
DavidEGrayson 8:a179aad4fa2e 60 DigitalOut led2(LED2);
DavidEGrayson 8:a179aad4fa2e 61
DavidEGrayson 8:a179aad4fa2e 62 Timer timer;
DavidEGrayson 8:a179aad4fa2e 63
DavidEGrayson 8:a179aad4fa2e 64 int main()
DavidEGrayson 8:a179aad4fa2e 65 {
DavidEGrayson 8:a179aad4fa2e 66 timer.start();
DavidEGrayson 8:a179aad4fa2e 67
DavidEGrayson 8:a179aad4fa2e 68 while(1)
DavidEGrayson 8:a179aad4fa2e 69 {
DavidEGrayson 8:a179aad4fa2e 70 uint8_t time = timer.read_ms() >> 2;
DavidEGrayson 8:a179aad4fa2e 71 for(uint8_t i = 0; i < LED_COUNT; i++)
DavidEGrayson 8:a179aad4fa2e 72 {
DavidEGrayson 8:a179aad4fa2e 73 uint8_t x = time - 8*i;
DavidEGrayson 8:a179aad4fa2e 74 colors[i] = (rgb_color){ x, 255 - x, x };
DavidEGrayson 8:a179aad4fa2e 75 }
DavidEGrayson 8:a179aad4fa2e 76
DavidEGrayson 8:a179aad4fa2e 77 led2 = !led2.read();
DavidEGrayson 8:a179aad4fa2e 78 ledStrip.write(colors, LED_COUNT);
DavidEGrayson 8:a179aad4fa2e 79 wait_ms(10);
DavidEGrayson 8:a179aad4fa2e 80 }
DavidEGrayson 8:a179aad4fa2e 81 }