Hackers Delight Weekender light display
Dependencies: NetServices mbed
main.cpp@0:937a0073cc9d, 2011-08-07 (annotated)
- Committer:
- user3259784281760646093
- Date:
- Sun Aug 07 14:51:38 2011 +0000
- Revision:
- 0:937a0073cc9d
Who changed what in which revision?
User | Revision | Line number | New 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 () |