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 02:54:44 2013 +0000
Revision:
7:242f14ed9055
Parent:
6:59f1db26a9ff
Child:
8:a179aad4fa2e
Good progress.

Who changed what in which revision?

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