Mark Bruijn
/
DashboardV4
dashboardv4solarboat
Fork of mbed_blinky by
Embed:
(wiki syntax)
Show/hide line numbers
oled_driver.h
00001 #include "oled_characters.h" //all OLED chars + logos 00002 00003 #define PI 3.141592 00004 #define SPI_FREQUENCY 5000000 00005 00006 //digital outputs and SPI 00007 SPI spi(PB_15, NC, PB_13); // mosi, miso, sclk 00008 DigitalOut RST(PB_12); //reset 0: reset 1: normal operation 00009 DigitalOut DC(PA_10); //set input as data or command 0: command 1: data 00010 00011 DigitalOut battery_temp_alert_led(PC_1); 00012 DigitalOut motor_temp_alert_led(PA_8); 00013 DigitalOut battery_low_alert_led(PB_10); 00014 DigitalOut fly_ready_led(PB_0); 00015 00016 DigitalOut CS_1(PB_3); //chipSelect 0: selected 1: not selected 00017 DigitalOut CS_2(PB_5); //chipSelect 0: selected 1: not selected 00018 DigitalOut CS_3(PB_4); //chipSelect 0: selected 1: not selected 00019 00020 bool error_alert; //internal error booleaan 00021 00022 bool motor_temp_alert = true; //LED1 E01 motor temperature too high 00023 bool battery_temp_alert = true; //LED2 E02 battery temperature too high 00024 bool battery_low_alert = true; //LED3 E03 battery low power alert 00025 bool fly_ready_alert = true; //LED4 E04 ready for flying 00026 bool voltage_in_low = true; //DISPLAY E05 solar panel voltage is low 00027 bool communication_not_working = true; //DISPLAY E06 communication (FONA) not working 00028 bool dummy_1 = true; //DISPLAY E07 descr. 00029 bool dummy_2 = true; //DISPLAY E08 descr. 00030 bool dummy_3 = true; //DISPLAY E09 descr. 00031 bool dummy_4 = true; //DISPLAY E10 descr. 00032 bool dummy_5 = true; //DISPLAY E11 descr. 00033 bool dummy_6 = true; //DISPLAY E12 descr. 00034 bool dummy_7 = true; //DISPLAY E13 descr. 00035 bool dummy_8 = true; //DISPLAY E14 descr. 00036 00037 void drawPixel(int screen_number, uint8_t row, uint8_t col, uint8_t brightness); 00038 void writeNumber(int screen_number, int input_number, char row, char col, int digits, bool large); 00039 void writeLetter(int screen_number, char input, int row, int col); 00040 void drawBitmap(int screen_number, int number, char row, char col, int width, int height); 00041 void updateBatteryBar(int screen_number, int percentage, int row, int col, int width, int height); 00042 void clearDisplay(int screen_number); 00043 00044 void command(int screen_number, uint8_t c) 00045 { 00046 CS_1 = 1; 00047 CS_2 = 1; 00048 CS_3 = 1; 00049 00050 DC = 0; 00051 00052 if (screen_number == 1) CS_1 = 0; 00053 else if (screen_number == 2) CS_2 = 0; 00054 else if (screen_number == 3) CS_3 = 0; 00055 00056 spi.write(c); 00057 00058 CS_1 = 1; 00059 CS_2 = 1; 00060 CS_3 = 1; 00061 }; 00062 00063 void data(int screen_number, uint8_t c) 00064 { 00065 CS_1 = 1; 00066 CS_2 = 1; 00067 CS_3 = 1; 00068 00069 DC = 1; 00070 00071 if (screen_number == 1) CS_1 = 0; 00072 else if (screen_number == 2) CS_2 = 0; 00073 else if (screen_number == 3) CS_3 = 0; 00074 00075 spi.write(c); 00076 00077 CS_1 = 1; 00078 CS_2 = 1; 00079 CS_3 = 1; 00080 }; 00081 00082 void powerOnOLED(int screen_number) 00083 { 00084 if (screen_number == 2) spi.format(8,0); //SQUARE 00085 else spi.format(8,3); //CIRCULAR 00086 spi.frequency(SPI_FREQUENCY); 00087 00088 //internal Vdd regulator on 00089 command(1, 0xAB); 00090 command(1, 0x01); 00091 command(3, 0xAB); 00092 command(3, 0x01); 00093 00094 //give reset 00095 wait(0.1); 00096 RST = 0; 00097 wait(0.1); 00098 RST = 1; 00099 00100 //display on, normal mode 00101 command(1, 0xAF); 00102 command(1, 0xA4); 00103 command(2, 0xAF); 00104 command(2, 0xA4); 00105 command(3, 0xAF); 00106 command(3, 0xA4); 00107 00108 //Enable COM remap 00109 command(1, 0xA0); 00110 command(1, 0b01000000); 00111 command(2, 0xA0); 00112 command(2, 0b01000011); 00113 command(3, 0xA0); 00114 command(3, 0b01000000); 00115 } 00116 00117 void welcomeScreen() 00118 { 00119 //dickbutt 00120 drawBitmap(1, 75, 5, 5, 50, 100); 00121 drawBitmap(3, 75, 5, 5, 50, 100); 00122 //solar boat logo 00123 drawBitmap(2, 74, 10, 0, 64, 64); 00124 wait(0.05); 00125 writeLetter(2, 'S', 12, 60); 00126 wait(0.05); 00127 writeLetter(2, 'o', 12, 56); 00128 wait(0.05); 00129 writeLetter(2, 'l', 12, 52); 00130 wait(0.05); 00131 writeLetter(2, 'a', 12, 48); 00132 wait(0.05); 00133 writeLetter(2, 'r', 12, 44); 00134 wait(0.05); 00135 writeLetter(2, 'B', 12, 38); 00136 wait(0.05); 00137 writeLetter(2, 'o', 12, 34); 00138 wait(0.05); 00139 writeLetter(2, 'a', 12, 30); 00140 wait(0.05); 00141 writeLetter(2, 't', 12, 26); 00142 wait(0.05); 00143 writeLetter(2, 'T', 12, 20); 00144 wait(0.05); 00145 writeLetter(2, 'w', 12, 16); 00146 wait(0.05); 00147 writeLetter(2, 'e', 12, 12); 00148 wait(0.05); 00149 writeLetter(2, 'n', 12, 8); 00150 wait(0.05); 00151 writeLetter(2, 't', 12, 4); 00152 wait(0.05); 00153 writeLetter(2, 'e', 12, 0); 00154 wait(0.05); 00155 00156 clearDisplay(1); 00157 clearDisplay(2); 00158 clearDisplay(3); 00159 00160 //LEDs standard on (1) 00161 motor_temp_alert_led = 1; 00162 battery_temp_alert_led = 1; 00163 battery_low_alert_led = 1; 00164 fly_ready_led = 1; 00165 } 00166 00167 void resetOLED() 00168 { 00169 wait(0.1); 00170 RST = 0; 00171 wait(0.1); 00172 RST = 1; 00173 } 00174 00175 void displayData1(int rpm_motor, int battery_temperature, int motor_temperature, int voltage_in, int power_out, int power_in) 00176 { 00177 if (rpm_motor < 1) rpm_motor = 0; 00178 if (battery_temperature < 1) battery_temperature = 0; 00179 if (motor_temperature < 1) motor_temperature = 0; 00180 if (voltage_in < 1) voltage_in = 0; 00181 if (power_in < 1) power_in = 0; 00182 if (power_out < 1) power_out = 0; 00183 00184 writeLetter(2, 'P', 66, 59); 00185 writeLetter(2, 'i', 66, 55); 00186 writeLetter(2, 'n', 66, 51); 00187 writeLetter(2, ':', 66, 47); 00188 00189 writeNumber(2, power_in, 66, 13, 5, false); 00190 writeLetter(2, 'W', 66, 0); 00191 00192 writeLetter(2, 'P', 56, 59); 00193 writeLetter(2, 'o', 56, 55); 00194 writeLetter(2, 'u', 56, 51); 00195 writeLetter(2, 't', 56, 47); 00196 writeLetter(2, ':', 56, 43); 00197 00198 writeNumber(2, power_out, 56, 13, 5, false); 00199 writeLetter(2, 'W', 56, 0); 00200 00201 writeLetter(2, 'V', 46, 59); 00202 writeLetter(2, 'i', 46, 55); 00203 writeLetter(2, 'n', 46, 51); 00204 writeLetter(2, ':', 46, 47); 00205 00206 writeNumber(2, voltage_in, 46, 13, 5, false); 00207 writeLetter(2, 'm', 46, 4); 00208 writeLetter(2, 'V', 46, 0); 00209 00210 writeLetter(2, 'T', 36, 59); 00211 writeLetter(2, 'm', 36, 55); 00212 writeLetter(2, 'o', 36, 51); 00213 writeLetter(2, 't', 36, 47); 00214 writeLetter(2, ':', 36, 43); 00215 00216 writeNumber(2, motor_temperature, 36, 13, 3, false); 00217 writeLetter(2, '*', 36, 4); 00218 writeLetter(2, 'C', 36, 0); 00219 00220 writeLetter(2, 'T', 26, 59); 00221 writeLetter(2, 'b', 26, 55); 00222 writeLetter(2, 'a', 26, 51); 00223 writeLetter(2, 't', 26, 47); 00224 writeLetter(2, ':', 26, 43); 00225 00226 writeNumber(2, battery_temperature, 26, 13, 3, false); 00227 writeLetter(2, '*', 26, 4); 00228 writeLetter(2, 'C', 26, 0); 00229 00230 writeLetter(2, 'N', 16, 59); 00231 writeLetter(2, 'm', 16, 55); 00232 writeLetter(2, 'o', 16, 51); 00233 writeLetter(2, 't', 16, 47); 00234 writeLetter(2, ':', 16, 43); 00235 00236 writeNumber(2, rpm_motor, 16, 13, 4, false); 00237 writeLetter(2, 'r', 16, 8); 00238 writeLetter(2, 'p', 16, 4); 00239 writeLetter(2, 'm', 16, 0); 00240 } 00241 00242 void displayData2(int battery_voltage, int battery_temperature, int motor_temperature, int voltage_in, int power_out, int power_in) 00243 { 00244 if (battery_voltage < 1) battery_voltage = 0; 00245 00246 writeLetter(2, 'V', 66, 59); 00247 writeLetter(2, 'b', 66, 55); 00248 writeLetter(2, 'a', 66, 51); 00249 writeLetter(2, 't', 66, 47); 00250 writeLetter(2, ':', 66, 43); 00251 00252 writeNumber(2, battery_voltage, 66, 13, 5, false); 00253 writeLetter(2, 'm', 66, 4); 00254 writeLetter(2, 'V', 66, 0); 00255 00256 } 00257 00258 void checkForErrors(int current_menu, int velocity, int battery_temperature, int motor_temperature, int MAX_TEMP_MOTOR, int MAX_TEMP_BATTERY, int battery_percentage_left, int battery_minutes_left, int BATTERY_LOW_ALERT) 00259 { 00260 int amount_of_errors = 0; 00261 00262 //------------------------------CONDITIONS FOR ERRORS---------------------------------------------- 00263 //errors on LEDs (4x), also display in error overview, last LED end of function 00264 if (battery_temperature > MAX_TEMP_BATTERY) battery_temp_alert = true; //battery temperature too high LED 00265 else battery_temp_alert = false; 00266 if (motor_temperature > MAX_TEMP_MOTOR) motor_temp_alert = true; //motor temperature too high LED 00267 else motor_temp_alert = false; 00268 if (battery_percentage_left <= BATTERY_LOW_ALERT || battery_minutes_left <= BATTERY_LOW_ALERT) battery_low_alert = true;//battery low LED 00269 else battery_low_alert = false; 00270 if (velocity > 20) fly_ready_alert = true; //Errors exist LED 00271 else fly_ready_alert = false; 00272 //------------------------------END CONDITIONS FOR ERRORS----------------------------------------- 00273 00274 //------------------------------REACTIONS FOR ERRORS---------------------------------------------- 00275 //set essential LEDs for significant errors 00276 if (motor_temp_alert) motor_temp_alert_led = 1; 00277 else motor_temp_alert_led = 0; 00278 if (battery_temp_alert) battery_temp_alert_led = 1; 00279 else battery_temp_alert_led = 0; 00280 if (battery_low_alert) battery_low_alert_led = 1; 00281 else battery_low_alert_led = 0; 00282 if (fly_ready_alert) fly_ready_led = 1; 00283 else fly_ready_led = 0; 00284 //------------------------------END REACTIONS FOR ERRORS----------------------------------------- 00285 00286 //count errors for main screen 00287 if (current_menu == 0) { 00288 if (motor_temp_alert) amount_of_errors++; 00289 if (battery_temp_alert) amount_of_errors++; 00290 if (battery_low_alert) amount_of_errors++; 00291 } 00292 /* 00293 //if in error screen display ALL errors 00294 if (current_menu == 1) { 00295 writeLetter(2, 'E', 66, 59); 00296 writeLetter(2, 'r', 66, 55); 00297 writeLetter(2, 'r', 66, 51); 00298 writeLetter(2, 'o', 66, 47); 00299 writeLetter(2, 'r', 66, 43); 00300 writeLetter(2, 's', 66, 39); 00301 writeLetter(2, ':', 66, 35); 00302 00303 if (motor_temp_alert) { 00304 writeLetter(2, 'E', 57 - (10*amount_of_errors), 59); 00305 writeNumber(2, 1, 57 - (10*amount_of_errors), 55, 1, false); 00306 amount_of_errors++; 00307 } 00308 if (battery_temp_alert) { 00309 writeLetter(2, 'E', 57 - (10*amount_of_errors), 59); 00310 writeNumber(2, 2, 57 - (10*amount_of_errors), 55, 1, false); 00311 amount_of_errors++; 00312 } 00313 if (battery_low_alert) { 00314 writeLetter(2, 'E', 57 - (10*amount_of_errors), 59); 00315 writeNumber(2, 3, 57 - (10*amount_of_errors), 55, 1, false); 00316 amount_of_errors++; 00317 } 00318 //if (error_alert) { 00319 // writeLetter(2, 'E', 57 - (10*amount_of_errors), 59); 00320 // writeNumber(2, 4, 57 - (10*amount_of_errors), 55, 1, false); 00321 // amount_of_errors++; 00322 // } 00323 00324 for (int j = amount_of_errors; j <= 25; j++) { 00325 if (j < 6) { 00326 writeLetter(2, ' ', 57 - (10*j), 59); 00327 writeLetter(2, ' ', 57 - (10*j), 55); 00328 } 00329 //else if (j > 5 && j < 11) writeLetter(2, ' ', 64 - (10*(j-5)), 47); 00330 // else if (j > 10 && j < 16) writeLetter(2, ' ', 64 - (10*(j-10)), 35); 00331 // else if (j > 15 && j < 21) writeLetter(2, ' ', 64 - (10*(j-15)), 23); 00332 // else if (j > 20 && j < 26) writeLetter(2, ' ', 64 - (10*(j-20)), 11); 00333 } 00334 00335 if (amount_of_errors < 1) { 00336 amount_of_errors = 0; 00337 error_alert = false; 00338 } else error_alert = true; 00339 if (amount_of_errors < 25) writeLetter(2, ' ', 66, 0); 00340 else if (amount_of_errors > 25) { 00341 amount_of_errors = 25; 00342 writeLetter(2, '+', 66, 0); 00343 } 00344 writeNumber(2, amount_of_errors, 66, 4, 2, false); 00345 } 00346 if (current_menu == 0 && error_alert) { 00347 //draw alert logo if errors 00348 drawBitmap(2, 91, 64, 48, 7, 10); 00349 } else if (current_menu == 0 && !error_alert) { 00350 //clear if no errors 00351 drawBitmap(2, 92, 64, 48, 7, 10); 00352 } */ 00353 } 00354 00355 void showBatteryMinutesLeft(int battery_minutes_left) 00356 { 00357 if (battery_minutes_left < 1) battery_minutes_left = 0; 00358 //show minutes left 00359 writeNumber(3, battery_minutes_left, 55, 20, 3, true); 00360 00361 writeLetter(3, 'm', 60, 13); 00362 writeLetter(3, 'i', 60, 9); 00363 writeLetter(3, 'n', 60, 5); 00364 } 00365 00366 void showBatteryPercentageLeft(int battery_percentage_left) 00367 { 00368 if (battery_percentage_left > 99) battery_percentage_left = 100; 00369 else if (battery_percentage_left < 0) battery_percentage_left = 0; 00370 00371 //show percentage left 00372 writeNumber(3, battery_percentage_left, 85, 20, 3, true); 00373 00374 //drawBitmap(1, 91, 85, 10, 10, 20); 00375 writeLetter(3, '%', 90, 13); 00376 00377 //show battery logo 00378 for (int i = 18; i <= 35; i++) { 00379 drawPixel(3, i, 18, 0x0F); 00380 } 00381 for (int i = 18; i <= 35; i++) { 00382 drawPixel(3, i, 45, 0xF0); 00383 } 00384 for (int i = 18; i <= 45; i++) { 00385 drawPixel(3, 18, i, 0xFF); 00386 } 00387 for (int i = 18; i <= 45; i++) { 00388 drawPixel(3, 36, i, 0xFF); 00389 } 00390 for (int i = 22; i <= 31; i++) { 00391 drawPixel(3, i, 16, 0xF0); 00392 } 00393 drawPixel(3, 22, 17, 0xFF); 00394 drawPixel(3, 31, 17, 0xFF); 00395 00396 //drawBitmap(1, 75, 15, 20, 30, 24); 00397 updateBatteryBar(3, battery_percentage_left, 20, 18, 26, 15); 00398 } 00399 00400 void showRaceMinutesDone(int race_minutes_done) 00401 { 00402 if (race_minutes_done < 1) race_minutes_done = 0; 00403 //show minutes left 00404 writeNumber(1, race_minutes_done, 85, 20, 3, true); 00405 00406 writeLetter(1, 'm', 90, 13); 00407 writeLetter(1, 'i', 90, 9); 00408 writeLetter(1, 'n', 90, 5); 00409 } 00410 00411 void showRaceMinutesLeft(int race_minutes_left) 00412 { 00413 if (race_minutes_left < 1) race_minutes_left = 0; 00414 //show minutes left 00415 writeNumber(1, race_minutes_left, 25, 20, 3, true); 00416 00417 writeLetter(1, 'm', 30, 13); 00418 writeLetter(1, 'i', 30, 9); 00419 writeLetter(1, 'n', 30, 5); 00420 } 00421 00422 void showRacePercentageLeft(int race_percentage_left) 00423 { 00424 if (race_percentage_left > 99) race_percentage_left = 100; 00425 else if (race_percentage_left < 0) race_percentage_left = 0; 00426 00427 //show percentage left 00428 writeNumber(1, race_percentage_left, 55, 20, 3, true); 00429 writeLetter(1, '%', 60, 13); 00430 } 00431 00432 void checkTransmitter(bool transmitting) 00433 { 00434 if (time(0) % 2 == 0) transmitting = !transmitting; 00435 if (transmitting) { 00436 writeLetter(2, 'T', 65, 12); 00437 writeLetter(2, 'x', 65, 8); 00438 } else { 00439 writeLetter(2, ' ', 65, 12); 00440 writeLetter(2, ' ', 65, 8); 00441 } 00442 } 00443 00444 void displayTime() 00445 { 00446 //int seconds = (int) (time(NULL) % 60); 00447 int minutes = (int) ((time(NULL) / 60) % 60); 00448 int hours = (int) ((time(NULL) / (60*60)) % 24); 00449 00450 drawBitmap(2, hours / 10 % 10, 65, 39, 4, 7); 00451 drawBitmap(2, hours % 10, 65, 35, 4, 7); 00452 writeLetter(2, ':', 65, 31); 00453 drawBitmap(2, minutes / 10 % 10, 65, 27, 4, 7); 00454 drawBitmap(2, minutes % 10, 65, 23, 4, 7); 00455 } 00456 00457 void displayAdvisedThrottle(int advised_throttle_power) 00458 { 00459 // writeNumber(2, advised_throttle_power, 41, 31, 4, false); 00460 // writeLetter(2, 'r', 41, 21); 00461 // writeLetter(2, 'p', 41, 17); 00462 // writeLetter(2, 'm', 41, 13); 00463 } 00464 00465 void displayThrottle(int throttle_power, bool reverse) 00466 { 00467 writeNumber(2, throttle_power, 45, 31, 4, false); 00468 writeLetter(2, 'r', 45, 21); 00469 writeLetter(2, 'p', 45, 17); 00470 writeLetter(2, 'm', 45, 13); 00471 00472 if (reverse) { 00473 writeLetter(2, 'R', 15, 31); 00474 //blink box around R 00475 if (time(0) % 2 == 0) { 00476 for (int i = 12; i < 25; i++) { 00477 drawPixel(2, i, 30, 0xF0); 00478 } 00479 for (int i = 12; i < 25; i++) { 00480 drawPixel(2, i, 35, 0xF0); 00481 } 00482 for (int i = 31; i <= 35; i++) { 00483 drawPixel(2, 12, i, 0xFF); 00484 } 00485 for (int i = 31; i <= 35; i++) { 00486 drawPixel(2, 24, i, 0xFF); 00487 } 00488 } else { 00489 for (int i = 12; i < 25; i++) { 00490 drawPixel(2, i, 30, 0x00); 00491 } 00492 for (int i = 12; i < 25; i++) { 00493 drawPixel(2, i, 35, 0x00); 00494 } 00495 for (int i = 31; i <= 35; i++) { 00496 drawPixel(2, 12, i, 0x00); 00497 } 00498 for (int i = 31; i <= 35; i++) { 00499 drawPixel(2, 24, i, 0x00); 00500 } 00501 } 00502 } 00503 00504 else { 00505 for (int i = 12; i < 25; i++) { 00506 drawPixel(2, i, 30, 0xF0); 00507 } 00508 for (int i = 12; i < 25; i++) { 00509 drawPixel(2, i, 35, 0xF0); 00510 } 00511 for (int i = 31; i <= 35; i++) { 00512 drawPixel(2, 12, i, 0xFF); 00513 } 00514 for (int i = 31; i <= 35; i++) { 00515 drawPixel(2, 24, i, 0xFF); 00516 } 00517 writeLetter(2, 'D', 15, 31); 00518 } 00519 } 00520 void displayVelocity(int velocity) 00521 { 00522 if (velocity < 1) velocity = 0; 00523 00524 writeNumber(2, velocity, 35, 31, 3, false); 00525 writeLetter(2, 'k', 35, 21); 00526 writeLetter(2, 'm', 35, 17); 00527 writeLetter(2, '/', 35, 13); 00528 writeLetter(2, 'h', 35, 9); 00529 } 00530 00531 void writeLetter(int screen_number, char input, int row, int col) 00532 { 00533 int index_ = 63; 00534 if (input == 'a') index_ = 10; 00535 if (input == 'b') index_ = 11; 00536 if (input == 'c') index_ = 12; 00537 if (input == 'd') index_ = 13; 00538 if (input == 'e') index_ = 14; 00539 if (input == 'f') index_ = 15; 00540 if (input == 'g') index_ = 16; 00541 if (input == 'h') index_ = 17; 00542 if (input == 'i') index_ = 18; 00543 if (input == 'j') index_ = 19; 00544 if (input == 'k') index_ = 20; 00545 if (input == 'l') index_ = 21; 00546 if (input == 'm') index_ = 22; 00547 if (input == 'n') index_ = 23; 00548 if (input == 'o') index_ = 24; 00549 if (input == 'p') index_ = 25; 00550 if (input == 'q') index_ = 26; 00551 if (input == 'r') index_ = 27; 00552 if (input == 's') index_ = 28; 00553 if (input == 't') index_ = 29; 00554 if (input == 'u') index_ = 30; 00555 if (input == 'v') index_ = 31; 00556 if (input == 'w') index_ = 32; 00557 if (input == 'x') index_ = 33; 00558 if (input == 'y') index_ = 34; 00559 if (input == 'z') index_ = 35; 00560 if (input == 'A') index_ = 36; 00561 if (input == 'B') index_ = 37; 00562 if (input == 'C') index_ = 38; 00563 if (input == 'D') index_ = 39; 00564 if (input == 'E') index_ = 40; 00565 if (input == 'F') index_ = 41; 00566 if (input == 'G') index_ = 42; 00567 if (input == 'H') index_ = 43; 00568 if (input == 'I') index_ = 44; 00569 if (input == 'J') index_ = 45; 00570 if (input == 'K') index_ = 46; 00571 if (input == 'L') index_ = 47; 00572 if (input == 'M') index_ = 48; 00573 if (input == 'N') index_ = 49; 00574 if (input == 'O') index_ = 50; 00575 if (input == 'P') index_ = 51; 00576 if (input == 'Q') index_ = 52; 00577 if (input == 'R') index_ = 53; 00578 if (input == 'S') index_ = 54; 00579 if (input == 'T') index_ = 55; 00580 if (input == 'U') index_ = 56; 00581 if (input == 'V') index_ = 57; 00582 if (input == 'W') index_ = 58; 00583 if (input == 'X') index_ = 59; 00584 if (input == 'Y') index_ = 60; 00585 if (input == 'Z') index_ = 61; 00586 if (input == ';') index_ = 62; 00587 if (input == '-') index_ = 63; 00588 if (input == ':') index_ = 64; 00589 if (input == '+') index_ = 65; 00590 if (input == '/') index_ = 66; 00591 if (input == '%') index_ = 67; 00592 if (input == '?') index_ = 68; 00593 if (input == ',') index_ = 69; 00594 if (input == '(') index_ = 70; 00595 if (input == ')') index_ = 71; 00596 if (input == '.') index_ = 72; 00597 if (input == ' ') index_ = 73; 00598 //logos 00599 if (input == '*') index_ = 76; 00600 00601 drawBitmap(screen_number, index_, row, col, 4, 7); 00602 } 00603 00604 void writeNumber(int screen_number, int input_number, char row, char col, int digits, bool large) 00605 { 00606 unsigned int number_of_digits = 0; 00607 int counter = input_number; 00608 00609 do { 00610 ++number_of_digits; 00611 counter /= 10; 00612 } while (counter); 00613 00614 for (int i = 0; i < number_of_digits; i++) { 00615 int result = (int) pow((double) 10,i); 00616 if (large) drawBitmap(screen_number, 80 + (input_number / (result) % 10), row, col + (11*i), 10, 20); 00617 else drawBitmap(screen_number, input_number / (result) % 10, row, col + (4*i), 4, 7); 00618 } 00619 for (int i = number_of_digits; i < digits; i++) { 00620 if (large) drawBitmap(screen_number, 90, row, col + (11*i), 10, 20); 00621 else writeLetter(screen_number, ' ', row, col + (4*i)); 00622 } 00623 } 00624 00625 void drawPixel(int screen_number, uint8_t row, uint8_t col, uint8_t brightness) 00626 { 00627 command(screen_number, 0x15); 00628 command(screen_number, col); 00629 command(screen_number, col); 00630 00631 command(screen_number, 0x75); 00632 command(screen_number, row); 00633 command(screen_number, row); 00634 00635 data(screen_number, brightness); 00636 } 00637 00638 void clearDisplay(int screen_number) 00639 { 00640 command(screen_number, 0x15); 00641 command(screen_number, 0x00); 00642 command(screen_number, 0xFF); 00643 00644 command(screen_number, 0x75); 00645 command(screen_number, 0x00); 00646 command(screen_number, 0xFF); 00647 00648 if (screen_number == 2) { 00649 for (int i = 0; i < (128*64); i++) { 00650 data(screen_number, 0x00); 00651 } 00652 } else { 00653 for (int i = 0; i < (128*128); i++) { 00654 data(screen_number, 0x00); 00655 } 00656 } 00657 } 00658 00659 void updateProgressCircle(int screen_number, int percentage) 00660 { 00661 //circular battery percentage bar 00662 int radius = 31; 00663 for (double theta = 0; theta <= 0.01*percentage*2*PI; theta += 0.01) { 00664 drawPixel(screen_number, (64+2*radius*(cos(theta))), (32+radius*(sin(theta))), 0xFF); 00665 } 00666 for (double theta = 0.01*percentage*2*PI; theta <= 2*PI ; theta += 0.01) { 00667 drawPixel(screen_number, (64+2*radius*(cos(theta))), (32+radius*(sin(theta))), 0x00); 00668 } 00669 } 00670 00671 void updatePowerBars(int power_out, int power_in, int MAX_POWER_OUT, int MAX_POWER_IN) 00672 { 00673 if (power_in < 1) power_in = 0; 00674 else if (power_in > MAX_POWER_IN) power_in = MAX_POWER_IN; 00675 if (power_out < 1) power_out = 0; 00676 else if (power_out > MAX_POWER_OUT) power_out = MAX_POWER_OUT; 00677 00678 //draw Powerbars 00679 for (int i = 12; i < 74; i++) { 00680 drawPixel(2, i, 0, 0x0F); 00681 } 00682 for (int i = 12; i < 74; i++) { 00683 drawPixel(2, i, 4, 0xF0); 00684 } 00685 for (int i = 0; i <= 4; i++) { 00686 drawPixel(2, 12, i, 0xFF); 00687 } 00688 for (int i = 0; i <= 4; i++) { 00689 drawPixel(2, 73, i, 0xFF); 00690 } 00691 for (int i = 12; i < 74; i++) { 00692 drawPixel(2, i, 59, 0x0F); 00693 } 00694 for (int i = 12; i < 74; i++) { 00695 drawPixel(2, i, 63, 0xF0); 00696 } 00697 for (int i = 59; i <= 63; i++) { 00698 drawPixel(2, 12, i, 0xFF); 00699 } 00700 for (int i = 59; i <= 63; i++) { 00701 drawPixel(2, 73, i, 0xFF); 00702 } 00703 00704 // writeLetter(2 , 'P', 12, 55); 00705 // writeLetter(2 , 'i', 12, 51); 00706 // writeLetter(2 , 'n', 12, 47); 00707 // 00708 // writeLetter(2 , 'P', 12, 17); 00709 // writeLetter(2 , 'o', 12, 13); 00710 // writeLetter(2 , 'u', 12, 9); 00711 // writeLetter(2 , 't', 12, 5); 00712 00713 writeLetter(2 , 'I', 12, 55); 00714 writeLetter(2 , 'n', 12, 51); 00715 00716 writeLetter(2 , 'O', 12, 13); 00717 writeLetter(2 , 'u', 12, 9); 00718 writeLetter(2 , 't', 12, 5); 00719 00720 //left hand side 00721 for (int i = 0; i < (58*power_in/MAX_POWER_IN); i++) { 00722 for (int j = 0; j < 3; j++) { 00723 drawPixel(2, 14 + i, 60 + j, 0xFF); 00724 } 00725 } 00726 for (int i = (58*power_in/MAX_POWER_IN); i <= 58; i++) { 00727 for (int j = 0; j < 3; j++) { 00728 drawPixel(2, 14 + i, 60 + j, 0x00); 00729 } 00730 } 00731 //right hand side 00732 for (int i = 0; i < (58*power_out/MAX_POWER_OUT); i++) { 00733 for (int j = 0; j < 3; j++) { 00734 drawPixel(2, 14 + i, 1 + j, 0xFF); 00735 } 00736 } 00737 for (int i = (58*power_out/MAX_POWER_OUT); i <= 58; i++) { 00738 for (int j = 0; j < 3; j++) { 00739 drawPixel(2, 14 + i, 1 + j, 0x00); 00740 } 00741 } 00742 } 00743 00744 void updateBatteryBar(int screen_number, int percentage, int row, int col, int width, int height) 00745 { 00746 for (int i = 0; i < (percentage*width/100); i++) { 00747 for (int j = 0; j < height; j++) { 00748 drawPixel(screen_number, row + j, width + col - i, 0xFF); 00749 } 00750 } 00751 for (int i = (percentage*width/100); i < width; i++) { 00752 for (int j = 0; j < height; j++) { 00753 drawPixel(screen_number, row + j, width + col - i, 0x00); 00754 } 00755 } 00756 } 00757 00758 void drawBitmap(int screen_number, int index_number, char row, char col, int width, int height) 00759 { 00760 command(screen_number, 0x15); 00761 command(screen_number, col); 00762 command(screen_number, (col + (width-1))); 00763 00764 command(screen_number, 0x75); 00765 command(screen_number, row); 00766 command(screen_number, (row + (height-1))); 00767 00768 for(int i = (width*height-1); i >= 0; i--) { 00769 00770 switch (index_number) { 00771 00772 case 0: 00773 data(screen_number, number_0_small[i]); 00774 break; 00775 case 1: 00776 data(screen_number, number_1_small[i]); 00777 break; 00778 case 2: 00779 data(screen_number, number_2_small[i]); 00780 break; 00781 case 3: 00782 data(screen_number, number_3_small[i]); 00783 break; 00784 case 4: 00785 data(screen_number, number_4_small[i]); 00786 break; 00787 case 5: 00788 data(screen_number, number_5_small[i]); 00789 break; 00790 case 6: 00791 data(screen_number, number_6_small[i]); 00792 break; 00793 case 7: 00794 data(screen_number, number_7_small[i]); 00795 break; 00796 case 8: 00797 data(screen_number, number_8_small[i]); 00798 break; 00799 case 9: 00800 data(screen_number, number_9_small[i]); 00801 break; 00802 case 10: 00803 data(screen_number, letter_a_small[i]); 00804 break; 00805 case 11: 00806 data(screen_number, letter_b_small[i]); 00807 break; 00808 case 12: 00809 data(screen_number, letter_c_small[i]); 00810 break; 00811 case 13: 00812 data(screen_number, letter_d_small[i]); 00813 break; 00814 case 14: 00815 data(screen_number, letter_e_small[i]); 00816 break; 00817 case 15: 00818 data(screen_number, letter_f_small[i]); 00819 break; 00820 case 16: 00821 data(screen_number, letter_g_small[i]); 00822 break; 00823 case 17: 00824 data(screen_number, letter_h_small[i]); 00825 break; 00826 case 18: 00827 data(screen_number, letter_i_small[i]); 00828 break; 00829 case 19: 00830 data(screen_number, letter_j_small[i]); 00831 break; 00832 case 20: 00833 data(screen_number, letter_k_small[i]); 00834 break; 00835 case 21: 00836 data(screen_number, letter_l_small[i]); 00837 break; 00838 case 22: 00839 data(screen_number, letter_m_small[i]); 00840 break; 00841 case 23: 00842 data(screen_number, letter_n_small[i]); 00843 break; 00844 case 24: 00845 data(screen_number, letter_o_small[i]); 00846 break; 00847 case 25: 00848 data(screen_number, letter_p_small[i]); 00849 break; 00850 case 26: 00851 data(screen_number, letter_q_small[i]); 00852 break; 00853 case 27: 00854 data(screen_number, letter_r_small[i]); 00855 break; 00856 case 28: 00857 data(screen_number, letter_s_small[i]); 00858 break; 00859 case 29: 00860 data(screen_number, letter_t_small[i]); 00861 break; 00862 case 30: 00863 data(screen_number, letter_u_small[i]); 00864 break; 00865 case 31: 00866 data(screen_number, letter_v_small[i]); 00867 break; 00868 case 32: 00869 data(screen_number, letter_w_small[i]); 00870 break; 00871 case 33: 00872 data(screen_number, letter_x_small[i]); 00873 break; 00874 case 34: 00875 data(screen_number, letter_y_small[i]); 00876 break; 00877 case 35: 00878 data(screen_number, letter_z_small[i]); 00879 break; 00880 case 36: 00881 data(screen_number, letter_a_large[i]); 00882 break; 00883 case 37: 00884 data(screen_number, letter_b_large[i]); 00885 break; 00886 case 38: 00887 data(screen_number, letter_c_large[i]); 00888 break; 00889 case 39: 00890 data(screen_number, letter_d_large[i]); 00891 break; 00892 case 40: 00893 data(screen_number, letter_e_large[i]); 00894 break; 00895 case 41: 00896 data(screen_number, letter_f_large[i]); 00897 break; 00898 case 42: 00899 data(screen_number, letter_g_large[i]); 00900 break; 00901 case 43: 00902 data(screen_number, letter_h_large[i]); 00903 break; 00904 case 44: 00905 data(screen_number, letter_i_large[i]); 00906 break; 00907 case 45: 00908 data(screen_number, letter_j_large[i]); 00909 break; 00910 case 46: 00911 data(screen_number, letter_k_large[i]); 00912 break; 00913 case 47: 00914 data(screen_number, letter_l_large[i]); 00915 break; 00916 case 48: 00917 data(screen_number, letter_m_large[i]); 00918 break; 00919 case 49: 00920 data(screen_number, letter_n_large[i]); 00921 break; 00922 case 50: 00923 data(screen_number, letter_o_large[i]); 00924 break; 00925 case 51: 00926 data(screen_number, letter_p_large[i]); 00927 break; 00928 case 52: 00929 data(screen_number, letter_q_large[i]); 00930 break; 00931 case 53: 00932 data(screen_number, letter_r_large[i]); 00933 break; 00934 case 54: 00935 data(screen_number, letter_s_large[i]); 00936 break; 00937 case 55: 00938 data(screen_number, letter_t_large[i]); 00939 break; 00940 case 56: 00941 data(screen_number, letter_u_large[i]); 00942 break; 00943 case 57: 00944 data(screen_number, letter_v_large[i]); 00945 break; 00946 case 58: 00947 data(screen_number, letter_w_large[i]); 00948 break; 00949 case 59: 00950 data(screen_number, letter_x_large[i]); 00951 break; 00952 case 60: 00953 data(screen_number, letter_y_large[i]); 00954 break; 00955 case 61: 00956 data(screen_number, letter_z_large[i]); 00957 break; 00958 case 62: 00959 data(screen_number, letter_semicolon[i]); 00960 break; 00961 case 63: 00962 data(screen_number, letter_minus[i]); 00963 break; 00964 case 64: 00965 data(screen_number, letter_dubbelepunt[i]); 00966 break; 00967 case 65: 00968 data(screen_number, letter_plus[i]); 00969 break; 00970 case 66: 00971 data(screen_number, letter_slash[i]); 00972 break; 00973 case 67: 00974 data(screen_number, letter_percent[i]); 00975 break; 00976 case 68: 00977 data(screen_number, letter_questionmark[i]); 00978 break; 00979 case 69: 00980 data(screen_number, letter_comma[i]); 00981 break; 00982 case 70: 00983 data(screen_number, letter_open[i]); 00984 break; 00985 case 71: 00986 data(screen_number, letter_close[i]); 00987 break; 00988 case 72: 00989 data(screen_number, letter_dot[i]); 00990 break; 00991 case 73: 00992 data(screen_number, letter_space[i]); 00993 break; 00994 case 74: 00995 data(screen_number, logo_solar_boat[i]); 00996 break; 00997 case 75: 00998 data(screen_number, logo_dickbutt[i]); 00999 break; 01000 case 76: 01001 data(screen_number, letter_degree[i]); 01002 break; 01003 //+80 for large numbers 01004 case 80: 01005 data(screen_number, large_0[i]); 01006 break; 01007 case 81: 01008 data(screen_number, large_1[i]); 01009 break; 01010 case 82: 01011 data(screen_number, large_2[i]); 01012 break; 01013 case 83: 01014 data(screen_number, large_3[i]); 01015 break; 01016 case 84: 01017 data(screen_number, large_4[i]); 01018 break; 01019 case 85: 01020 data(screen_number, large_5[i]); 01021 break; 01022 case 86: 01023 data(screen_number, large_6[i]); 01024 break; 01025 case 87: 01026 data(screen_number, large_7[i]); 01027 break; 01028 case 88: 01029 data(screen_number, large_8[i]); 01030 break; 01031 case 89: 01032 data(screen_number, large_9[i]); 01033 break; 01034 case 90: 01035 data(screen_number, large_space[i]); 01036 break; 01037 case 91: 01038 data(screen_number, alert_sign[i]); 01039 break; 01040 case 92: 01041 data(screen_number, alert_sign_space[i]); 01042 break; 01043 } 01044 } 01045 }
Generated on Wed Jul 13 2022 04:00:52 by 1.7.2