Cascaded TLC5947 control

Dependencies:   mbed

Committer:
allanw
Date:
Mon Jan 16 20:47:05 2012 +0000
Revision:
0:647dde9749db

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
allanw 0:647dde9749db 1 #include "mbed.h"
allanw 0:647dde9749db 2 #include "lut.h"
allanw 0:647dde9749db 3
allanw 0:647dde9749db 4 SPI spi(p11, p12, p13);
allanw 0:647dde9749db 5 DigitalOut latchpin(p10);
allanw 0:647dde9749db 6 DigitalOut led1(LED1);
allanw 0:647dde9749db 7 DigitalOut led2(LED2);
allanw 0:647dde9749db 8 InterruptIn hall(p7);
allanw 0:647dde9749db 9
allanw 0:647dde9749db 10 #define LEDS 96
allanw 0:647dde9749db 11 #define MAX_BRIGHTNESS 4095
allanw 0:647dde9749db 12
allanw 0:647dde9749db 13 void HSVtoRGB( int *r, int *g,int *b, int h, int s, int v );
allanw 0:647dde9749db 14
allanw 0:647dde9749db 15
allanw 0:647dde9749db 16 void hall_fall() {
allanw 0:647dde9749db 17 led1 = 1;
allanw 0:647dde9749db 18 }
allanw 0:647dde9749db 19
allanw 0:647dde9749db 20 void hall_rise() {
allanw 0:647dde9749db 21 led1 = 0;
allanw 0:647dde9749db 22 }
allanw 0:647dde9749db 23
allanw 0:647dde9749db 24 void latch() {
allanw 0:647dde9749db 25 latchpin = 1;
allanw 0:647dde9749db 26 latchpin = 1;
allanw 0:647dde9749db 27 latchpin = 1;
allanw 0:647dde9749db 28 latchpin = 1;
allanw 0:647dde9749db 29 latchpin = 1;
allanw 0:647dde9749db 30 latchpin = 1;
allanw 0:647dde9749db 31 latchpin = 0;
allanw 0:647dde9749db 32 }
allanw 0:647dde9749db 33
allanw 0:647dde9749db 34 int main() {
allanw 0:647dde9749db 35 // When magnet goes near Hall-effect sensor, its output will go LOW
allanw 0:647dde9749db 36 hall.fall(&hall_fall);
allanw 0:647dde9749db 37 hall.rise(&hall_rise);
allanw 0:647dde9749db 38
allanw 0:647dde9749db 39 spi.format(12, 0);
allanw 0:647dde9749db 40 spi.frequency(16 * 1000 * 1000);
allanw 0:647dde9749db 41
allanw 0:647dde9749db 42 int brightness = 0;
allanw 0:647dde9749db 43 int dir = 0;
allanw 0:647dde9749db 44 int r, g, b;
allanw 0:647dde9749db 45
allanw 0:647dde9749db 46 latchpin = 0;
allanw 0:647dde9749db 47 while (1) {
allanw 0:647dde9749db 48 for (int h = 3599; h >= 0; h--) {
allanw 0:647dde9749db 49 for (int i = LEDS-1; i >= 0; i--) {
allanw 0:647dde9749db 50 HSVtoRGB(&r, &g, &b, h + i*150/4, 4095, brightness / 4);
allanw 0:647dde9749db 51
allanw 0:647dde9749db 52 spi.write(gamma[b]);
allanw 0:647dde9749db 53 spi.write(gamma[g]);
allanw 0:647dde9749db 54 spi.write(gamma[r]);
allanw 0:647dde9749db 55 }
allanw 0:647dde9749db 56 latch();
allanw 0:647dde9749db 57
allanw 0:647dde9749db 58 if (dir == 0) {
allanw 0:647dde9749db 59 brightness += 1;
allanw 0:647dde9749db 60 if (brightness >= 4096) {
allanw 0:647dde9749db 61 brightness = 4095;
allanw 0:647dde9749db 62 dir = 1;
allanw 0:647dde9749db 63 }
allanw 0:647dde9749db 64 } else {
allanw 0:647dde9749db 65 brightness -= 1;
allanw 0:647dde9749db 66 if (brightness < 0) {
allanw 0:647dde9749db 67 brightness = 0;
allanw 0:647dde9749db 68 dir = 0;
allanw 0:647dde9749db 69 }
allanw 0:647dde9749db 70 }
allanw 0:647dde9749db 71 }
allanw 0:647dde9749db 72 }
allanw 0:647dde9749db 73 }
allanw 0:647dde9749db 74
allanw 0:647dde9749db 75 void HSVtoRGB( int *r, int *g,int *b, int h, int s, int v ) {
allanw 0:647dde9749db 76 int f;
allanw 0:647dde9749db 77 int p, q, t;
allanw 0:647dde9749db 78
allanw 0:647dde9749db 79 if ( s == 0 ) {
allanw 0:647dde9749db 80 *r = *g = *b = v;
allanw 0:647dde9749db 81 return;
allanw 0:647dde9749db 82 }
allanw 0:647dde9749db 83
allanw 0:647dde9749db 84 h = h % 3600;
allanw 0:647dde9749db 85
allanw 0:647dde9749db 86 f = ((h%600)*4095)/600;
allanw 0:647dde9749db 87 h /= 600;
allanw 0:647dde9749db 88
allanw 0:647dde9749db 89 p = (v * (4096-s))/4096;
allanw 0:647dde9749db 90 q = (v * (4096 - (s*f)/4096))/4096;
allanw 0:647dde9749db 91 t = (v * (4096 - (s*(4096-f))/4096))/4096;
allanw 0:647dde9749db 92
allanw 0:647dde9749db 93 switch ( h ) {
allanw 0:647dde9749db 94 case 0:
allanw 0:647dde9749db 95 *r = v;
allanw 0:647dde9749db 96 *g = t;
allanw 0:647dde9749db 97 *b = p;
allanw 0:647dde9749db 98 break;
allanw 0:647dde9749db 99 case 1:
allanw 0:647dde9749db 100 *r = q;
allanw 0:647dde9749db 101 *g = v;
allanw 0:647dde9749db 102 *b = p;
allanw 0:647dde9749db 103 break;
allanw 0:647dde9749db 104 case 2:
allanw 0:647dde9749db 105 *r = p;
allanw 0:647dde9749db 106 *g = v;
allanw 0:647dde9749db 107 *b = t;
allanw 0:647dde9749db 108 break;
allanw 0:647dde9749db 109 case 3:
allanw 0:647dde9749db 110 *r = p;
allanw 0:647dde9749db 111 *g = q;
allanw 0:647dde9749db 112 *b = v;
allanw 0:647dde9749db 113 break;
allanw 0:647dde9749db 114 case 4:
allanw 0:647dde9749db 115 *r = t;
allanw 0:647dde9749db 116 *g = p;
allanw 0:647dde9749db 117 *b = v;
allanw 0:647dde9749db 118 break;
allanw 0:647dde9749db 119 default: // case 5:
allanw 0:647dde9749db 120 *r = v;
allanw 0:647dde9749db 121 *g = p;
allanw 0:647dde9749db 122 *b = q;
allanw 0:647dde9749db 123 break;
allanw 0:647dde9749db 124 }
allanw 0:647dde9749db 125 }