Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

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?

UserRevisionLine numberNew 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 }