Example project for controlling GE ColorEffect Lights

Dependencies:   mbed

Committer:
clarkjarvis
Date:
Mon Jan 19 20:31:32 2015 +0000
Revision:
1:93c7d040444d
Parent:
0:d9cf7fb66406
Updated comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
clarkjarvis 0:d9cf7fb66406 1 #include "mbed.h"
clarkjarvis 0:d9cf7fb66406 2
clarkjarvis 1:93c7d040444d 3 DigitalOut gpo(D12); // Output pin for lights
clarkjarvis 0:d9cf7fb66406 4 DigitalOut led_red(LED_RED);
clarkjarvis 0:d9cf7fb66406 5 DigitalOut led_green(LED_GREEN);
clarkjarvis 0:d9cf7fb66406 6 DigitalOut led_blue(LED_BLUE);
clarkjarvis 0:d9cf7fb66406 7
clarkjarvis 0:d9cf7fb66406 8 #define AL 18 // Array Length
clarkjarvis 0:d9cf7fb66406 9 #define NB 50 // Number of Bulbs
clarkjarvis 0:d9cf7fb66406 10 #define LUM 0xFF // Brightness
clarkjarvis 0:d9cf7fb66406 11
clarkjarvis 1:93c7d040444d 12 //Example RGB Color Array (18)
clarkjarvis 0:d9cf7fb66406 13 unsigned int rval[AL] = {0xF,0xF,0xF,0xF,0xA,0x8,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x8,0xA};
clarkjarvis 0:d9cf7fb66406 14 unsigned int gval[AL] = {0x0,0x0,0x0,0x0,0x6,0x8,0xA,0xF,0xF,0xF,0xA,0x8,0x6,0x0,0x0,0x0,0x0,0x0};
clarkjarvis 0:d9cf7fb66406 15 unsigned int bval[AL] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x8,0xA,0xF,0xF,0xA,0x8,0x6};
clarkjarvis 0:d9cf7fb66406 16
clarkjarvis 1:93c7d040444d 17 // GPIO output to send a logical 0
clarkjarvis 0:d9cf7fb66406 18 void s0()
clarkjarvis 0:d9cf7fb66406 19 {
clarkjarvis 0:d9cf7fb66406 20 gpo=0;
clarkjarvis 0:d9cf7fb66406 21 wait_us(10);
clarkjarvis 0:d9cf7fb66406 22 gpo=1;
clarkjarvis 0:d9cf7fb66406 23 wait_us(20);
clarkjarvis 0:d9cf7fb66406 24 }
clarkjarvis 0:d9cf7fb66406 25
clarkjarvis 1:93c7d040444d 26 // GPIO output to send a logical 1
clarkjarvis 0:d9cf7fb66406 27 void s1()
clarkjarvis 0:d9cf7fb66406 28 {
clarkjarvis 0:d9cf7fb66406 29 gpo=0;
clarkjarvis 0:d9cf7fb66406 30 wait_us(20);
clarkjarvis 0:d9cf7fb66406 31 gpo=1;
clarkjarvis 0:d9cf7fb66406 32 wait_us(10);
clarkjarvis 0:d9cf7fb66406 33 }
clarkjarvis 0:d9cf7fb66406 34
clarkjarvis 1:93c7d040444d 35 // GPIO output to send an "End of Frame" marker
clarkjarvis 0:d9cf7fb66406 36 void end_frame()
clarkjarvis 0:d9cf7fb66406 37 {
clarkjarvis 0:d9cf7fb66406 38 gpo=0;
clarkjarvis 0:d9cf7fb66406 39 wait_us(30);
clarkjarvis 0:d9cf7fb66406 40 }
clarkjarvis 0:d9cf7fb66406 41
clarkjarvis 1:93c7d040444d 42 // Parse data value to serial process 0/1's
clarkjarvis 0:d9cf7fb66406 43 void sdata(unsigned int data, int length)
clarkjarvis 0:d9cf7fb66406 44 {
clarkjarvis 0:d9cf7fb66406 45 unsigned int data_bit;
clarkjarvis 0:d9cf7fb66406 46
clarkjarvis 0:d9cf7fb66406 47 for (int i=(length-1); i>=0; i--) {
clarkjarvis 0:d9cf7fb66406 48 data_bit = (data>>i)&0x01;
clarkjarvis 0:d9cf7fb66406 49 if (data_bit==0) {
clarkjarvis 0:d9cf7fb66406 50 s0();
clarkjarvis 0:d9cf7fb66406 51 } else if (data_bit==1) {
clarkjarvis 0:d9cf7fb66406 52 s1();
clarkjarvis 0:d9cf7fb66406 53 }
clarkjarvis 0:d9cf7fb66406 54 }
clarkjarvis 0:d9cf7fb66406 55 }
clarkjarvis 0:d9cf7fb66406 56
clarkjarvis 1:93c7d040444d 57 // Send frame of data to control a single pixel
clarkjarvis 0:d9cf7fb66406 58 void sframe(int channel, unsigned int lumm, unsigned int R, unsigned int G, unsigned int B)
clarkjarvis 0:d9cf7fb66406 59 {
clarkjarvis 0:d9cf7fb66406 60 // Send "1" value to start Frame
clarkjarvis 0:d9cf7fb66406 61 s1();
clarkjarvis 0:d9cf7fb66406 62 // Send Address
clarkjarvis 0:d9cf7fb66406 63 sdata(channel,6);
clarkjarvis 0:d9cf7fb66406 64 // Send Luminosity
clarkjarvis 0:d9cf7fb66406 65 sdata(lumm,8);
clarkjarvis 0:d9cf7fb66406 66 // Send Blue 4-bits
clarkjarvis 0:d9cf7fb66406 67 sdata(B,4);
clarkjarvis 0:d9cf7fb66406 68 // Send Green 4-bits
clarkjarvis 0:d9cf7fb66406 69 sdata(G,4);
clarkjarvis 0:d9cf7fb66406 70 // Send Red 4-bits
clarkjarvis 0:d9cf7fb66406 71 sdata(R,4);
clarkjarvis 0:d9cf7fb66406 72 // Send End of Frame Marker
clarkjarvis 0:d9cf7fb66406 73 end_frame();
clarkjarvis 0:d9cf7fb66406 74 }
clarkjarvis 0:d9cf7fb66406 75
clarkjarvis 0:d9cf7fb66406 76 int main()
clarkjarvis 0:d9cf7fb66406 77 {
clarkjarvis 0:d9cf7fb66406 78 led_red=1;
clarkjarvis 0:d9cf7fb66406 79 led_green=1;
clarkjarvis 0:d9cf7fb66406 80 led_blue=1;
clarkjarvis 0:d9cf7fb66406 81 gpo=0;
clarkjarvis 0:d9cf7fb66406 82
clarkjarvis 0:d9cf7fb66406 83 wait_ms(1000);
clarkjarvis 0:d9cf7fb66406 84
clarkjarvis 1:93c7d040444d 85 // Initialize the light addresses (required after initially powering lights)
clarkjarvis 0:d9cf7fb66406 86 for (int i=0; i<=NB; i++) {
clarkjarvis 0:d9cf7fb66406 87 sframe(i,0,0,0,0);
clarkjarvis 0:d9cf7fb66406 88 }
clarkjarvis 0:d9cf7fb66406 89
clarkjarvis 1:93c7d040444d 90 // Example light sequence
clarkjarvis 0:d9cf7fb66406 91 while(1) {
clarkjarvis 0:d9cf7fb66406 92 for (int i=0; i<AL; i++) {
clarkjarvis 0:d9cf7fb66406 93 for (int j=0; j<NB; j++) {
clarkjarvis 0:d9cf7fb66406 94 sframe(j,LUM,rval[(i+j)%AL],gval[(i+j)%AL],bval[(i+j)%AL]);
clarkjarvis 0:d9cf7fb66406 95 }
clarkjarvis 0:d9cf7fb66406 96 wait_ms(10);
clarkjarvis 0:d9cf7fb66406 97 }
clarkjarvis 0:d9cf7fb66406 98 }
clarkjarvis 0:d9cf7fb66406 99 }