Hackers Delight Weekender light display

Dependencies:   NetServices mbed

Committer:
user3259784281760646093
Date:
Sun Aug 07 14:51:38 2011 +0000
Revision:
0:937a0073cc9d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
user3259784281760646093 0:937a0073cc9d 1 #include "mbed.h"
user3259784281760646093 0:937a0073cc9d 2
user3259784281760646093 0:937a0073cc9d 3 #include "string.h"
user3259784281760646093 0:937a0073cc9d 4 //#include "RPCFunction.h"
user3259784281760646093 0:937a0073cc9d 5 #include "font.h"
user3259784281760646093 0:937a0073cc9d 6
user3259784281760646093 0:937a0073cc9d 7 //#include "EthernetNetIf.h"
user3259784281760646093 0:937a0073cc9d 8 //#include "HTTPServer.h"
user3259784281760646093 0:937a0073cc9d 9
user3259784281760646093 0:937a0073cc9d 10
user3259784281760646093 0:937a0073cc9d 11
user3259784281760646093 0:937a0073cc9d 12 #define cell_height 5
user3259784281760646093 0:937a0073cc9d 13 #define cell_width 4
user3259784281760646093 0:937a0073cc9d 14 #define numberofcolumns 16
user3259784281760646093 0:937a0073cc9d 15
user3259784281760646093 0:937a0073cc9d 16 #define numberofchars 10
user3259784281760646093 0:937a0073cc9d 17
user3259784281760646093 0:937a0073cc9d 18 #define string1length 28
user3259784281760646093 0:937a0073cc9d 19 #define string2length 36
user3259784281760646093 0:937a0073cc9d 20
user3259784281760646093 0:937a0073cc9d 21 #define maxtextlength 160
user3259784281760646093 0:937a0073cc9d 22
user3259784281760646093 0:937a0073cc9d 23 #define numberofbuffercolumns maxtextlength * (cell_width + 1)
user3259784281760646093 0:937a0073cc9d 24 #define bufferendspace 16
user3259784281760646093 0:937a0073cc9d 25
user3259784281760646093 0:937a0073cc9d 26 #define maxdisplayx 10
user3259784281760646093 0:937a0073cc9d 27 #define maxdisplayy 4
user3259784281760646093 0:937a0073cc9d 28
user3259784281760646093 0:937a0073cc9d 29
user3259784281760646093 0:937a0073cc9d 30 DigitalOut myLed1(LED1);
user3259784281760646093 0:937a0073cc9d 31 DigitalOut myLed2(LED2);
user3259784281760646093 0:937a0073cc9d 32 DigitalOut signal1(p8);
user3259784281760646093 0:937a0073cc9d 33 DigitalOut signal2(p10);
user3259784281760646093 0:937a0073cc9d 34 Serial pc(USBTX, USBRX); // tx, rx
user3259784281760646093 0:937a0073cc9d 35
user3259784281760646093 0:937a0073cc9d 36
user3259784281760646093 0:937a0073cc9d 37 typedef int cellarray[numberofcolumns][cell_height];
user3259784281760646093 0:937a0073cc9d 38 typedef int bufferarray[numberofbuffercolumns + bufferendspace][cell_height];
user3259784281760646093 0:937a0073cc9d 39
user3259784281760646093 0:937a0073cc9d 40
user3259784281760646093 0:937a0073cc9d 41 bufferarray bitmap;
user3259784281760646093 0:937a0073cc9d 42 cellarray displaybitmap;
user3259784281760646093 0:937a0073cc9d 43
user3259784281760646093 0:937a0073cc9d 44 int fgcolour = 1;
user3259784281760646093 0:937a0073cc9d 45 int bgcolour = 0;
user3259784281760646093 0:937a0073cc9d 46
user3259784281760646093 0:937a0073cc9d 47 const int bitsPerBulb = 26;
user3259784281760646093 0:937a0073cc9d 48 const int numberOfBulbs = 56;
user3259784281760646093 0:937a0073cc9d 49 int ten = 10; // Ten microseconds
user3259784281760646093 0:937a0073cc9d 50 int twenty = 20; // Twenty microseconds
user3259784281760646093 0:937a0073cc9d 51 int coordTable[55] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 , 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33 , 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54};
user3259784281760646093 0:937a0073cc9d 52 int bulbBitStream[bitsPerBulb * numberOfBulbs];
user3259784281760646093 0:937a0073cc9d 53
user3259784281760646093 0:937a0073cc9d 54
user3259784281760646093 0:937a0073cc9d 55 void create_bitmap(bufferarray bitmap, char* displaystring, int colour);
user3259784281760646093 0:937a0073cc9d 56 void text_update(char * input, char * output);
user3259784281760646093 0:937a0073cc9d 57 void fgcol_update(char * input, char * output);
user3259784281760646093 0:937a0073cc9d 58 void bgcol_update(char * input, char * output);
user3259784281760646093 0:937a0073cc9d 59
user3259784281760646093 0:937a0073cc9d 60 void scroll(void);
user3259784281760646093 0:937a0073cc9d 61
user3259784281760646093 0:937a0073cc9d 62 void create_string(cellarray bitmap, int startbulb, int length, int stringarray[]);
user3259784281760646093 0:937a0073cc9d 63
user3259784281760646093 0:937a0073cc9d 64 void setBulbValue(int bulbNum, int red, int green, int blue);
user3259784281760646093 0:937a0073cc9d 65 void updateString(void);
user3259784281760646093 0:937a0073cc9d 66 void setPixel(int xCoord, int yCoord, int red, int green, int blue);
user3259784281760646093 0:937a0073cc9d 67
user3259784281760646093 0:937a0073cc9d 68 /*
user3259784281760646093 0:937a0073cc9d 69 RPCFunction rpc_text_update(&text_update, "text");
user3259784281760646093 0:937a0073cc9d 70 RPCFunction rpc_fgcol_update(&fgcol_update, "fgcolour");
user3259784281760646093 0:937a0073cc9d 71 RPCFunction rpc_bgcol_update(&bgcol_update, "bgcolour");
user3259784281760646093 0:937a0073cc9d 72 */
user3259784281760646093 0:937a0073cc9d 73 char* displaytext;
user3259784281760646093 0:937a0073cc9d 74 //EthernetNetIf eth;
user3259784281760646093 0:937a0073cc9d 75 //HTTPServer svr;
user3259784281760646093 0:937a0073cc9d 76
user3259784281760646093 0:937a0073cc9d 77 int offset = 0;
user3259784281760646093 0:937a0073cc9d 78 bool updatetextrequired = false;
user3259784281760646093 0:937a0073cc9d 79
user3259784281760646093 0:937a0073cc9d 80 #define maxoffset numberofbuffercolumns * cell_height
user3259784281760646093 0:937a0073cc9d 81
user3259784281760646093 0:937a0073cc9d 82 Ticker scroll_ticker;
user3259784281760646093 0:937a0073cc9d 83
user3259784281760646093 0:937a0073cc9d 84 int main(void)
user3259784281760646093 0:937a0073cc9d 85 {
user3259784281760646093 0:937a0073cc9d 86
user3259784281760646093 0:937a0073cc9d 87 displaytext = (char*)malloc(maxtextlength * sizeof(char));
user3259784281760646093 0:937a0073cc9d 88 /*
user3259784281760646093 0:937a0073cc9d 89 printf("Setting up Ethernet...\n");
user3259784281760646093 0:937a0073cc9d 90 EthernetErr ethErr = eth.setup();
user3259784281760646093 0:937a0073cc9d 91 if(ethErr)
user3259784281760646093 0:937a0073cc9d 92 {
user3259784281760646093 0:937a0073cc9d 93 printf("Error %d in setup.\n", ethErr);
user3259784281760646093 0:937a0073cc9d 94 return -1;
user3259784281760646093 0:937a0073cc9d 95 }
user3259784281760646093 0:937a0073cc9d 96 printf("Ethernet setup OK\n");
user3259784281760646093 0:937a0073cc9d 97
user3259784281760646093 0:937a0073cc9d 98 FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
user3259784281760646093 0:937a0073cc9d 99 svr.addHandler<FSHandler>("/"); //Default handler
user3259784281760646093 0:937a0073cc9d 100
user3259784281760646093 0:937a0073cc9d 101 svr.addHandler<RPCHandler>("/rpc");
user3259784281760646093 0:937a0073cc9d 102 svr.bind(80);
user3259784281760646093 0:937a0073cc9d 103 */
user3259784281760646093 0:937a0073cc9d 104 //enumerate String 1 of bulb bitstream array.
user3259784281760646093 0:937a0073cc9d 105 for (int bulb = 0 ; bulb < numberOfBulbs ; bulb++) {
user3259784281760646093 0:937a0073cc9d 106 setBulbValue(bulb, 0, 0, 0); // all WHITE
user3259784281760646093 0:937a0073cc9d 107 }
user3259784281760646093 0:937a0073cc9d 108 updateString();
user3259784281760646093 0:937a0073cc9d 109
user3259784281760646093 0:937a0073cc9d 110 /* while(true)
user3259784281760646093 0:937a0073cc9d 111 {
user3259784281760646093 0:937a0073cc9d 112 Net::poll();
user3259784281760646093 0:937a0073cc9d 113 }
user3259784281760646093 0:937a0073cc9d 114
user3259784281760646093 0:937a0073cc9d 115 while (true) {
user3259784281760646093 0:937a0073cc9d 116 for (int y = 0 ; y < 5 ; y++) {
user3259784281760646093 0:937a0073cc9d 117 for (int x = 0 ; x < 11 ; x++) {
user3259784281760646093 0:937a0073cc9d 118
user3259784281760646093 0:937a0073cc9d 119 Net::poll();
user3259784281760646093 0:937a0073cc9d 120 setPixel (x, y, 13, 0, 0);
user3259784281760646093 0:937a0073cc9d 121 updateString();
user3259784281760646093 0:937a0073cc9d 122
user3259784281760646093 0:937a0073cc9d 123 Net::poll();
user3259784281760646093 0:937a0073cc9d 124 setPixel (x, y, 0, 0, 13);
user3259784281760646093 0:937a0073cc9d 125 updateString();
user3259784281760646093 0:937a0073cc9d 126 }
user3259784281760646093 0:937a0073cc9d 127 }
user3259784281760646093 0:937a0073cc9d 128 }*/
user3259784281760646093 0:937a0073cc9d 129
user3259784281760646093 0:937a0073cc9d 130 strcpy(displaytext, "ABCDEFGHIJKLMNOPQRSTUVWXYZ ");
user3259784281760646093 0:937a0073cc9d 131
user3259784281760646093 0:937a0073cc9d 132 create_bitmap(bitmap, displaytext, 1);
user3259784281760646093 0:937a0073cc9d 133 updatetextrequired = false;
user3259784281760646093 0:937a0073cc9d 134
user3259784281760646093 0:937a0073cc9d 135 scroll_ticker.attach(&scroll, 0.07);
user3259784281760646093 0:937a0073cc9d 136
user3259784281760646093 0:937a0073cc9d 137 while(1)
user3259784281760646093 0:937a0073cc9d 138 {
user3259784281760646093 0:937a0073cc9d 139 //Net::poll();
user3259784281760646093 0:937a0073cc9d 140 if(offset == 0 && updatetextrequired == true)
user3259784281760646093 0:937a0073cc9d 141 {
user3259784281760646093 0:937a0073cc9d 142 create_bitmap(bitmap, displaytext, 1);
user3259784281760646093 0:937a0073cc9d 143 updatetextrequired = false;
user3259784281760646093 0:937a0073cc9d 144 }
user3259784281760646093 0:937a0073cc9d 145 }
user3259784281760646093 0:937a0073cc9d 146
user3259784281760646093 0:937a0073cc9d 147 return(0);
user3259784281760646093 0:937a0073cc9d 148 }
user3259784281760646093 0:937a0073cc9d 149
user3259784281760646093 0:937a0073cc9d 150 void scroll(void)
user3259784281760646093 0:937a0073cc9d 151 {
user3259784281760646093 0:937a0073cc9d 152
user3259784281760646093 0:937a0073cc9d 153 int red;
user3259784281760646093 0:937a0073cc9d 154 int green;
user3259784281760646093 0:937a0073cc9d 155 int blue;
user3259784281760646093 0:937a0073cc9d 156
user3259784281760646093 0:937a0073cc9d 157 // printf("Scroll function offset %d (maxoffset = %d)\r\n", offset, maxoffset);
user3259784281760646093 0:937a0073cc9d 158
user3259784281760646093 0:937a0073cc9d 159
user3259784281760646093 0:937a0073cc9d 160 for(int y = 0; y<maxdisplayy+1; y++)
user3259784281760646093 0:937a0073cc9d 161 {
user3259784281760646093 0:937a0073cc9d 162 for(int x =0; x<maxdisplayx+1; x++)
user3259784281760646093 0:937a0073cc9d 163 {
user3259784281760646093 0:937a0073cc9d 164 int pixelcolour;
user3259784281760646093 0:937a0073cc9d 165 pixelcolour = bitmap[x+offset][y];
user3259784281760646093 0:937a0073cc9d 166 // printf("%d",pixelcolour);
user3259784281760646093 0:937a0073cc9d 167 if (pixelcolour == 1) {pixelcolour = 13;} else {pixelcolour = 0;}
user3259784281760646093 0:937a0073cc9d 168 setPixel(x,y,pixelcolour,pixelcolour,pixelcolour);
user3259784281760646093 0:937a0073cc9d 169
user3259784281760646093 0:937a0073cc9d 170 }
user3259784281760646093 0:937a0073cc9d 171 // printf("\r\n");
user3259784281760646093 0:937a0073cc9d 172 }
user3259784281760646093 0:937a0073cc9d 173
user3259784281760646093 0:937a0073cc9d 174
user3259784281760646093 0:937a0073cc9d 175
user3259784281760646093 0:937a0073cc9d 176
user3259784281760646093 0:937a0073cc9d 177 updateString();
user3259784281760646093 0:937a0073cc9d 178
user3259784281760646093 0:937a0073cc9d 179 offset++;
user3259784281760646093 0:937a0073cc9d 180 if(offset >= 40)
user3259784281760646093 0:937a0073cc9d 181 {
user3259784281760646093 0:937a0073cc9d 182 offset = 0;
user3259784281760646093 0:937a0073cc9d 183 }
user3259784281760646093 0:937a0073cc9d 184 }
user3259784281760646093 0:937a0073cc9d 185
user3259784281760646093 0:937a0073cc9d 186
user3259784281760646093 0:937a0073cc9d 187 void text_update(char * input, char * output)
user3259784281760646093 0:937a0073cc9d 188 {
user3259784281760646093 0:937a0073cc9d 189 int inputtextlength;
user3259784281760646093 0:937a0073cc9d 190 int displaytextlength;
user3259784281760646093 0:937a0073cc9d 191
user3259784281760646093 0:937a0073cc9d 192 displaytextlength = maxtextlength;
user3259784281760646093 0:937a0073cc9d 193 inputtextlength = sizeof(input);
user3259784281760646093 0:937a0073cc9d 194 if (inputtextlength < maxtextlength)
user3259784281760646093 0:937a0073cc9d 195 {
user3259784281760646093 0:937a0073cc9d 196 displaytextlength = inputtextlength;
user3259784281760646093 0:937a0073cc9d 197 }
user3259784281760646093 0:937a0073cc9d 198
user3259784281760646093 0:937a0073cc9d 199 strncpy(displaytext, input, displaytextlength);
user3259784281760646093 0:937a0073cc9d 200
user3259784281760646093 0:937a0073cc9d 201 updatetextrequired = true;
user3259784281760646093 0:937a0073cc9d 202
user3259784281760646093 0:937a0073cc9d 203 }
user3259784281760646093 0:937a0073cc9d 204
user3259784281760646093 0:937a0073cc9d 205
user3259784281760646093 0:937a0073cc9d 206 void fgcol_update(char * input, char * output)
user3259784281760646093 0:937a0073cc9d 207 {
user3259784281760646093 0:937a0073cc9d 208 fgcolour = atoi(input);
user3259784281760646093 0:937a0073cc9d 209 updatetextrequired = true;
user3259784281760646093 0:937a0073cc9d 210 }
user3259784281760646093 0:937a0073cc9d 211
user3259784281760646093 0:937a0073cc9d 212 void bgcol_update(char * input, char * output)
user3259784281760646093 0:937a0073cc9d 213 {
user3259784281760646093 0:937a0073cc9d 214 bgcolour = atoi(input);
user3259784281760646093 0:937a0073cc9d 215 updatetextrequired = true;
user3259784281760646093 0:937a0073cc9d 216 }
user3259784281760646093 0:937a0073cc9d 217
user3259784281760646093 0:937a0073cc9d 218 void create_string(bufferarray bitmap, int startbulb, int length, int stringarray[])
user3259784281760646093 0:937a0073cc9d 219 {
user3259784281760646093 0:937a0073cc9d 220 int *buff;
user3259784281760646093 0:937a0073cc9d 221
user3259784281760646093 0:937a0073cc9d 222 buff = (int*)bitmap;
user3259784281760646093 0:937a0073cc9d 223
user3259784281760646093 0:937a0073cc9d 224 for (int string_iter = 0; string_iter < length; string_iter++)
user3259784281760646093 0:937a0073cc9d 225 {
user3259784281760646093 0:937a0073cc9d 226 // stringarray[string_iter - startbulb] = bitmap[string_iter];
user3259784281760646093 0:937a0073cc9d 227 }
user3259784281760646093 0:937a0073cc9d 228 }
user3259784281760646093 0:937a0073cc9d 229
user3259784281760646093 0:937a0073cc9d 230 void create_bitmap(bufferarray bitmap, char* displaystring, int colour)
user3259784281760646093 0:937a0073cc9d 231 {
user3259784281760646093 0:937a0073cc9d 232 int displaystringlen;
user3259784281760646093 0:937a0073cc9d 233
user3259784281760646093 0:937a0073cc9d 234 printf("create_bitmap %s\r\n", displaystring);
user3259784281760646093 0:937a0073cc9d 235
user3259784281760646093 0:937a0073cc9d 236 displaystringlen = strlen(displaystring);
user3259784281760646093 0:937a0073cc9d 237
user3259784281760646093 0:937a0073cc9d 238
user3259784281760646093 0:937a0073cc9d 239 if(displaystringlen > numberofchars) {displaystringlen = numberofchars;}
user3259784281760646093 0:937a0073cc9d 240
user3259784281760646093 0:937a0073cc9d 241 for(int displaychar = 0; displaychar < numberofchars; displaychar++ )
user3259784281760646093 0:937a0073cc9d 242 {
user3259784281760646093 0:937a0073cc9d 243 int fontref = 26; //default to space
user3259784281760646093 0:937a0073cc9d 244 unsigned char asciichar;
user3259784281760646093 0:937a0073cc9d 245
user3259784281760646093 0:937a0073cc9d 246
user3259784281760646093 0:937a0073cc9d 247
user3259784281760646093 0:937a0073cc9d 248 asciichar = (unsigned char)(displaystring[displaychar]);
user3259784281760646093 0:937a0073cc9d 249
user3259784281760646093 0:937a0073cc9d 250
user3259784281760646093 0:937a0073cc9d 251 if (asciichar == 32) {fontref = 26;} //convert ascii space to font
user3259784281760646093 0:937a0073cc9d 252 if (asciichar > 64 && asciichar < 91){fontref = asciichar - 65;}// convert uppercase to font
user3259784281760646093 0:937a0073cc9d 253 if (asciichar > 96 && asciichar < 123){fontref = asciichar - 97;}// convert lowercase to font (hacked to upper)
user3259784281760646093 0:937a0073cc9d 254
user3259784281760646093 0:937a0073cc9d 255 printf("char %c, fontref %d\r\n", asciichar, fontref);
user3259784281760646093 0:937a0073cc9d 256
user3259784281760646093 0:937a0073cc9d 257 unsigned char mask = 0x10; //MAGIC NUMBER, x=0 == top
user3259784281760646093 0:937a0073cc9d 258 for (int columnoffset = 0; columnoffset < cell_width-1; columnoffset++)
user3259784281760646093 0:937a0073cc9d 259 {
user3259784281760646093 0:937a0073cc9d 260
user3259784281760646093 0:937a0073cc9d 261
user3259784281760646093 0:937a0073cc9d 262 for (int row = 0; row < cell_height; row++)
user3259784281760646093 0:937a0073cc9d 263 {
user3259784281760646093 0:937a0073cc9d 264 int bulbcontents=0;
user3259784281760646093 0:937a0073cc9d 265
user3259784281760646093 0:937a0073cc9d 266 printf("Fontref %x, masked %x (mask %x)\r\n",FONT[fontref][row],(FONT[fontref][row] & mask), mask);
user3259784281760646093 0:937a0073cc9d 267
user3259784281760646093 0:937a0073cc9d 268 if ((FONT[fontref][row] & mask) !=0) {bulbcontents = fgcolour;} else {bulbcontents = bgcolour;}
user3259784281760646093 0:937a0073cc9d 269
user3259784281760646093 0:937a0073cc9d 270 bitmap[displaychar * (cell_width + 1) + columnoffset][row] = bulbcontents; //cell_width + 1 for 1 col space between chars
user3259784281760646093 0:937a0073cc9d 271
user3259784281760646093 0:937a0073cc9d 272 }
user3259784281760646093 0:937a0073cc9d 273 mask = mask >> 1;
user3259784281760646093 0:937a0073cc9d 274 }
user3259784281760646093 0:937a0073cc9d 275
user3259784281760646093 0:937a0073cc9d 276 }
user3259784281760646093 0:937a0073cc9d 277 for(int y=0; y<cell_height; y++)
user3259784281760646093 0:937a0073cc9d 278 {
user3259784281760646093 0:937a0073cc9d 279 for(int x=displaychar * 5; x<100; x++)
user3259784281760646093 0:937a0073cc9d 280 {
user3259784281760646093 0:937a0073cc9d 281 printf("%d ", bitmap[x][y]);
user3259784281760646093 0:937a0073cc9d 282 }
user3259784281760646093 0:937a0073cc9d 283 printf("\r\n");
user3259784281760646093 0:937a0073cc9d 284 }
user3259784281760646093 0:937a0073cc9d 285 }
user3259784281760646093 0:937a0073cc9d 286
user3259784281760646093 0:937a0073cc9d 287 void setPixel(int xCoord, int yCoord, int red, int green, int blue) {
user3259784281760646093 0:937a0073cc9d 288 setBulbValue(coordTable[(yCoord * 11) + xCoord], red, green, blue);
user3259784281760646093 0:937a0073cc9d 289 }
user3259784281760646093 0:937a0073cc9d 290
user3259784281760646093 0:937a0073cc9d 291
user3259784281760646093 0:937a0073cc9d 292 void setBulbValue(int bulbNum, int red, int green, int blue) {
user3259784281760646093 0:937a0073cc9d 293
user3259784281760646093 0:937a0073cc9d 294 int intensity = 204;
user3259784281760646093 0:937a0073cc9d 295
user3259784281760646093 0:937a0073cc9d 296 int bulbBitstreamStart = (bulbNum * bitsPerBulb); // So this seems right.
user3259784281760646093 0:937a0073cc9d 297
user3259784281760646093 0:937a0073cc9d 298 // Bulb number
user3259784281760646093 0:937a0073cc9d 299 //pc.printf("Bulb %d ", bulbNum);
user3259784281760646093 0:937a0073cc9d 300 for (int loop = 5 ; loop >= 0 ; loop--) {
user3259784281760646093 0:937a0073cc9d 301
user3259784281760646093 0:937a0073cc9d 302 if ((bulbNum % 2) > 0) {
user3259784281760646093 0:937a0073cc9d 303 bulbBitStream[bulbBitstreamStart + loop] = 1;
user3259784281760646093 0:937a0073cc9d 304 //pc.printf("1");
user3259784281760646093 0:937a0073cc9d 305 } else {
user3259784281760646093 0:937a0073cc9d 306 bulbBitStream[bulbBitstreamStart + loop] = 0;
user3259784281760646093 0:937a0073cc9d 307 // pc.printf("0");
user3259784281760646093 0:937a0073cc9d 308 }
user3259784281760646093 0:937a0073cc9d 309 bulbNum = bulbNum / 2;
user3259784281760646093 0:937a0073cc9d 310 }
user3259784281760646093 0:937a0073cc9d 311 // Intensity
user3259784281760646093 0:937a0073cc9d 312 //pc.printf(" Intensity %d ", intensity);
user3259784281760646093 0:937a0073cc9d 313 for (int loop = 13 ; loop >= 6 ; loop--) {
user3259784281760646093 0:937a0073cc9d 314
user3259784281760646093 0:937a0073cc9d 315 if ((intensity % 2) > 0) {
user3259784281760646093 0:937a0073cc9d 316 bulbBitStream[bulbBitstreamStart + loop] = 1;
user3259784281760646093 0:937a0073cc9d 317 //pc.printf("1");
user3259784281760646093 0:937a0073cc9d 318 } else {
user3259784281760646093 0:937a0073cc9d 319 bulbBitStream[bulbBitstreamStart + loop] = 0;
user3259784281760646093 0:937a0073cc9d 320 //pc.printf("0");
user3259784281760646093 0:937a0073cc9d 321 }
user3259784281760646093 0:937a0073cc9d 322 intensity = intensity / 2;
user3259784281760646093 0:937a0073cc9d 323 }
user3259784281760646093 0:937a0073cc9d 324 // Blue
user3259784281760646093 0:937a0073cc9d 325 //pc.printf(" Blue %d ", blue);
user3259784281760646093 0:937a0073cc9d 326 for (int loop = 17 ; loop >= 14 ; loop--) {
user3259784281760646093 0:937a0073cc9d 327
user3259784281760646093 0:937a0073cc9d 328 if ((blue % 2) > 0) {
user3259784281760646093 0:937a0073cc9d 329 bulbBitStream[bulbBitstreamStart + loop] = 1;
user3259784281760646093 0:937a0073cc9d 330 //pc.printf("1");
user3259784281760646093 0:937a0073cc9d 331 } else {
user3259784281760646093 0:937a0073cc9d 332 bulbBitStream[bulbBitstreamStart + loop] = 0;
user3259784281760646093 0:937a0073cc9d 333 //pc.printf("0");
user3259784281760646093 0:937a0073cc9d 334 }
user3259784281760646093 0:937a0073cc9d 335 blue = blue / 2;
user3259784281760646093 0:937a0073cc9d 336
user3259784281760646093 0:937a0073cc9d 337 }
user3259784281760646093 0:937a0073cc9d 338 // Green
user3259784281760646093 0:937a0073cc9d 339 //pc.printf(" Green %d ", green);
user3259784281760646093 0:937a0073cc9d 340 for (int loop = 21 ; loop >= 18 ; loop--) {
user3259784281760646093 0:937a0073cc9d 341
user3259784281760646093 0:937a0073cc9d 342 if ((green % 2) > 0) {
user3259784281760646093 0:937a0073cc9d 343 bulbBitStream[bulbBitstreamStart + loop] = 1;
user3259784281760646093 0:937a0073cc9d 344 //pc.printf("1");
user3259784281760646093 0:937a0073cc9d 345 } else {
user3259784281760646093 0:937a0073cc9d 346 bulbBitStream[bulbBitstreamStart + loop] = 0;
user3259784281760646093 0:937a0073cc9d 347 //pc.printf("0");
user3259784281760646093 0:937a0073cc9d 348 }
user3259784281760646093 0:937a0073cc9d 349 green = green / 2;
user3259784281760646093 0:937a0073cc9d 350 }
user3259784281760646093 0:937a0073cc9d 351 // Red
user3259784281760646093 0:937a0073cc9d 352 //pc.printf(" Red %d ", red);
user3259784281760646093 0:937a0073cc9d 353 for (int loop = 25 ; loop >= 22 ; loop--) {
user3259784281760646093 0:937a0073cc9d 354
user3259784281760646093 0:937a0073cc9d 355 if ((red % 2) > 0) {
user3259784281760646093 0:937a0073cc9d 356 bulbBitStream[bulbBitstreamStart + loop] = 1;
user3259784281760646093 0:937a0073cc9d 357 //pc.printf("1");
user3259784281760646093 0:937a0073cc9d 358 } else {
user3259784281760646093 0:937a0073cc9d 359 bulbBitStream[bulbBitstreamStart + loop] = 0;
user3259784281760646093 0:937a0073cc9d 360 //pc.printf("0");
user3259784281760646093 0:937a0073cc9d 361 }
user3259784281760646093 0:937a0073cc9d 362 red = red / 2;
user3259784281760646093 0:937a0073cc9d 363 }
user3259784281760646093 0:937a0073cc9d 364 }
user3259784281760646093 0:937a0073cc9d 365
user3259784281760646093 0:937a0073cc9d 366 void updateString(void) {
user3259784281760646093 0:937a0073cc9d 367 // set bus state low for 60 microseconds to make sure we're reset.
user3259784281760646093 0:937a0073cc9d 368 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 369 wait_us(twenty * 3);
user3259784281760646093 0:937a0073cc9d 370
user3259784281760646093 0:937a0073cc9d 371 for (int x = 0; x < numberOfBulbs ; x++) //Iterate for as many bulbs are in the string
user3259784281760646093 0:937a0073cc9d 372 {// x
user3259784281760646093 0:937a0073cc9d 373 //Start Bit: High for 10microSeconds
user3259784281760646093 0:937a0073cc9d 374 signal1 = 1;
user3259784281760646093 0:937a0073cc9d 375 wait_us(ten);
user3259784281760646093 0:937a0073cc9d 376 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 377
user3259784281760646093 0:937a0073cc9d 378 for (int i = 0; i < bitsPerBulb; i++) { // i
user3259784281760646093 0:937a0073cc9d 379 if (bulbBitStream[i + (x * bitsPerBulb)] == 0) {
user3259784281760646093 0:937a0073cc9d 380 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 381 wait_us(ten);
user3259784281760646093 0:937a0073cc9d 382 signal1 = 1;
user3259784281760646093 0:937a0073cc9d 383 wait_us(twenty);
user3259784281760646093 0:937a0073cc9d 384 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 385 } else {
user3259784281760646093 0:937a0073cc9d 386 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 387 wait_us(twenty);
user3259784281760646093 0:937a0073cc9d 388 signal1 = 1;
user3259784281760646093 0:937a0073cc9d 389 wait_us(ten);
user3259784281760646093 0:937a0073cc9d 390 signal1 = 0;
user3259784281760646093 0:937a0073cc9d 391 }
user3259784281760646093 0:937a0073cc9d 392 } // i
user3259784281760646093 0:937a0073cc9d 393 wait_us(twenty*2); // Wait AT LEAST 30 microseconds to end frame, so 40 in this case.
user3259784281760646093 0:937a0073cc9d 394 }// x
user3259784281760646093 0:937a0073cc9d 395
user3259784281760646093 0:937a0073cc9d 396
user3259784281760646093 0:937a0073cc9d 397 } // end updateString ()