Dependencies:   mbed

Committer:
kagelump
Date:
Mon Mar 05 06:00:16 2012 +0000
Revision:
0:87b78725a6dd

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kagelump 0:87b78725a6dd 1 // Display Test
kagelump 0:87b78725a6dd 2 //#include "mbed.h"
kagelump 0:87b78725a6dd 3 #include "KS0108.h"
kagelump 0:87b78725a6dd 4 #include "calsolimage.h"
kagelump 0:87b78725a6dd 5 #include "numbers.h"
kagelump 0:87b78725a6dd 6 #include "Arial12.h"
kagelump 0:87b78725a6dd 7 #include "Arial14.h"
kagelump 0:87b78725a6dd 8 #include "arial_bold_14.h"
kagelump 0:87b78725a6dd 9 #include "ArialB40.h"
kagelump 0:87b78725a6dd 10 #include "SystemFont5x7.h"
kagelump 0:87b78725a6dd 11 #include "HelveticaB35.h"
kagelump 0:87b78725a6dd 12 #include "CourierNew_B70.h"
kagelump 0:87b78725a6dd 13
kagelump 0:87b78725a6dd 14 // Declare each of the things you're going to use
kagelump 0:87b78725a6dd 15 // The display
kagelump 0:87b78725a6dd 16 KS0108 display(p23,p21,p22,p20,p24,p25,p17,p18,p19,p30,p29,p28,p27,p26);
kagelump 0:87b78725a6dd 17 // The button on the breadboard
kagelump 0:87b78725a6dd 18 DigitalIn topButton(p13);
kagelump 0:87b78725a6dd 19 // For printing things to the computer
kagelump 0:87b78725a6dd 20 Serial pc(USBTX,USBRX);
kagelump 0:87b78725a6dd 21 // Timers
kagelump 0:87b78725a6dd 22 Timer timer1;
kagelump 0:87b78725a6dd 23 Timer timer2;
kagelump 0:87b78725a6dd 24 Timer testTimer;
kagelump 0:87b78725a6dd 25
kagelump 0:87b78725a6dd 26 // Declare methods, the actual body is down there.
kagelump 0:87b78725a6dd 27 // You have to do this for C
kagelump 0:87b78725a6dd 28 void rules (unsigned char *);
kagelump 0:87b78725a6dd 29 void random (unsigned char *);
kagelump 0:87b78725a6dd 30
kagelump 0:87b78725a6dd 31 // This is where your programs starts running
kagelump 0:87b78725a6dd 32 int main() {
kagelump 0:87b78725a6dd 33 // Initialize variables
kagelump 0:87b78725a6dd 34 int dist = 20;
kagelump 0:87b78725a6dd 35 int demo = 0;
kagelump 0:87b78725a6dd 36 int i = 0;
kagelump 0:87b78725a6dd 37 topButton.mode(PullUp);
kagelump 0:87b78725a6dd 38 // Display CalSol logo
kagelump 0:87b78725a6dd 39 display.FullScreenBMP(pic);
kagelump 0:87b78725a6dd 40 wait(0.2);
kagelump 0:87b78725a6dd 41
kagelump 0:87b78725a6dd 42 timer1.start(); // For button stuff
kagelump 0:87b78725a6dd 43 timer2.start();
kagelump 0:87b78725a6dd 44
kagelump 0:87b78725a6dd 45 int percentage = 0; //integer value from 0 to 100 (battery)
kagelump 0:87b78725a6dd 46 int speed = 150; //integer value from 0 to 999
kagelump 0:87b78725a6dd 47 double current = 15.2; //double value from 0 to 99.9
kagelump 0:87b78725a6dd 48
kagelump 0:87b78725a6dd 49 while(1) {
kagelump 0:87b78725a6dd 50 if(!topButton) {
kagelump 0:87b78725a6dd 51 if(timer1.read_ms() > 200) {
kagelump 0:87b78725a6dd 52 demo++;
kagelump 0:87b78725a6dd 53 display.ClearScreen();
kagelump 0:87b78725a6dd 54 if(demo > 3) {
kagelump 0:87b78725a6dd 55 demo = 0;
kagelump 0:87b78725a6dd 56 }
kagelump 0:87b78725a6dd 57 timer1.reset();
kagelump 0:87b78725a6dd 58 }
kagelump 0:87b78725a6dd 59 }
kagelump 0:87b78725a6dd 60 switch(demo) {
kagelump 0:87b78725a6dd 61 case 0:
kagelump 0:87b78725a6dd 62 if(timer2.read_ms() > 500) {
kagelump 0:87b78725a6dd 63 rules(pic);
kagelump 0:87b78725a6dd 64 display.FullScreenBMP(pic);
kagelump 0:87b78725a6dd 65 timer2.reset();
kagelump 0:87b78725a6dd 66 }
kagelump 0:87b78725a6dd 67 break;
kagelump 0:87b78725a6dd 68
kagelump 0:87b78725a6dd 69 case 1:
kagelump 0:87b78725a6dd 70
kagelump 0:87b78725a6dd 71 //GRID:
kagelump 0:87b78725a6dd 72 //speed: 70x64, ( 0, 0)
kagelump 0:87b78725a6dd 73 //current: 57x23, (71, 0)
kagelump 0:87b78725a6dd 74 //battery: 57x40, (71, 23)
kagelump 0:87b78725a6dd 75 display.HLineShort(71, 64-24, 57, BLACK);
kagelump 0:87b78725a6dd 76 display.VLineShort(71, 0, 64, BLACK);
kagelump 0:87b78725a6dd 77
kagelump 0:87b78725a6dd 78
kagelump 0:87b78725a6dd 79 /*
kagelump 0:87b78725a6dd 80 /*
kagelump 0:87b78725a6dd 81 //CURRENT
kagelump 0:87b78725a6dd 82 display.SelectFont(Arial_Bold_14, WHITE, ReadData);
kagelump 0:87b78725a6dd 83 display.GotoXY(78, 8);
kagelump 0:87b78725a6dd 84 display.PrintNumber(current); // this doesn't work with doubles
kagelump 0:87b78725a6dd 85 display.SelectFont(System5x7, WHITE, ReadData);
kagelump 0:87b78725a6dd 86 display.GotoXY(110, 8);
kagelump 0:87b78725a6dd 87 display.PrintString("Amp");
kagelump 0:87b78725a6dd 88 */
kagelump 0:87b78725a6dd 89
kagelump 0:87b78725a6dd 90
kagelump 0:87b78725a6dd 91 //BATTERY
kagelump 0:87b78725a6dd 92 display.RoundRectangle(82, 2, 40, 24, 4, BLACK); //body: 40x24
kagelump 0:87b78725a6dd 93 display.EmptyRectangle(78, 10, 78+4, 10+8, BLACK);//head: 4x8
kagelump 0:87b78725a6dd 94 display.SelectFont(System5x7, WHITE, ReadData);
kagelump 0:87b78725a6dd 95 display.GotoXY(108, 24+8);
kagelump 0:87b78725a6dd 96 display.PrintString("%");
kagelump 0:87b78725a6dd 97
kagelump 0:87b78725a6dd 98
kagelump 0:87b78725a6dd 99 //PERCENTAGE (reasonable update rate: testTimer.read_ms()/700)
kagelump 0:87b78725a6dd 100 /*
kagelump 0:87b78725a6dd 101 int INITIAL_PERCENTAGE = 100;
kagelump 0:87b78725a6dd 102 int percentage = INITIAL_PERCENTAGE; // values 0-100
kagelump 0:87b78725a6dd 103 int newPercentage = percentage; // values 0-100
kagelump 0:87b78725a6dd 104 int barPosition = 86+(int)(((double)(100-percentage)/100.0)*32);
kagelump 0:87b78725a6dd 105 int newBarPosition = 86+(int)(((double)(100-newPercentage)/100.0)*32); //x-coordinates
kagelump 0:87b78725a6dd 106
kagelump 0:87b78725a6dd 107 display.SelectFont(System5x7, BLACK, ReadData);
kagelump 0:87b78725a6dd 108
kagelump 0:87b78725a6dd 109 //draw initial box
kagelump 0:87b78725a6dd 110 display.FullRectangle(barPosition, 2+4, 86+32, 2+24-4, BLACK); //inside: 32x16
kagelump 0:87b78725a6dd 111 int y = 32; //y coordinate for percenage. for testing/fixing font
kagelump 0:87b78725a6dd 112
kagelump 0:87b78725a6dd 113 testTimer.start();
kagelump 0:87b78725a6dd 114
kagelump 0:87b78725a6dd 115 while (newPercentage <= 100 && newPercentage >= 0) //testing update rate/centering
kagelump 0:87b78725a6dd 116 {
kagelump 0:87b78725a6dd 117 if (testTimer.read_ms()%700 == 0)
kagelump 0:87b78725a6dd 118 {
kagelump 0:87b78725a6dd 119 //account for number of digits
kagelump 0:87b78725a6dd 120
kagelump 0:87b78725a6dd 121 if (newPercentage > 99)
kagelump 0:87b78725a6dd 122 display.GotoXY(88, y);
kagelump 0:87b78725a6dd 123 else if (newPercentage >= 10)
kagelump 0:87b78725a6dd 124 {
kagelump 0:87b78725a6dd 125 if (percentage > 99)
kagelump 0:87b78725a6dd 126 display.FullRectangle(88, y, 88+5, y+7, WHITE);
kagelump 0:87b78725a6dd 127 display.GotoXY(94, y);
kagelump 0:87b78725a6dd 128 }
kagelump 0:87b78725a6dd 129 else
kagelump 0:87b78725a6dd 130 {
kagelump 0:87b78725a6dd 131 if (percentage >= 10)
kagelump 0:87b78725a6dd 132 display.FullRectangle(88, y, 88+5*2+1, y+7, WHITE);
kagelump 0:87b78725a6dd 133 display.GotoXY(100,y);
kagelump 0:87b78725a6dd 134 }
kagelump 0:87b78725a6dd 135
kagelump 0:87b78725a6dd 136
kagelump 0:87b78725a6dd 137 display.PrintNumber(newPercentage);
kagelump 0:87b78725a6dd 138
kagelump 0:87b78725a6dd 139
kagelump 0:87b78725a6dd 140
kagelump 0:87b78725a6dd 141 barPosition = 86+(int)(((double)(100-percentage)/100.0)*32);
kagelump 0:87b78725a6dd 142 newBarPosition = 86+(int)(((double)(100-newPercentage)/100.0)*32);
kagelump 0:87b78725a6dd 143
kagelump 0:87b78725a6dd 144 //draw increase or decrease in percentage
kagelump 0:87b78725a6dd 145 if (newBarPosition < barPosition) //percentage increase
kagelump 0:87b78725a6dd 146 display.FullRectangle(newBarPosition, 2+4, barPosition, 2+24-4, BLACK);
kagelump 0:87b78725a6dd 147 else if (newBarPosition > barPosition) //percentage decrease
kagelump 0:87b78725a6dd 148 display.FullRectangle(barPosition, 2+4, newBarPosition, 2+24-4, WHITE);
kagelump 0:87b78725a6dd 149
kagelump 0:87b78725a6dd 150
kagelump 0:87b78725a6dd 151 //update percentages
kagelump 0:87b78725a6dd 152 percentage = newPercentage;
kagelump 0:87b78725a6dd 153 //newPercentage = testTimer.read_ms()/700; //slow increase
kagelump 0:87b78725a6dd 154 newPercentage = INITIAL_PERCENTAGE-(testTimer.read_ms()/700); //rapid decrease
kagelump 0:87b78725a6dd 155
kagelump 0:87b78725a6dd 156 }
kagelump 0:87b78725a6dd 157 }*/
kagelump 0:87b78725a6dd 158
kagelump 0:87b78725a6dd 159 //SPEED
kagelump 0:87b78725a6dd 160
kagelump 0:87b78725a6dd 161 display.SelectFont(System5x7, WHITE, ReadData);
kagelump 0:87b78725a6dd 162 display.GotoXY(26, 48);
kagelump 0:87b78725a6dd 163 display.PrintString("MPH");
kagelump 0:87b78725a6dd 164 testTimer.start();
kagelump 0:87b78725a6dd 165
kagelump 0:87b78725a6dd 166 display.SelectFont(CourierNew_B70, WHITE, ReadData);
kagelump 0:87b78725a6dd 167 /* while (true){
kagelump 0:87b78725a6dd 168 if (testTimer.read_ms()%700 == 1)
kagelump 0:87b78725a6dd 169 {*/ // for testing
kagelump 0:87b78725a6dd 170 //speed = testTimer.read_ms()/1000;
kagelump 0:87b78725a6dd 171 speed += (int)((rand()%3)-2);
kagelump 0:87b78725a6dd 172
kagelump 0:87b78725a6dd 173 //display.FullRectangle(0, 16, 70, 44, WHITE); //clears space too slowly. find alternative
kagelump 0:87b78725a6dd 174
kagelump 0:87b78725a6dd 175 if (speed > 99) // 3digits
kagelump 0:87b78725a6dd 176 display.GotoXY(1, 16);
kagelump 0:87b78725a6dd 177 else if (speed >= 10) // 2digits
kagelump 0:87b78725a6dd 178 display.GotoXY(3+10, 16);
kagelump 0:87b78725a6dd 179 else //1digit
kagelump 0:87b78725a6dd 180 display.GotoXY(3+10*2, 16);
kagelump 0:87b78725a6dd 181
kagelump 0:87b78725a6dd 182 display.PrintNumber(speed);
kagelump 0:87b78725a6dd 183 /*}
kagelump 0:87b78725a6dd 184 }*/
kagelump 0:87b78725a6dd 185 */
kagelump 0:87b78725a6dd 186 break;
kagelump 0:87b78725a6dd 187 case 2:
kagelump 0:87b78725a6dd 188 // This block does the bar graph stuff.
kagelump 0:87b78725a6dd 189 if(timer2.read_ms() > 100) {
kagelump 0:87b78725a6dd 190 // display.PutString(3,2,"I can has mbed too");
kagelump 0:87b78725a6dd 191 // display.PrintFloat(123.23,4,5);
kagelump 0:87b78725a6dd 192 display.VLine(6+i,47,56,BLACK);
kagelump 0:87b78725a6dd 193 if (i < 10){dist = 30;}
kagelump 0:87b78725a6dd 194 else if (i < 100){dist = 25;}
kagelump 0:87b78725a6dd 195 else {dist = 20;}
kagelump 0:87b78725a6dd 196 display.PrintInteger(i,6,dist);
kagelump 0:87b78725a6dd 197 i++;
kagelump 0:87b78725a6dd 198 if(i > 100) {
kagelump 0:87b78725a6dd 199 i = 0;
kagelump 0:87b78725a6dd 200 display.ClearScreen();
kagelump 0:87b78725a6dd 201 }
kagelump 0:87b78725a6dd 202 timer2.reset();
kagelump 0:87b78725a6dd 203 }
kagelump 0:87b78725a6dd 204 break;
kagelump 0:87b78725a6dd 205 case 3:
kagelump 0:87b78725a6dd 206 if(timer2.read_ms() > 500) {
kagelump 0:87b78725a6dd 207 rules(pic);
kagelump 0:87b78725a6dd 208 display.FullScreenBMP(pic);
kagelump 0:87b78725a6dd 209 timer2.reset();
kagelump 0:87b78725a6dd 210 }
kagelump 0:87b78725a6dd 211 default:
kagelump 0:87b78725a6dd 212 break;
kagelump 0:87b78725a6dd 213 }
kagelump 0:87b78725a6dd 214 }
kagelump 0:87b78725a6dd 215 }
kagelump 0:87b78725a6dd 216
kagelump 0:87b78725a6dd 217 //For Conway's Game of Life
kagelump 0:87b78725a6dd 218 void rules (unsigned char * array) {
kagelump 0:87b78725a6dd 219 char neighborArray[128][64];
kagelump 0:87b78725a6dd 220 // Get number of neighbors
kagelump 0:87b78725a6dd 221 for (int x = 0; x < 128; x++) {
kagelump 0:87b78725a6dd 222 for (int y = 0;y < 64; y++) {
kagelump 0:87b78725a6dd 223 neighborArray[x][y] = 0;
kagelump 0:87b78725a6dd 224 }
kagelump 0:87b78725a6dd 225 }
kagelump 0:87b78725a6dd 226 for (int y = 0;y < 64; y++) {
kagelump 0:87b78725a6dd 227 for (int x = 0; x < 128; x++) {
kagelump 0:87b78725a6dd 228 if (array[x + (y/8*8)*16] & (1<<(y%8))) {
kagelump 0:87b78725a6dd 229 if (x != 0) {
kagelump 0:87b78725a6dd 230 neighborArray[x-1][y] += 1;
kagelump 0:87b78725a6dd 231 if (y != 0) {
kagelump 0:87b78725a6dd 232 neighborArray[x-1][y-1] += 1;
kagelump 0:87b78725a6dd 233 }
kagelump 0:87b78725a6dd 234 if (y != 127) {
kagelump 0:87b78725a6dd 235 neighborArray[x-1][y+1] += 1;
kagelump 0:87b78725a6dd 236 }
kagelump 0:87b78725a6dd 237 }
kagelump 0:87b78725a6dd 238 if (x != 127) {
kagelump 0:87b78725a6dd 239 neighborArray[x+1][y] += 1;
kagelump 0:87b78725a6dd 240 if (y != 0) {
kagelump 0:87b78725a6dd 241 neighborArray[x+1][y-1] += 1;
kagelump 0:87b78725a6dd 242 }
kagelump 0:87b78725a6dd 243 if (y != 127) {
kagelump 0:87b78725a6dd 244 neighborArray[x+1][y+1] += 1;
kagelump 0:87b78725a6dd 245 }
kagelump 0:87b78725a6dd 246 }
kagelump 0:87b78725a6dd 247 if (y != 0) {
kagelump 0:87b78725a6dd 248 neighborArray[x][y-1] += 1;
kagelump 0:87b78725a6dd 249 }
kagelump 0:87b78725a6dd 250 if (y != 63){
kagelump 0:87b78725a6dd 251 neighborArray[x][y+1] += 1;
kagelump 0:87b78725a6dd 252 }
kagelump 0:87b78725a6dd 253 }
kagelump 0:87b78725a6dd 254 }
kagelump 0:87b78725a6dd 255 }
kagelump 0:87b78725a6dd 256 int arrayIndex;
kagelump 0:87b78725a6dd 257 for (int y = 0;y < 64; y++) {
kagelump 0:87b78725a6dd 258 for (int x = 0; x < 128; x++) {
kagelump 0:87b78725a6dd 259 arrayIndex = x + (y/8*8)*16;
kagelump 0:87b78725a6dd 260 if (neighborArray[x][y] == 3) {
kagelump 0:87b78725a6dd 261 array[arrayIndex] |= (1<<(y%8));
kagelump 0:87b78725a6dd 262 } else if (neighborArray[x][y] == 2) {
kagelump 0:87b78725a6dd 263 continue;
kagelump 0:87b78725a6dd 264 } else {
kagelump 0:87b78725a6dd 265 array[arrayIndex] &= ~(1<<(y%8));
kagelump 0:87b78725a6dd 266 }
kagelump 0:87b78725a6dd 267 }
kagelump 0:87b78725a6dd 268 }
kagelump 0:87b78725a6dd 269 }
kagelump 0:87b78725a6dd 270
kagelump 0:87b78725a6dd 271 //Is this used anywhere?
kagelump 0:87b78725a6dd 272 void random (unsigned char * array) {
kagelump 0:87b78725a6dd 273 for (int y = 0;y < 64; y += 8) {
kagelump 0:87b78725a6dd 274 for (int x = 0; x < 128; x++) {
kagelump 0:87b78725a6dd 275 array[x + y*16] = (unsigned char) rand();
kagelump 0:87b78725a6dd 276 }
kagelump 0:87b78725a6dd 277 }
kagelump 0:87b78725a6dd 278 }