Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

Committer:
el15pjt
Date:
Fri Apr 15 17:23:17 2016 +0000
Revision:
6:b464a8a94d91
Parent:
5:083d484e95a1
Child:
7:14cfb0df30e6
Distance bar completed.

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 6:b464a8a94d91 52 int r5 = 80;
el15pjt 6:b464a8a94d91 53 int r6 = 100;
el15pjt 6:b464a8a94d91 54 int r7 = 120;
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 6:b464a8a94d91 118 lcd.clear();
el15pjt 5:083d484e95a1 119 menu();
el15pjt 2:329597081c06 120 }
el15pjt 5:083d484e95a1 121
el15pjt 3:8782b8b8658b 122 if (g_timer_flag_srf02) {
el15pjt 3:8782b8b8658b 123 g_timer_flag_srf02 = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 124 if (units == METRIC) {
el15pjt 5:083d484e95a1 125 distance = srf02.getDistanceCm();
el15pjt 5:083d484e95a1 126 } else {
el15pjt 5:083d484e95a1 127 distance = srf02.getDistannceInch();
el15pjt 5:083d484e95a1 128 }
el15pjt 5:083d484e95a1 129 distance = distance-offset;
el15pjt 0:0b180348c7e4 130 }
el15pjt 5:083d484e95a1 131 setalert();
el15pjt 3:8782b8b8658b 132 lcdoutput();
el15pjt 5:083d484e95a1 133 // setbuzzer();
el15pjt 3:8782b8b8658b 134 setleds();
el15pjt 4:673930f04866 135 sleep();
el15pjt 0:0b180348c7e4 136 }
el15pjt 0:0b180348c7e4 137 }
el15pjt 0:0b180348c7e4 138
el15pjt 0:0b180348c7e4 139 //Set up board switches and LEDS
el15pjt 2:329597081c06 140 void init_K64F()
el15pjt 2:329597081c06 141 {
el15pjt 0:0b180348c7e4 142 //on-board LEDs are active-low, so set pin high to turn them off.
el15pjt 2:329597081c06 143 r_led = 1;
el15pjt 2:329597081c06 144 g_led = 1;
el15pjt 2:329597081c06 145 b_led = 1;
el15pjt 0:0b180348c7e4 146 // since the on-board switches have external pull-ups, we should disable the internal pull-down
el15pjt 0:0b180348c7e4 147 // resistors that are enabled by default using InterruptIn
el15pjt 2:329597081c06 148 sw2.mode(PullNone);
el15pjt 5:083d484e95a1 149 sw1.mode(PullNone);
el15pjt 3:8782b8b8658b 150 }
el15pjt 5:083d484e95a1 151
el15pjt 3:8782b8b8658b 152 void lcdoutput()
el15pjt 3:8782b8b8658b 153 {
el15pjt 3:8782b8b8658b 154 int length;
el15pjt 3:8782b8b8658b 155 int length1;
el15pjt 3:8782b8b8658b 156 char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 3:8782b8b8658b 157 char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 6:b464a8a94d91 158 int length2;
el15pjt 6:b464a8a94d91 159 char buffer2[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 6:b464a8a94d91 160 int length3;
el15pjt 6:b464a8a94d91 161 char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 6:b464a8a94d91 162 if (alert == 0) {
el15pjt 6:b464a8a94d91 163 lcd.clear();
el15pjt 3:8782b8b8658b 164
el15pjt 5:083d484e95a1 165 length1 = sprintf(buffer1,"**PATH CLEAR**",bright);
el15pjt 5:083d484e95a1 166 lcd.printString(buffer1,0,0);
el15pjt 6:b464a8a94d91 167 lcd.refresh();
el15pjt 6:b464a8a94d91 168
el15pjt 5:083d484e95a1 169 }
el15pjt 3:8782b8b8658b 170
el15pjt 5:083d484e95a1 171 else {
el15pjt 6:b464a8a94d91 172 lcd.clear();
el15pjt 5:083d484e95a1 173 if (units == METRIC) {
el15pjt 6:b464a8a94d91 174 length = sprintf(buffer,"%i Cm",distance);
el15pjt 5:083d484e95a1 175 length1 = sprintf(buffer1,"****RANGE!****");
el15pjt 6:b464a8a94d91 176 length2 = sprintf(buffer2,"***DISTANCE***");
el15pjt 6:b464a8a94d91 177 length3 = sprintf(buffer3,"Alert = %i",alert);
el15pjt 5:083d484e95a1 178 } else {
el15pjt 5:083d484e95a1 179 length = sprintf(buffer,"%i Inches",distance);
el15pjt 5:083d484e95a1 180 length1 = sprintf(buffer1,"****RANGE!****");
el15pjt 6:b464a8a94d91 181 length2 = sprintf(buffer2,"***DISTANCE***");
el15pjt 5:083d484e95a1 182 }
el15pjt 6:b464a8a94d91 183 lcd.printString(buffer,20,3);
el15pjt 6:b464a8a94d91 184 lcd.printString(buffer1,0,0);
el15pjt 6:b464a8a94d91 185 lcd.printString(buffer2,0,1);
el15pjt 6:b464a8a94d91 186 lcd.printString(buffer3,0,2);
el15pjt 6:b464a8a94d91 187 float i = r7/84;
el15pjt 6:b464a8a94d91 188 float distbar = distance*i;
el15pjt 6:b464a8a94d91 189 //drawRect(int x0,int y0,int width,int height,int fill);
el15pjt 6:b464a8a94d91 190 lcd.drawRect(0,38,distbar,7,1);
el15pjt 6:b464a8a94d91 191 lcd.refresh();
el15pjt 6:b464a8a94d91 192
el15pjt 5:083d484e95a1 193 }
el15pjt 3:8782b8b8658b 194
el15pjt 3:8782b8b8658b 195 }
el15pjt 3:8782b8b8658b 196
el15pjt 3:8782b8b8658b 197 void setalert()
el15pjt 3:8782b8b8658b 198 {
el15pjt 5:083d484e95a1 199 if (distance >= r6 && distance < r7) { // r6 150 and r7 200
el15pjt 3:8782b8b8658b 200 alert = 1; //flash green
el15pjt 5:083d484e95a1 201 } else if (distance >= r5 && distance < r6) { // r5 90 and r6 150
el15pjt 3:8782b8b8658b 202 alert = 2; //steady green
el15pjt 5:083d484e95a1 203 } else if (distance >= r4 && distance < r5) { // r4 60 and r5 90
el15pjt 3:8782b8b8658b 204 alert = 3; //flashing amber
el15pjt 5:083d484e95a1 205 } else if (distance >= r3 && distance < r4) { // r3 40 and r4 60
el15pjt 3:8782b8b8658b 206 alert = 4; //steady amber
el15pjt 5:083d484e95a1 207 } else if ( distance > r2 && distance < r3) { // r2 20 and r3 40
el15pjt 3:8782b8b8658b 208 alert = 5; //flashing red
el15pjt 5:083d484e95a1 209 } else if (distance > 1 && distance <= r2) { //r1 3 and r2 20
el15pjt 3:8782b8b8658b 210 alert = 6; //steady red
el15pjt 3:8782b8b8658b 211 } else if (distance <=1) {
el15pjt 3:8782b8b8658b 212 alert = 7; //all flashing
el15pjt 3:8782b8b8658b 213 } else {
el15pjt 3:8782b8b8658b 214 alert = 0; //no output
el15pjt 3:8782b8b8658b 215 }
el15pjt 2:329597081c06 216 }
el15pjt 2:329597081c06 217
el15pjt 3:8782b8b8658b 218 void setleds()
el15pjt 3:8782b8b8658b 219 {
el15pjt 3:8782b8b8658b 220 // If statments to determin the output of each LED
el15pjt 5:083d484e95a1 221 if (Alertlevel[alert].frr_led and Alertlevel[alert].fgg_led and Alertlevel[alert].fa_led == HIGH) {
el15pjt 5:083d484e95a1 222 if (g_timer_flag_led) {
el15pjt 5:083d484e95a1 223 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 3:8782b8b8658b 224 rr_led = !rr_led;
el15pjt 5:083d484e95a1 225 gg_led = !gg_led;
el15pjt 5:083d484e95a1 226 a_led = !a_led;
el15pjt 5:083d484e95a1 227 }
el15pjt 5:083d484e95a1 228 } else if(Alertlevel[alert].fa_led == HIGH) {
el15pjt 5:083d484e95a1 229 if (g_timer_flag_led) {
el15pjt 5:083d484e95a1 230 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 231 a_led = !a_led;
el15pjt 5:083d484e95a1 232 }
el15pjt 5:083d484e95a1 233 } else if (Alertlevel[alert].frr_led == HIGH) {
el15pjt 5:083d484e95a1 234 if (g_timer_flag_led) {
el15pjt 5:083d484e95a1 235 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 236 rr_led = !rr_led;
el15pjt 5:083d484e95a1 237 }
el15pjt 5:083d484e95a1 238 } else if(Alertlevel[alert].fgg_led == HIGH) {
el15pjt 5:083d484e95a1 239 if (g_timer_flag_led) {
el15pjt 5:083d484e95a1 240 g_timer_flag_led = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 241 gg_led = !gg_led;
el15pjt 3:8782b8b8658b 242 }
el15pjt 3:8782b8b8658b 243 } else {
el15pjt 3:8782b8b8658b 244 rr_led = Alertlevel[alert].srr_led;
el15pjt 5:083d484e95a1 245 a_led = Alertlevel[alert].sa_led;
el15pjt 5:083d484e95a1 246 gg_led = Alertlevel[alert].sgg_led;
el15pjt 3:8782b8b8658b 247 }
el15pjt 3:8782b8b8658b 248
el15pjt 5:083d484e95a1 249 }
el15pjt 5:083d484e95a1 250 /*
el15pjt 5:083d484e95a1 251 void setbuzzer()
el15pjt 5:083d484e95a1 252 {
el15pjt 5:083d484e95a1 253 if (g_timer_flag_tone) {
el15pjt 5:083d484e95a1 254 g_timer_flag_tone = 0;
el15pjt 5:083d484e95a1 255 buzzer.period (1/1000);
el15pjt 5:083d484e95a1 256 buzzer=0.5;
el15pjt 5:083d484e95a1 257 buzzoff.attach(&nobuzz,Alertlevel[alert].toneon);
el15pjt 3:8782b8b8658b 258 }
el15pjt 5:083d484e95a1 259 }*/
el15pjt 3:8782b8b8658b 260
el15pjt 5:083d484e95a1 261 void nobuzz()
el15pjt 5:083d484e95a1 262 {
el15pjt 5:083d484e95a1 263 buzzer = 0.0;
el15pjt 3:8782b8b8658b 264 }
el15pjt 3:8782b8b8658b 265
el15pjt 3:8782b8b8658b 266 void backlight ()
el15pjt 3:8782b8b8658b 267 {
el15pjt 3:8782b8b8658b 268
el15pjt 3:8782b8b8658b 269 if (bright == 1.0) {
el15pjt 3:8782b8b8658b 270 bright = 0;
el15pjt 3:8782b8b8658b 271 } else {
el15pjt 3:8782b8b8658b 272 bright += 0.2;
el15pjt 3:8782b8b8658b 273 }
el15pjt 3:8782b8b8658b 274 lcd.setBrightness(bright);
el15pjt 3:8782b8b8658b 275 }
el15pjt 3:8782b8b8658b 276
el15pjt 5:083d484e95a1 277
el15pjt 5:083d484e95a1 278
el15pjt 5:083d484e95a1 279
el15pjt 3:8782b8b8658b 280 void sw2_isr()
el15pjt 3:8782b8b8658b 281 {
el15pjt 3:8782b8b8658b 282 g_sw2_flag = 1; // set flag in ISR
el15pjt 3:8782b8b8658b 283 }
el15pjt 3:8782b8b8658b 284
el15pjt 5:083d484e95a1 285 void sw1_isr()
el15pjt 3:8782b8b8658b 286 {
el15pjt 3:8782b8b8658b 287 g_sw1_flag = 1; // set flag in ISR
el15pjt 5:083d484e95a1 288 }
el15pjt 3:8782b8b8658b 289
el15pjt 5:083d484e95a1 290 void timer_isr_led()
el15pjt 2:329597081c06 291 {
el15pjt 5:083d484e95a1 292 g_timer_flag_led = 1; // set flag in ISR
el15pjt 3:8782b8b8658b 293 }
el15pjt 3:8782b8b8658b 294
el15pjt 3:8782b8b8658b 295 void timer_isr_srf02()
el15pjt 3:8782b8b8658b 296 {
el15pjt 3:8782b8b8658b 297 g_timer_flag_srf02 = 1; // set flag in ISR
el15pjt 4:673930f04866 298 }
el15pjt 4:673930f04866 299
el15pjt 4:673930f04866 300 void timer_isr_tone()
el15pjt 4:673930f04866 301 {
el15pjt 4:673930f04866 302 g_timer_flag_tone = 1;
el15pjt 4:673930f04866 303 }
el15pjt 4:673930f04866 304
el15pjt 5:083d484e95a1 305 void menu()
el15pjt 4:673930f04866 306 {
el15pjt 5:083d484e95a1 307 int length2;
el15pjt 5:083d484e95a1 308 int length1;
el15pjt 5:083d484e95a1 309 int length3;
el15pjt 5:083d484e95a1 310 int length4;
el15pjt 5:083d484e95a1 311 char buffer2[14];
el15pjt 5:083d484e95a1 312 char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 5:083d484e95a1 313 char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 5:083d484e95a1 314 char buffer4[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14
el15pjt 6:b464a8a94d91 315
el15pjt 5:083d484e95a1 316 while(1) {
el15pjt 6:b464a8a94d91 317
el15pjt 6:b464a8a94d91 318
el15pjt 5:083d484e95a1 319 if (g_sw1_flag) {
el15pjt 5:083d484e95a1 320 g_sw1_flag = 0;
el15pjt 5:083d484e95a1 321 page++;
el15pjt 6:b464a8a94d91 322 lcd.clear();
el15pjt 5:083d484e95a1 323 }
el15pjt 5:083d484e95a1 324 switch (page) {
el15pjt 5:083d484e95a1 325 case 0:
el15pjt 5:083d484e95a1 326 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 327 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 328 backlight();
el15pjt 6:b464a8a94d91 329 lcd.clear();
el15pjt 6:b464a8a94d91 330 } else {
el15pjt 6:b464a8a94d91 331 int lightbar = bright*84;
el15pjt 6:b464a8a94d91 332 length2 = sprintf(buffer2,"*****MENU*****");
el15pjt 6:b464a8a94d91 333 length1 = sprintf(buffer1,"BACKLIGHT");
el15pjt 6:b464a8a94d91 334 length3 = sprintf(buffer3,"%.0f%%",bright*100);
el15pjt 5:083d484e95a1 335 lcd.printString(buffer2,0,0);
el15pjt 5:083d484e95a1 336 lcd.printString(buffer1,0,1);
el15pjt 5:083d484e95a1 337 lcd.printString(buffer3,0,2);
el15pjt 6:b464a8a94d91 338 lcd.drawRect(0,38,lightbar,7,1);
el15pjt 6:b464a8a94d91 339 lcd.refresh();
el15pjt 6:b464a8a94d91 340
el15pjt 5:083d484e95a1 341 }
el15pjt 5:083d484e95a1 342 break;
el15pjt 5:083d484e95a1 343
el15pjt 5:083d484e95a1 344 case 1:
el15pjt 5:083d484e95a1 345 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 346 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 347 if (offset == 20) {
el15pjt 5:083d484e95a1 348 offset = 0;
el15pjt 5:083d484e95a1 349 } else {
el15pjt 5:083d484e95a1 350 offset += 1;
el15pjt 5:083d484e95a1 351 }
el15pjt 6:b464a8a94d91 352 } else {
el15pjt 6:b464a8a94d91 353 length2 = sprintf(buffer2,"*****MENU*****");
el15pjt 6:b464a8a94d91 354 length1 = sprintf(buffer1,"OFFSET");
el15pjt 6:b464a8a94d91 355 length3 = sprintf(buffer3,"%i",offset);
el15pjt 5:083d484e95a1 356 lcd.printString(buffer2,0,0);
el15pjt 5:083d484e95a1 357 lcd.printString(buffer1,0,1);
el15pjt 5:083d484e95a1 358 lcd.printString(buffer3,0,2);
el15pjt 6:b464a8a94d91 359 lcd.refresh();
el15pjt 5:083d484e95a1 360 }
el15pjt 6:b464a8a94d91 361
el15pjt 5:083d484e95a1 362 break;
el15pjt 5:083d484e95a1 363
el15pjt 5:083d484e95a1 364 case 2:
el15pjt 5:083d484e95a1 365 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 366 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 367 if (units == METRIC) {
el15pjt 5:083d484e95a1 368 units = IMPERIAL;
el15pjt 5:083d484e95a1 369 } else {
el15pjt 5:083d484e95a1 370 units = METRIC;
el15pjt 5:083d484e95a1 371 }
el15pjt 5:083d484e95a1 372 }
el15pjt 5:083d484e95a1 373 if (units == METRIC) {
el15pjt 5:083d484e95a1 374 length3 = sprintf(buffer3,"METRIC");
el15pjt 5:083d484e95a1 375 } else {
el15pjt 5:083d484e95a1 376 length3 = sprintf(buffer3,"IMPERIAL");
el15pjt 5:083d484e95a1 377 }
el15pjt 5:083d484e95a1 378
el15pjt 5:083d484e95a1 379 length2 = sprintf(buffer2,"*****MENU*****");
el15pjt 5:083d484e95a1 380 length1 = sprintf(buffer1,"UNITS");
el15pjt 6:b464a8a94d91 381 lcd.printString(buffer2,0,0);
el15pjt 6:b464a8a94d91 382 lcd.printString(buffer1,0,1);
el15pjt 6:b464a8a94d91 383 lcd.printString(buffer3,0,2);
el15pjt 6:b464a8a94d91 384
el15pjt 6:b464a8a94d91 385
el15pjt 5:083d484e95a1 386 break;
el15pjt 5:083d484e95a1 387
el15pjt 5:083d484e95a1 388 case 3:
el15pjt 5:083d484e95a1 389
el15pjt 5:083d484e95a1 390 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 391 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 392 submenu();
el15pjt 5:083d484e95a1 393 }
el15pjt 5:083d484e95a1 394 length2 = sprintf(buffer3,"*****MENU*****");
el15pjt 5:083d484e95a1 395 length3 = sprintf(buffer1,"RANGE");
el15pjt 5:083d484e95a1 396 length3 = sprintf(buffer2,"PARAMETERS");
el15pjt 5:083d484e95a1 397 lcd.printString(buffer3,0,0);
el15pjt 5:083d484e95a1 398 lcd.printString(buffer1,0,1);
el15pjt 5:083d484e95a1 399 lcd.printString(buffer2,0,2);
el15pjt 6:b464a8a94d91 400
el15pjt 6:b464a8a94d91 401
el15pjt 5:083d484e95a1 402 break;
el15pjt 5:083d484e95a1 403
el15pjt 5:083d484e95a1 404 default:
el15pjt 5:083d484e95a1 405 lcd.clear();
el15pjt 5:083d484e95a1 406 return;
el15pjt 5:083d484e95a1 407 }
el15pjt 4:673930f04866 408 }
el15pjt 6:b464a8a94d91 409 lcd.refresh();
el15pjt 5:083d484e95a1 410 }
el15pjt 5:083d484e95a1 411 void submenu()
el15pjt 5:083d484e95a1 412 {
el15pjt 5:083d484e95a1 413 int length2;
el15pjt 5:083d484e95a1 414 int length1;
el15pjt 5:083d484e95a1 415 int length3;
el15pjt 5:083d484e95a1 416 int length4;
el15pjt 5:083d484e95a1 417 char buffer2[14];
el15pjt 5:083d484e95a1 418 char buffer3[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 5:083d484e95a1 419 char buffer1[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
el15pjt 5:083d484e95a1 420 char buffer4[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14
el15pjt 5:083d484e95a1 421 while(1) {
el15pjt 5:083d484e95a1 422 if (g_sw1_flag) {
el15pjt 5:083d484e95a1 423 g_sw1_flag = 0;
el15pjt 5:083d484e95a1 424 subpage++;
el15pjt 5:083d484e95a1 425 }
el15pjt 5:083d484e95a1 426 switch (subpage) {
el15pjt 5:083d484e95a1 427 case 0:
el15pjt 5:083d484e95a1 428 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 429 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 430 if (r2 == r3) {
el15pjt 5:083d484e95a1 431 r2 = 1;
el15pjt 5:083d484e95a1 432 } else {
el15pjt 5:083d484e95a1 433 r2 = r2+1;
el15pjt 5:083d484e95a1 434 }
el15pjt 5:083d484e95a1 435 }
el15pjt 5:083d484e95a1 436 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 437 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 438 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 5:083d484e95a1 439 length4 = sprintf(buffer4,"1Cm to %iCm",r2);
el15pjt 5:083d484e95a1 440 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 441 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 442 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 443 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 444 break;
el15pjt 5:083d484e95a1 445
el15pjt 5:083d484e95a1 446 case 1:
el15pjt 5:083d484e95a1 447
el15pjt 5:083d484e95a1 448 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 449 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 450 if (r3 == r4) {
el15pjt 5:083d484e95a1 451 r3 = r2;
el15pjt 5:083d484e95a1 452 } else {
el15pjt 5:083d484e95a1 453 r3 += 1;
el15pjt 5:083d484e95a1 454 }
el15pjt 5:083d484e95a1 455 }
el15pjt 5:083d484e95a1 456
el15pjt 5:083d484e95a1 457 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 458 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 459 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 5:083d484e95a1 460 length3 = sprintf(buffer4,"%iCm to %iCm",r2,r3);
el15pjt 5:083d484e95a1 461 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 462 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 463 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 464 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 465 break;
el15pjt 5:083d484e95a1 466
el15pjt 5:083d484e95a1 467 case 2:
el15pjt 5:083d484e95a1 468
el15pjt 5:083d484e95a1 469 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 470 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 471 if (r4 == r5) {
el15pjt 5:083d484e95a1 472 r4 = r3;
el15pjt 5:083d484e95a1 473 } else {
el15pjt 5:083d484e95a1 474 r4 += 1;
el15pjt 5:083d484e95a1 475 }
el15pjt 5:083d484e95a1 476 }
el15pjt 5:083d484e95a1 477
el15pjt 5:083d484e95a1 478 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 479 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 480 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 5:083d484e95a1 481 length3 = sprintf(buffer4,"%iCm to %iCm",r3,r4);
el15pjt 5:083d484e95a1 482 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 483 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 484 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 485 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 486 break;
el15pjt 5:083d484e95a1 487
el15pjt 5:083d484e95a1 488 case 3:
el15pjt 5:083d484e95a1 489
el15pjt 5:083d484e95a1 490 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 491 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 492 if (r5 == r6) {
el15pjt 5:083d484e95a1 493 r5 = r4;
el15pjt 5:083d484e95a1 494 } else {
el15pjt 5:083d484e95a1 495 r5 += 1;
el15pjt 5:083d484e95a1 496 }
el15pjt 5:083d484e95a1 497 }
el15pjt 5:083d484e95a1 498
el15pjt 5:083d484e95a1 499 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 500 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 501 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 6:b464a8a94d91 502 length3 = sprintf(buffer4,"%iCm to %iCm",r4,r5);
el15pjt 5:083d484e95a1 503 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 504 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 505 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 506 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 507 break;
el15pjt 5:083d484e95a1 508 case 4:
el15pjt 5:083d484e95a1 509
el15pjt 5:083d484e95a1 510 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 511 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 512 if (r6 == r7) {
el15pjt 5:083d484e95a1 513 r6 = r5;
el15pjt 5:083d484e95a1 514 } else {
el15pjt 5:083d484e95a1 515 r6 += 1;
el15pjt 5:083d484e95a1 516 }
el15pjt 5:083d484e95a1 517 }
el15pjt 5:083d484e95a1 518
el15pjt 5:083d484e95a1 519 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 520 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 521 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 6:b464a8a94d91 522 length3 = sprintf(buffer4,"%iCm to %iCm",r5,r6);
el15pjt 5:083d484e95a1 523 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 524 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 525 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 526 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 527 break;
el15pjt 5:083d484e95a1 528 case 5:
el15pjt 5:083d484e95a1 529
el15pjt 5:083d484e95a1 530 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 531 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 532 if (r7 == 300) {
el15pjt 5:083d484e95a1 533 r7 = r6;
el15pjt 5:083d484e95a1 534 } else {
el15pjt 5:083d484e95a1 535 r7 += 1;
el15pjt 5:083d484e95a1 536 }
el15pjt 5:083d484e95a1 537 }
el15pjt 5:083d484e95a1 538
el15pjt 5:083d484e95a1 539 length2 = sprintf(buffer1,"*****MENU*****");
el15pjt 5:083d484e95a1 540 length3 = sprintf(buffer2,"RANGE");
el15pjt 5:083d484e95a1 541 length3 = sprintf(buffer3,"PARAMETERS");
el15pjt 6:b464a8a94d91 542 length3 = sprintf(buffer4,"%iCm to %iCm",r6,r7);
el15pjt 5:083d484e95a1 543 lcd.printString(buffer1,0,0);
el15pjt 5:083d484e95a1 544 lcd.printString(buffer2,0,1);
el15pjt 5:083d484e95a1 545 lcd.printString(buffer3,0,2);
el15pjt 5:083d484e95a1 546 lcd.printString(buffer4,0,3);
el15pjt 5:083d484e95a1 547 break;
el15pjt 5:083d484e95a1 548
el15pjt 5:083d484e95a1 549 default:
el15pjt 5:083d484e95a1 550 lcd.clear();
el15pjt 5:083d484e95a1 551 return;
el15pjt 5:083d484e95a1 552 }
el15pjt 5:083d484e95a1 553 }
el15pjt 5:083d484e95a1 554 }