Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
Fork of Ranger by
main.cpp@5:083d484e95a1, 2016-04-15 (annotated)
- Committer:
- el15pjt
- Date:
- Fri Apr 15 13:25:32 2016 +0000
- Revision:
- 5:083d484e95a1
- Parent:
- 4:673930f04866
- Child:
- 6:b464a8a94d91
Menus added. Still bug in buzzer Temp to be added still, Z.P.A to be added and LED timeout to be added.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el15pjt | 0:0b180348c7e4 | 1 | /* |
el15pjt | 0:0b180348c7e4 | 2 | Philip Thompsonn |
el15pjt | 0:0b180348c7e4 | 3 | EL15PJT |
el15pjt | 0:0b180348c7e4 | 4 | Embedded System Project |
el15pjt | 0:0b180348c7e4 | 5 | EL2645 |
el15pjt | 0:0b180348c7e4 | 6 | */ |
el15pjt | 0:0b180348c7e4 | 7 | |
el15pjt | 0:0b180348c7e4 | 8 | #include "mbed.h" |
el15pjt | 0:0b180348c7e4 | 9 | #include "SRF02.h" |
el15pjt | 0:0b180348c7e4 | 10 | #include "N5110.h" |
el15pjt | 0:0b180348c7e4 | 11 | |
el15pjt | 2:329597081c06 | 12 | #define LOW 0 |
el15pjt | 2:329597081c06 | 13 | #define HIGH 1 |
el15pjt | 5:083d484e95a1 | 14 | #define METRIC 1 |
el15pjt | 5:083d484e95a1 | 15 | #define IMPERIAL 0 |
el15pjt | 3:8782b8b8658b | 16 | |
el15pjt | 2:329597081c06 | 17 | DigitalOut rr_led (PTA1); |
el15pjt | 2:329597081c06 | 18 | DigitalOut a_led (PTC2); |
el15pjt | 2:329597081c06 | 19 | DigitalOut gg_led(PTB23); |
el15pjt | 4:673930f04866 | 20 | PwmOut buzzer(PTA2); |
el15pjt | 3:8782b8b8658b | 21 | |
el15pjt | 0:0b180348c7e4 | 22 | // Ranger object |
el15pjt | 0:0b180348c7e4 | 23 | SRF02 srf02(I2C_SDA,I2C_SCL); |
el15pjt | 0:0b180348c7e4 | 24 | |
el15pjt | 0:0b180348c7e4 | 25 | //N5110 Object VCC, SCE,RST, D/C, MOSI,SCLK, LED |
el15pjt | 0:0b180348c7e4 | 26 | N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3); |
el15pjt | 0:0b180348c7e4 | 27 | |
el15pjt | 2:329597081c06 | 28 | Ticker ticker; |
el15pjt | 3:8782b8b8658b | 29 | Ticker ticker_srf02; |
el15pjt | 4:673930f04866 | 30 | Ticker ticker_tone; |
el15pjt | 4:673930f04866 | 31 | Timeout buzzoff; |
el15pjt | 4:673930f04866 | 32 | |
el15pjt | 0:0b180348c7e4 | 33 | // K64F on-board LEDs |
el15pjt | 0:0b180348c7e4 | 34 | DigitalOut r_led(LED_RED); |
el15pjt | 0:0b180348c7e4 | 35 | DigitalOut g_led(LED_GREEN); |
el15pjt | 0:0b180348c7e4 | 36 | DigitalOut b_led(LED_BLUE); |
el15pjt | 0:0b180348c7e4 | 37 | |
el15pjt | 0:0b180348c7e4 | 38 | // K64F on-board switches |
el15pjt | 5:083d484e95a1 | 39 | InterruptIn sw1(SW2); |
el15pjt | 3:8782b8b8658b | 40 | InterruptIn sw2(SW3); |
el15pjt | 0:0b180348c7e4 | 41 | |
el15pjt | 5:083d484e95a1 | 42 | volatile int g_timer_flag_led = 0; |
el15pjt | 3:8782b8b8658b | 43 | volatile int g_timer_flag_srf02 = 0; |
el15pjt | 4:673930f04866 | 44 | volatile int g_timer_flag_tone = 0; |
el15pjt | 4:673930f04866 | 45 | volatile int g_sw1_flag = 0; |
el15pjt | 5:083d484e95a1 | 46 | volatile int g_sw2_flag = 0; |
el15pjt | 2:329597081c06 | 47 | |
el15pjt | 5:083d484e95a1 | 48 | int r1 = 3; |
el15pjt | 5:083d484e95a1 | 49 | int r2 = 20; |
el15pjt | 5:083d484e95a1 | 50 | int r3 = 40; |
el15pjt | 5:083d484e95a1 | 51 | int r4 = 60; |
el15pjt | 5:083d484e95a1 | 52 | int r5 = 90; |
el15pjt | 5:083d484e95a1 | 53 | int r6 = 120; |
el15pjt | 5:083d484e95a1 | 54 | int r7 = 150; |
el15pjt | 5:083d484e95a1 | 55 | |
el15pjt | 5:083d484e95a1 | 56 | int subpage; |
el15pjt | 5:083d484e95a1 | 57 | int page; |
el15pjt | 5:083d484e95a1 | 58 | int offset = 0; |
el15pjt | 3:8782b8b8658b | 59 | int alert; |
el15pjt | 0:0b180348c7e4 | 60 | int distance; |
el15pjt | 3:8782b8b8658b | 61 | float bright = 1; |
el15pjt | 5:083d484e95a1 | 62 | char units = METRIC; |
el15pjt | 0:0b180348c7e4 | 63 | |
el15pjt | 2:329597081c06 | 64 | // struct for state |
el15pjt | 2:329597081c06 | 65 | struct Alertlevel { |
el15pjt | 2:329597081c06 | 66 | char srr_led; // output value |
el15pjt | 2:329597081c06 | 67 | char sa_led; // time in state |
el15pjt | 2:329597081c06 | 68 | char sgg_led; // array of next states |
el15pjt | 2:329597081c06 | 69 | char frr_led; |
el15pjt | 2:329597081c06 | 70 | char fa_led; |
el15pjt | 2:329597081c06 | 71 | char fgg_led; |
el15pjt | 4:673930f04866 | 72 | float toneon; |
el15pjt | 4:673930f04866 | 73 | float toneoff; |
el15pjt | 2:329597081c06 | 74 | }; |
el15pjt | 2:329597081c06 | 75 | typedef const struct Alertlevel STyp; |
el15pjt | 2:329597081c06 | 76 | |
el15pjt | 2:329597081c06 | 77 | STyp Alertlevel[8] = { |
el15pjt | 4:673930f04866 | 78 | {LOW,LOW,LOW,LOW,LOW,LOW,0,1}, // no output |
el15pjt | 4:673930f04866 | 79 | {LOW,LOW,LOW,LOW,LOW,HIGH,0.05,1}, //flash green |
el15pjt | 4:673930f04866 | 80 | {LOW,LOW,HIGH,LOW,LOW,LOW,0.1,1}, //steady green |
el15pjt | 4:673930f04866 | 81 | {LOW,LOW,HIGH,LOW,HIGH,LOW,0.2,0.5}, //flash amber |
el15pjt | 4:673930f04866 | 82 | {LOW,HIGH,HIGH,LOW,LOW,LOW,0.55,0.25}, //steady amber |
el15pjt | 4:673930f04866 | 83 | {LOW,HIGH,HIGH,HIGH,LOW,LOW,0.8,0.1}, //flash red |
el15pjt | 4:673930f04866 | 84 | {HIGH,HIGH,HIGH,LOW,LOW,LOW,1,1.05},// steady red |
el15pjt | 4:673930f04866 | 85 | {LOW,LOW,LOW,HIGH,HIGH,HIGH,1,0.05} // all flash |
el15pjt | 2:329597081c06 | 86 | }; |
el15pjt | 3:8782b8b8658b | 87 | void lcdoutput(); |
el15pjt | 5:083d484e95a1 | 88 | void timer_isr_led(); // timed interuprt |
el15pjt | 3:8782b8b8658b | 89 | void timer_isr_srf02(); |
el15pjt | 4:673930f04866 | 90 | void timer_isr_tone(); |
el15pjt | 3:8782b8b8658b | 91 | void backlight(); |
el15pjt | 3:8782b8b8658b | 92 | void init_K64F(); // set up board |
el15pjt | 3:8782b8b8658b | 93 | void sw2_isr(); |
el15pjt | 5:083d484e95a1 | 94 | void sw1_isr(); |
el15pjt | 3:8782b8b8658b | 95 | void setalert(); |
el15pjt | 3:8782b8b8658b | 96 | void setleds(); |
el15pjt | 4:673930f04866 | 97 | void setbuzzer(); |
el15pjt | 5:083d484e95a1 | 98 | void nobuzz(); |
el15pjt | 5:083d484e95a1 | 99 | void menu(); |
el15pjt | 5:083d484e95a1 | 100 | void submenu(); |
el15pjt | 4:673930f04866 | 101 | |
el15pjt | 0:0b180348c7e4 | 102 | |
el15pjt | 0:0b180348c7e4 | 103 | int main() |
el15pjt | 0:0b180348c7e4 | 104 | { |
el15pjt | 0:0b180348c7e4 | 105 | lcd.init(); |
el15pjt | 0:0b180348c7e4 | 106 | init_K64F(); |
el15pjt | 5:083d484e95a1 | 107 | ticker.attach(&timer_isr_led,0.35); |
el15pjt | 3:8782b8b8658b | 108 | ticker_srf02.attach(&timer_isr_srf02,0.02); |
el15pjt | 4:673930f04866 | 109 | ticker_tone.attach(&timer_isr_tone,Alertlevel[alert].toneoff); |
el15pjt | 5:083d484e95a1 | 110 | sw1.fall(&sw1_isr); |
el15pjt | 3:8782b8b8658b | 111 | sw2.fall(&sw2_isr); |
el15pjt | 0:0b180348c7e4 | 112 | while(1) { |
el15pjt | 4:673930f04866 | 113 | |
el15pjt | 5:083d484e95a1 | 114 | if (g_sw1_flag) { |
el15pjt | 5:083d484e95a1 | 115 | g_sw1_flag = 0; |
el15pjt | 5:083d484e95a1 | 116 | page = 0; |
el15pjt | 5:083d484e95a1 | 117 | subpage = 0; |
el15pjt | 5:083d484e95a1 | 118 | menu(); |
el15pjt | 2:329597081c06 | 119 | } |
el15pjt | 5:083d484e95a1 | 120 | |
el15pjt | 3:8782b8b8658b | 121 | if (g_timer_flag_srf02) { |
el15pjt | 3:8782b8b8658b | 122 | g_timer_flag_srf02 = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 123 | if (units == METRIC) { |
el15pjt | 5:083d484e95a1 | 124 | distance = srf02.getDistanceCm(); |
el15pjt | 5:083d484e95a1 | 125 | } else { |
el15pjt | 5:083d484e95a1 | 126 | distance = srf02.getDistannceInch(); |
el15pjt | 5:083d484e95a1 | 127 | } |
el15pjt | 5:083d484e95a1 | 128 | distance = distance-offset; |
el15pjt | 0:0b180348c7e4 | 129 | } |
el15pjt | 5:083d484e95a1 | 130 | setalert(); |
el15pjt | 3:8782b8b8658b | 131 | lcdoutput(); |
el15pjt | 5:083d484e95a1 | 132 | // setbuzzer(); |
el15pjt | 3:8782b8b8658b | 133 | setleds(); |
el15pjt | 4:673930f04866 | 134 | sleep(); |
el15pjt | 0:0b180348c7e4 | 135 | } |
el15pjt | 0:0b180348c7e4 | 136 | } |
el15pjt | 0:0b180348c7e4 | 137 | |
el15pjt | 0:0b180348c7e4 | 138 | //Set up board switches and LEDS |
el15pjt | 2:329597081c06 | 139 | void init_K64F() |
el15pjt | 2:329597081c06 | 140 | { |
el15pjt | 0:0b180348c7e4 | 141 | //on-board LEDs are active-low, so set pin high to turn them off. |
el15pjt | 2:329597081c06 | 142 | r_led = 1; |
el15pjt | 2:329597081c06 | 143 | g_led = 1; |
el15pjt | 2:329597081c06 | 144 | b_led = 1; |
el15pjt | 0:0b180348c7e4 | 145 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
el15pjt | 0:0b180348c7e4 | 146 | // resistors that are enabled by default using InterruptIn |
el15pjt | 2:329597081c06 | 147 | sw2.mode(PullNone); |
el15pjt | 5:083d484e95a1 | 148 | sw1.mode(PullNone); |
el15pjt | 3:8782b8b8658b | 149 | } |
el15pjt | 5:083d484e95a1 | 150 | |
el15pjt | 3:8782b8b8658b | 151 | void lcdoutput() |
el15pjt | 3:8782b8b8658b | 152 | { |
el15pjt | 3:8782b8b8658b | 153 | int length; |
el15pjt | 3:8782b8b8658b | 154 | int length1; |
el15pjt | 3:8782b8b8658b | 155 | char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 3:8782b8b8658b | 156 | char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 3:8782b8b8658b | 157 | |
el15pjt | 5:083d484e95a1 | 158 | if (alert == 0) { |
el15pjt | 5:083d484e95a1 | 159 | length1 = sprintf(buffer1,"**PATH CLEAR**",bright); |
el15pjt | 5:083d484e95a1 | 160 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 161 | } |
el15pjt | 3:8782b8b8658b | 162 | |
el15pjt | 5:083d484e95a1 | 163 | else { |
el15pjt | 5:083d484e95a1 | 164 | if (units == METRIC) { |
el15pjt | 5:083d484e95a1 | 165 | length = sprintf(buffer,"D = %i Cm",distance); |
el15pjt | 5:083d484e95a1 | 166 | length1 = sprintf(buffer1,"****RANGE!****"); |
el15pjt | 5:083d484e95a1 | 167 | } else { |
el15pjt | 5:083d484e95a1 | 168 | length = sprintf(buffer,"%i Inches",distance); |
el15pjt | 5:083d484e95a1 | 169 | length1 = sprintf(buffer1,"****RANGE!****"); |
el15pjt | 5:083d484e95a1 | 170 | } |
el15pjt | 5:083d484e95a1 | 171 | } |
el15pjt | 3:8782b8b8658b | 172 | |
el15pjt | 4:673930f04866 | 173 | if (length <= 14) { |
el15pjt | 5:083d484e95a1 | 174 | lcd.printString(buffer,0,1); |
el15pjt | 5:083d484e95a1 | 175 | lcd.printString(buffer1,0,0); |
el15pjt | 4:673930f04866 | 176 | } |
el15pjt | 3:8782b8b8658b | 177 | |
el15pjt | 3:8782b8b8658b | 178 | // draw a line across the display at y = 40 pixels (origin top-left) |
el15pjt | 3:8782b8b8658b | 179 | for (int i = 0; i < WIDTH; i++) { |
el15pjt | 3:8782b8b8658b | 180 | lcd.setPixel(i,45); |
el15pjt | 3:8782b8b8658b | 181 | } |
el15pjt | 3:8782b8b8658b | 182 | |
el15pjt | 3:8782b8b8658b | 183 | lcd.refresh(); // need to refresh display after setting pixels |
el15pjt | 3:8782b8b8658b | 184 | } |
el15pjt | 3:8782b8b8658b | 185 | |
el15pjt | 3:8782b8b8658b | 186 | void setalert() |
el15pjt | 3:8782b8b8658b | 187 | { |
el15pjt | 5:083d484e95a1 | 188 | if (distance >= r6 && distance < r7) { // r6 150 and r7 200 |
el15pjt | 3:8782b8b8658b | 189 | alert = 1; //flash green |
el15pjt | 5:083d484e95a1 | 190 | } else if (distance >= r5 && distance < r6) { // r5 90 and r6 150 |
el15pjt | 3:8782b8b8658b | 191 | alert = 2; //steady green |
el15pjt | 5:083d484e95a1 | 192 | } else if (distance >= r4 && distance < r5) { // r4 60 and r5 90 |
el15pjt | 3:8782b8b8658b | 193 | alert = 3; //flashing amber |
el15pjt | 5:083d484e95a1 | 194 | } else if (distance >= r3 && distance < r4) { // r3 40 and r4 60 |
el15pjt | 3:8782b8b8658b | 195 | alert = 4; //steady amber |
el15pjt | 5:083d484e95a1 | 196 | } else if ( distance > r2 && distance < r3) { // r2 20 and r3 40 |
el15pjt | 3:8782b8b8658b | 197 | alert = 5; //flashing red |
el15pjt | 5:083d484e95a1 | 198 | } else if (distance > 1 && distance <= r2) { //r1 3 and r2 20 |
el15pjt | 3:8782b8b8658b | 199 | alert = 6; //steady red |
el15pjt | 3:8782b8b8658b | 200 | } else if (distance <=1) { |
el15pjt | 3:8782b8b8658b | 201 | alert = 7; //all flashing |
el15pjt | 3:8782b8b8658b | 202 | } else { |
el15pjt | 3:8782b8b8658b | 203 | alert = 0; //no output |
el15pjt | 3:8782b8b8658b | 204 | } |
el15pjt | 2:329597081c06 | 205 | } |
el15pjt | 2:329597081c06 | 206 | |
el15pjt | 3:8782b8b8658b | 207 | void setleds() |
el15pjt | 3:8782b8b8658b | 208 | { |
el15pjt | 3:8782b8b8658b | 209 | // If statments to determin the output of each LED |
el15pjt | 5:083d484e95a1 | 210 | if (Alertlevel[alert].frr_led and Alertlevel[alert].fgg_led and Alertlevel[alert].fa_led == HIGH) { |
el15pjt | 5:083d484e95a1 | 211 | if (g_timer_flag_led) { |
el15pjt | 5:083d484e95a1 | 212 | g_timer_flag_led = 0; // if it has, clear the flag |
el15pjt | 3:8782b8b8658b | 213 | rr_led = !rr_led; |
el15pjt | 5:083d484e95a1 | 214 | gg_led = !gg_led; |
el15pjt | 5:083d484e95a1 | 215 | a_led = !a_led; |
el15pjt | 5:083d484e95a1 | 216 | } |
el15pjt | 5:083d484e95a1 | 217 | } else if(Alertlevel[alert].fa_led == HIGH) { |
el15pjt | 5:083d484e95a1 | 218 | if (g_timer_flag_led) { |
el15pjt | 5:083d484e95a1 | 219 | g_timer_flag_led = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 220 | a_led = !a_led; |
el15pjt | 5:083d484e95a1 | 221 | } |
el15pjt | 5:083d484e95a1 | 222 | } else if (Alertlevel[alert].frr_led == HIGH) { |
el15pjt | 5:083d484e95a1 | 223 | if (g_timer_flag_led) { |
el15pjt | 5:083d484e95a1 | 224 | g_timer_flag_led = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 225 | rr_led = !rr_led; |
el15pjt | 5:083d484e95a1 | 226 | } |
el15pjt | 5:083d484e95a1 | 227 | } else if(Alertlevel[alert].fgg_led == HIGH) { |
el15pjt | 5:083d484e95a1 | 228 | if (g_timer_flag_led) { |
el15pjt | 5:083d484e95a1 | 229 | g_timer_flag_led = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 230 | gg_led = !gg_led; |
el15pjt | 3:8782b8b8658b | 231 | } |
el15pjt | 3:8782b8b8658b | 232 | } else { |
el15pjt | 3:8782b8b8658b | 233 | rr_led = Alertlevel[alert].srr_led; |
el15pjt | 5:083d484e95a1 | 234 | a_led = Alertlevel[alert].sa_led; |
el15pjt | 5:083d484e95a1 | 235 | gg_led = Alertlevel[alert].sgg_led; |
el15pjt | 3:8782b8b8658b | 236 | } |
el15pjt | 3:8782b8b8658b | 237 | |
el15pjt | 5:083d484e95a1 | 238 | } |
el15pjt | 5:083d484e95a1 | 239 | /* |
el15pjt | 5:083d484e95a1 | 240 | void setbuzzer() |
el15pjt | 5:083d484e95a1 | 241 | { |
el15pjt | 5:083d484e95a1 | 242 | if (g_timer_flag_tone) { |
el15pjt | 5:083d484e95a1 | 243 | g_timer_flag_tone = 0; |
el15pjt | 5:083d484e95a1 | 244 | buzzer.period (1/1000); |
el15pjt | 5:083d484e95a1 | 245 | buzzer=0.5; |
el15pjt | 5:083d484e95a1 | 246 | buzzoff.attach(&nobuzz,Alertlevel[alert].toneon); |
el15pjt | 3:8782b8b8658b | 247 | } |
el15pjt | 5:083d484e95a1 | 248 | }*/ |
el15pjt | 3:8782b8b8658b | 249 | |
el15pjt | 5:083d484e95a1 | 250 | void nobuzz() |
el15pjt | 5:083d484e95a1 | 251 | { |
el15pjt | 5:083d484e95a1 | 252 | buzzer = 0.0; |
el15pjt | 3:8782b8b8658b | 253 | } |
el15pjt | 3:8782b8b8658b | 254 | |
el15pjt | 3:8782b8b8658b | 255 | void backlight () |
el15pjt | 3:8782b8b8658b | 256 | { |
el15pjt | 3:8782b8b8658b | 257 | |
el15pjt | 3:8782b8b8658b | 258 | if (bright == 1.0) { |
el15pjt | 3:8782b8b8658b | 259 | bright = 0; |
el15pjt | 3:8782b8b8658b | 260 | } else { |
el15pjt | 3:8782b8b8658b | 261 | bright += 0.2; |
el15pjt | 3:8782b8b8658b | 262 | } |
el15pjt | 3:8782b8b8658b | 263 | lcd.setBrightness(bright); |
el15pjt | 3:8782b8b8658b | 264 | } |
el15pjt | 3:8782b8b8658b | 265 | |
el15pjt | 5:083d484e95a1 | 266 | |
el15pjt | 5:083d484e95a1 | 267 | |
el15pjt | 5:083d484e95a1 | 268 | |
el15pjt | 3:8782b8b8658b | 269 | void sw2_isr() |
el15pjt | 3:8782b8b8658b | 270 | { |
el15pjt | 3:8782b8b8658b | 271 | g_sw2_flag = 1; // set flag in ISR |
el15pjt | 3:8782b8b8658b | 272 | } |
el15pjt | 3:8782b8b8658b | 273 | |
el15pjt | 5:083d484e95a1 | 274 | void sw1_isr() |
el15pjt | 3:8782b8b8658b | 275 | { |
el15pjt | 3:8782b8b8658b | 276 | g_sw1_flag = 1; // set flag in ISR |
el15pjt | 5:083d484e95a1 | 277 | } |
el15pjt | 3:8782b8b8658b | 278 | |
el15pjt | 5:083d484e95a1 | 279 | void timer_isr_led() |
el15pjt | 2:329597081c06 | 280 | { |
el15pjt | 5:083d484e95a1 | 281 | g_timer_flag_led = 1; // set flag in ISR |
el15pjt | 3:8782b8b8658b | 282 | } |
el15pjt | 3:8782b8b8658b | 283 | |
el15pjt | 3:8782b8b8658b | 284 | void timer_isr_srf02() |
el15pjt | 3:8782b8b8658b | 285 | { |
el15pjt | 3:8782b8b8658b | 286 | g_timer_flag_srf02 = 1; // set flag in ISR |
el15pjt | 4:673930f04866 | 287 | } |
el15pjt | 4:673930f04866 | 288 | |
el15pjt | 4:673930f04866 | 289 | void timer_isr_tone() |
el15pjt | 4:673930f04866 | 290 | { |
el15pjt | 4:673930f04866 | 291 | g_timer_flag_tone = 1; |
el15pjt | 4:673930f04866 | 292 | } |
el15pjt | 4:673930f04866 | 293 | |
el15pjt | 5:083d484e95a1 | 294 | void menu() |
el15pjt | 4:673930f04866 | 295 | { |
el15pjt | 5:083d484e95a1 | 296 | int length2; |
el15pjt | 5:083d484e95a1 | 297 | int length1; |
el15pjt | 5:083d484e95a1 | 298 | int length3; |
el15pjt | 5:083d484e95a1 | 299 | int length4; |
el15pjt | 5:083d484e95a1 | 300 | char buffer2[14]; |
el15pjt | 5:083d484e95a1 | 301 | char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 5:083d484e95a1 | 302 | char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 5:083d484e95a1 | 303 | char buffer4[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 |
el15pjt | 5:083d484e95a1 | 304 | while(1) { |
el15pjt | 5:083d484e95a1 | 305 | if (g_sw1_flag) { |
el15pjt | 5:083d484e95a1 | 306 | g_sw1_flag = 0; |
el15pjt | 5:083d484e95a1 | 307 | page++; |
el15pjt | 5:083d484e95a1 | 308 | } |
el15pjt | 5:083d484e95a1 | 309 | |
el15pjt | 5:083d484e95a1 | 310 | switch (page) { |
el15pjt | 5:083d484e95a1 | 311 | case 0: |
el15pjt | 5:083d484e95a1 | 312 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 313 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 314 | backlight(); |
el15pjt | 5:083d484e95a1 | 315 | } |
el15pjt | 5:083d484e95a1 | 316 | lcd.clear(); |
el15pjt | 5:083d484e95a1 | 317 | |
el15pjt | 5:083d484e95a1 | 318 | length2 = sprintf(buffer2,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 319 | length1 = sprintf(buffer1,"BACKLIGHT"); |
el15pjt | 5:083d484e95a1 | 320 | length3 = sprintf(buffer3,"%f.0",bright); |
el15pjt | 5:083d484e95a1 | 321 | if (length2 <= 14) { |
el15pjt | 5:083d484e95a1 | 322 | lcd.printString(buffer2,0,0); |
el15pjt | 5:083d484e95a1 | 323 | lcd.printString(buffer1,0,1); |
el15pjt | 5:083d484e95a1 | 324 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 325 | } |
el15pjt | 5:083d484e95a1 | 326 | lcd.refresh(); // need to refresh display after setting pixels |
el15pjt | 5:083d484e95a1 | 327 | break; |
el15pjt | 5:083d484e95a1 | 328 | |
el15pjt | 5:083d484e95a1 | 329 | case 1: |
el15pjt | 5:083d484e95a1 | 330 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 331 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 332 | if (offset == 20) { |
el15pjt | 5:083d484e95a1 | 333 | offset = 0; |
el15pjt | 5:083d484e95a1 | 334 | } else { |
el15pjt | 5:083d484e95a1 | 335 | offset += 1; |
el15pjt | 5:083d484e95a1 | 336 | } |
el15pjt | 5:083d484e95a1 | 337 | } |
el15pjt | 5:083d484e95a1 | 338 | lcd.clear(); |
el15pjt | 5:083d484e95a1 | 339 | length2 = sprintf(buffer2,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 340 | length1 = sprintf(buffer1,"OFFSET"); |
el15pjt | 5:083d484e95a1 | 341 | length3 = sprintf(buffer3,"%i",offset); |
el15pjt | 5:083d484e95a1 | 342 | if (length2 <= 14) { |
el15pjt | 5:083d484e95a1 | 343 | lcd.printString(buffer2,0,0); |
el15pjt | 5:083d484e95a1 | 344 | lcd.printString(buffer1,0,1); |
el15pjt | 5:083d484e95a1 | 345 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 346 | } |
el15pjt | 5:083d484e95a1 | 347 | lcd.refresh(); // need to refresh display after setting pixel |
el15pjt | 5:083d484e95a1 | 348 | break; |
el15pjt | 5:083d484e95a1 | 349 | |
el15pjt | 5:083d484e95a1 | 350 | case 2: |
el15pjt | 5:083d484e95a1 | 351 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 352 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 353 | if (units == METRIC) { |
el15pjt | 5:083d484e95a1 | 354 | units = IMPERIAL; |
el15pjt | 5:083d484e95a1 | 355 | } else { |
el15pjt | 5:083d484e95a1 | 356 | units = METRIC; |
el15pjt | 5:083d484e95a1 | 357 | } |
el15pjt | 5:083d484e95a1 | 358 | } |
el15pjt | 5:083d484e95a1 | 359 | lcd.clear(); |
el15pjt | 5:083d484e95a1 | 360 | if (units == METRIC) { |
el15pjt | 5:083d484e95a1 | 361 | length3 = sprintf(buffer3,"METRIC"); |
el15pjt | 5:083d484e95a1 | 362 | } else { |
el15pjt | 5:083d484e95a1 | 363 | length3 = sprintf(buffer3,"IMPERIAL"); |
el15pjt | 5:083d484e95a1 | 364 | } |
el15pjt | 5:083d484e95a1 | 365 | |
el15pjt | 5:083d484e95a1 | 366 | length2 = sprintf(buffer2,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 367 | length1 = sprintf(buffer1,"UNITS"); |
el15pjt | 5:083d484e95a1 | 368 | //length3 = sprintf(buffer3,"%i",units); |
el15pjt | 5:083d484e95a1 | 369 | if (length2 <= 14) { |
el15pjt | 5:083d484e95a1 | 370 | lcd.printString(buffer2,0,0); |
el15pjt | 5:083d484e95a1 | 371 | lcd.printString(buffer1,0,1); |
el15pjt | 5:083d484e95a1 | 372 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 373 | } |
el15pjt | 5:083d484e95a1 | 374 | lcd.refresh(); // need to refresh display after setting pixel |
el15pjt | 5:083d484e95a1 | 375 | break; |
el15pjt | 5:083d484e95a1 | 376 | |
el15pjt | 5:083d484e95a1 | 377 | case 3: |
el15pjt | 5:083d484e95a1 | 378 | |
el15pjt | 5:083d484e95a1 | 379 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 380 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 381 | submenu(); |
el15pjt | 5:083d484e95a1 | 382 | } |
el15pjt | 5:083d484e95a1 | 383 | length2 = sprintf(buffer3,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 384 | length3 = sprintf(buffer1,"RANGE"); |
el15pjt | 5:083d484e95a1 | 385 | length3 = sprintf(buffer2,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 386 | lcd.printString(buffer3,0,0); |
el15pjt | 5:083d484e95a1 | 387 | lcd.printString(buffer1,0,1); |
el15pjt | 5:083d484e95a1 | 388 | lcd.printString(buffer2,0,2); |
el15pjt | 5:083d484e95a1 | 389 | break; |
el15pjt | 5:083d484e95a1 | 390 | |
el15pjt | 5:083d484e95a1 | 391 | default: |
el15pjt | 5:083d484e95a1 | 392 | lcd.clear(); |
el15pjt | 5:083d484e95a1 | 393 | return; |
el15pjt | 5:083d484e95a1 | 394 | } |
el15pjt | 4:673930f04866 | 395 | } |
el15pjt | 4:673930f04866 | 396 | |
el15pjt | 5:083d484e95a1 | 397 | } |
el15pjt | 5:083d484e95a1 | 398 | void submenu() |
el15pjt | 5:083d484e95a1 | 399 | { |
el15pjt | 5:083d484e95a1 | 400 | int length2; |
el15pjt | 5:083d484e95a1 | 401 | int length1; |
el15pjt | 5:083d484e95a1 | 402 | int length3; |
el15pjt | 5:083d484e95a1 | 403 | int length4; |
el15pjt | 5:083d484e95a1 | 404 | char buffer2[14]; |
el15pjt | 5:083d484e95a1 | 405 | char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 5:083d484e95a1 | 406 | char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) |
el15pjt | 5:083d484e95a1 | 407 | char buffer4[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14 |
el15pjt | 5:083d484e95a1 | 408 | while(1) { |
el15pjt | 5:083d484e95a1 | 409 | if (g_sw1_flag) { |
el15pjt | 5:083d484e95a1 | 410 | g_sw1_flag = 0; |
el15pjt | 5:083d484e95a1 | 411 | subpage++; |
el15pjt | 5:083d484e95a1 | 412 | } |
el15pjt | 5:083d484e95a1 | 413 | switch (subpage) { |
el15pjt | 5:083d484e95a1 | 414 | case 0: |
el15pjt | 5:083d484e95a1 | 415 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 416 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 417 | if (r2 == r3) { |
el15pjt | 5:083d484e95a1 | 418 | r2 = 1; |
el15pjt | 5:083d484e95a1 | 419 | } else { |
el15pjt | 5:083d484e95a1 | 420 | r2 = r2+1; |
el15pjt | 5:083d484e95a1 | 421 | } |
el15pjt | 5:083d484e95a1 | 422 | } |
el15pjt | 5:083d484e95a1 | 423 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 424 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 425 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 426 | length4 = sprintf(buffer4,"1Cm to %iCm",r2); |
el15pjt | 5:083d484e95a1 | 427 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 428 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 429 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 430 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 431 | break; |
el15pjt | 5:083d484e95a1 | 432 | |
el15pjt | 5:083d484e95a1 | 433 | case 1: |
el15pjt | 5:083d484e95a1 | 434 | |
el15pjt | 5:083d484e95a1 | 435 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 436 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 437 | if (r3 == r4) { |
el15pjt | 5:083d484e95a1 | 438 | r3 = r2; |
el15pjt | 5:083d484e95a1 | 439 | } else { |
el15pjt | 5:083d484e95a1 | 440 | r3 += 1; |
el15pjt | 5:083d484e95a1 | 441 | } |
el15pjt | 5:083d484e95a1 | 442 | } |
el15pjt | 5:083d484e95a1 | 443 | |
el15pjt | 5:083d484e95a1 | 444 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 445 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 446 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 447 | length3 = sprintf(buffer4,"%iCm to %iCm",r2,r3); |
el15pjt | 5:083d484e95a1 | 448 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 449 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 450 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 451 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 452 | break; |
el15pjt | 5:083d484e95a1 | 453 | |
el15pjt | 5:083d484e95a1 | 454 | case 2: |
el15pjt | 5:083d484e95a1 | 455 | |
el15pjt | 5:083d484e95a1 | 456 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 457 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 458 | if (r4 == r5) { |
el15pjt | 5:083d484e95a1 | 459 | r4 = r3; |
el15pjt | 5:083d484e95a1 | 460 | } else { |
el15pjt | 5:083d484e95a1 | 461 | r4 += 1; |
el15pjt | 5:083d484e95a1 | 462 | } |
el15pjt | 5:083d484e95a1 | 463 | } |
el15pjt | 5:083d484e95a1 | 464 | |
el15pjt | 5:083d484e95a1 | 465 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 466 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 467 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 468 | length3 = sprintf(buffer4,"%iCm to %iCm",r3,r4); |
el15pjt | 5:083d484e95a1 | 469 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 470 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 471 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 472 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 473 | break; |
el15pjt | 5:083d484e95a1 | 474 | |
el15pjt | 5:083d484e95a1 | 475 | case 3: |
el15pjt | 5:083d484e95a1 | 476 | |
el15pjt | 5:083d484e95a1 | 477 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 478 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 479 | if (r5 == r6) { |
el15pjt | 5:083d484e95a1 | 480 | r5 = r4; |
el15pjt | 5:083d484e95a1 | 481 | } else { |
el15pjt | 5:083d484e95a1 | 482 | r5 += 1; |
el15pjt | 5:083d484e95a1 | 483 | } |
el15pjt | 5:083d484e95a1 | 484 | } |
el15pjt | 5:083d484e95a1 | 485 | |
el15pjt | 5:083d484e95a1 | 486 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 487 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 488 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 489 | length3 = sprintf(buffer4,"%iCm to %iCm",r4,r5); |
el15pjt | 5:083d484e95a1 | 490 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 491 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 492 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 493 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 494 | break; |
el15pjt | 5:083d484e95a1 | 495 | case 4: |
el15pjt | 5:083d484e95a1 | 496 | |
el15pjt | 5:083d484e95a1 | 497 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 498 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 499 | if (r6 == r7) { |
el15pjt | 5:083d484e95a1 | 500 | r6 = r5; |
el15pjt | 5:083d484e95a1 | 501 | } else { |
el15pjt | 5:083d484e95a1 | 502 | r6 += 1; |
el15pjt | 5:083d484e95a1 | 503 | } |
el15pjt | 5:083d484e95a1 | 504 | } |
el15pjt | 5:083d484e95a1 | 505 | |
el15pjt | 5:083d484e95a1 | 506 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 507 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 508 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 509 | length3 = sprintf(buffer4,"%iCm to %iCm",r5,r6); |
el15pjt | 5:083d484e95a1 | 510 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 511 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 512 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 513 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 514 | break; |
el15pjt | 5:083d484e95a1 | 515 | case 5: |
el15pjt | 5:083d484e95a1 | 516 | |
el15pjt | 5:083d484e95a1 | 517 | if (g_sw2_flag) { |
el15pjt | 5:083d484e95a1 | 518 | g_sw2_flag = 0; // if it has, clear the flag |
el15pjt | 5:083d484e95a1 | 519 | if (r7 == 300) { |
el15pjt | 5:083d484e95a1 | 520 | r7 = r6; |
el15pjt | 5:083d484e95a1 | 521 | } else { |
el15pjt | 5:083d484e95a1 | 522 | r7 += 1; |
el15pjt | 5:083d484e95a1 | 523 | } |
el15pjt | 5:083d484e95a1 | 524 | } |
el15pjt | 5:083d484e95a1 | 525 | |
el15pjt | 5:083d484e95a1 | 526 | length2 = sprintf(buffer1,"*****MENU*****"); |
el15pjt | 5:083d484e95a1 | 527 | length3 = sprintf(buffer2,"RANGE"); |
el15pjt | 5:083d484e95a1 | 528 | length3 = sprintf(buffer3,"PARAMETERS"); |
el15pjt | 5:083d484e95a1 | 529 | length3 = sprintf(buffer4,"%iCm to %iCm",r6,r7); |
el15pjt | 5:083d484e95a1 | 530 | lcd.printString(buffer1,0,0); |
el15pjt | 5:083d484e95a1 | 531 | lcd.printString(buffer2,0,1); |
el15pjt | 5:083d484e95a1 | 532 | lcd.printString(buffer3,0,2); |
el15pjt | 5:083d484e95a1 | 533 | lcd.printString(buffer4,0,3); |
el15pjt | 5:083d484e95a1 | 534 | break; |
el15pjt | 5:083d484e95a1 | 535 | |
el15pjt | 5:083d484e95a1 | 536 | default: |
el15pjt | 5:083d484e95a1 | 537 | lcd.clear(); |
el15pjt | 5:083d484e95a1 | 538 | return; |
el15pjt | 5:083d484e95a1 | 539 | } |
el15pjt | 5:083d484e95a1 | 540 | } |
el15pjt | 5:083d484e95a1 | 541 | } |