Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
main.cpp@6:b464a8a94d91, 2016-04-15 (annotated)
- 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?
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 | 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 | } |