Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 0:647dde9749db
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Jan 16 20:47:05 2012 +0000 @@ -0,0 +1,125 @@ +#include "mbed.h" +#include "lut.h" + +SPI spi(p11, p12, p13); +DigitalOut latchpin(p10); +DigitalOut led1(LED1); +DigitalOut led2(LED2); +InterruptIn hall(p7); + +#define LEDS 96 +#define MAX_BRIGHTNESS 4095 + +void HSVtoRGB( int *r, int *g,int *b, int h, int s, int v ); + + +void hall_fall() { + led1 = 1; +} + +void hall_rise() { + led1 = 0; +} + +void latch() { + latchpin = 1; + latchpin = 1; + latchpin = 1; + latchpin = 1; + latchpin = 1; + latchpin = 1; + latchpin = 0; +} + +int main() { + // When magnet goes near Hall-effect sensor, its output will go LOW + hall.fall(&hall_fall); + hall.rise(&hall_rise); + + spi.format(12, 0); + spi.frequency(16 * 1000 * 1000); + + int brightness = 0; + int dir = 0; + int r, g, b; + + latchpin = 0; + while (1) { + for (int h = 3599; h >= 0; h--) { + for (int i = LEDS-1; i >= 0; i--) { + HSVtoRGB(&r, &g, &b, h + i*150/4, 4095, brightness / 4); + + spi.write(gamma[b]); + spi.write(gamma[g]); + spi.write(gamma[r]); + } + latch(); + + if (dir == 0) { + brightness += 1; + if (brightness >= 4096) { + brightness = 4095; + dir = 1; + } + } else { + brightness -= 1; + if (brightness < 0) { + brightness = 0; + dir = 0; + } + } + } + } +} + +void HSVtoRGB( int *r, int *g,int *b, int h, int s, int v ) { + int f; + int p, q, t; + + if ( s == 0 ) { + *r = *g = *b = v; + return; + } + + h = h % 3600; + + f = ((h%600)*4095)/600; + h /= 600; + + p = (v * (4096-s))/4096; + q = (v * (4096 - (s*f)/4096))/4096; + t = (v * (4096 - (s*(4096-f))/4096))/4096; + + switch ( h ) { + case 0: + *r = v; + *g = t; + *b = p; + break; + case 1: + *r = q; + *g = v; + *b = p; + break; + case 2: + *r = p; + *g = v; + *b = t; + break; + case 3: + *r = p; + *g = q; + *b = v; + break; + case 4: + *r = t; + *g = p; + *b = v; + break; + default: // case 5: + *r = v; + *g = p; + *b = q; + break; + } +} \ No newline at end of file