Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Committer:
el15pjt
Date:
Wed May 04 22:16:06 2016 +0000
Revision:
10:c9f3c22368f1
Parent:
9:bc259fc22fa2
Child:
11:b64d123b9f4f
LEDs control revise and buzzer revised.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el15pjt 7:14cfb0df30e6 1
el15pjt 7:14cfb0df30e6 2 /**
el15pjt 7:14cfb0df30e6 3 @file main.cpp
el15pjt 7:14cfb0df30e6 4 @brief Program implementation
el15pjt 0:0b180348c7e4 5 */
el15pjt 0:0b180348c7e4 6
el15pjt 7:14cfb0df30e6 7 #include "main.h"
el15pjt 7:14cfb0df30e6 8 #include "SDFileSystem.h"
el15pjt 9:bc259fc22fa2 9 Serial serial(USBTX, USBRX); // for PC debug
el15pjt 0:0b180348c7e4 10
el15pjt 0:0b180348c7e4 11 int main()
el15pjt 0:0b180348c7e4 12 {
el15pjt 8:fe6ebe807b9d 13 int d = 0;
el15pjt 10:c9f3c22368f1 14 int myarray[5] {999,999,999,999,999}; /// initilised to any possitive integer to prevent random values at start up triggering an alert
el15pjt 7:14cfb0df30e6 15 setup();
el15pjt 7:14cfb0df30e6 16 lcd.init(); // Initiate LCD
el15pjt 10:c9f3c22368f1 17 lcd.printString("ELEC 2645",0,0);
el15pjt 10:c9f3c22368f1 18 lcd.printString("Project Ranger",0,1);
el15pjt 10:c9f3c22368f1 19 lcd.printString("Phil Thompson",0,2);
el15pjt 10:c9f3c22368f1 20 lcd.printString("SID 200971914 ",0,3);
el15pjt 9:bc259fc22fa2 21 wait (3);
el15pjt 10:c9f3c22368f1 22 FILE *fp; // file pointer
el15pjt 10:c9f3c22368f1 23 // Load settings
el15pjt 9:bc259fc22fa2 24 fp = fopen("/sd/settings.txt", "r");
el15pjt 9:bc259fc22fa2 25 if (fp == NULL) { // if it can't open the file then print error message
el15pjt 9:bc259fc22fa2 26 serial.printf("Error! Unable to open file!\n");
el15pjt 9:bc259fc22fa2 27 } else {
el15pjt 9:bc259fc22fa2 28 serial.printf("Reading file....\n");
el15pjt 7:14cfb0df30e6 29
el15pjt 9:bc259fc22fa2 30 while (fscanf(fp, "%f,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i,",&bright,&units,&offset,&check_flag,&r1,&r2,&r3,&r4,&r5,&r6,&r7) != EOF) {
el15pjt 9:bc259fc22fa2 31 serial.printf("%f,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i, \n",bright,units,offset,check_flag,r1,r2,r3,r4,r5,r6,r7);
el15pjt 9:bc259fc22fa2 32 }
el15pjt 9:bc259fc22fa2 33 serial.printf("Done.\n");
el15pjt 9:bc259fc22fa2 34 fclose(fp); // ensure you close the file after reading
el15pjt 7:14cfb0df30e6 35 }
el15pjt 9:bc259fc22fa2 36 lcd.setBrightness(bright);
el15pjt 0:0b180348c7e4 37 while(1) {
el15pjt 8:fe6ebe807b9d 38 if (g_sw1_flag) { /// Event triggered inturupt to call the menu and reset page numbers
el15pjt 5:083d484e95a1 39 g_sw1_flag = 0;
el15pjt 5:083d484e95a1 40 page = 0;
el15pjt 5:083d484e95a1 41 subpage = 0;
el15pjt 6:b464a8a94d91 42 lcd.clear();
el15pjt 5:083d484e95a1 43 menu();
el15pjt 2:329597081c06 44 }
el15pjt 3:8782b8b8658b 45 if (g_timer_flag_srf02) {
el15pjt 3:8782b8b8658b 46 g_timer_flag_srf02 = 0; // if it has, clear the flag
el15pjt 9:bc259fc22fa2 47 if (units == 1) {
el15pjt 5:083d484e95a1 48 distance = srf02.getDistanceCm();
el15pjt 7:14cfb0df30e6 49 distance = distance-(offset*c);
el15pjt 5:083d484e95a1 50 } else {
el15pjt 5:083d484e95a1 51 distance = srf02.getDistannceInch();
el15pjt 9:bc259fc22fa2 52 distance = distance -(offset*c); //MAYBE MOVE C TO OFSET SETTING
el15pjt 9:bc259fc22fa2 53 }// close else breaket
el15pjt 9:bc259fc22fa2 54 } // close if inteurrupt bracket
el15pjt 7:14cfb0df30e6 55
el15pjt 9:bc259fc22fa2 56 if (d == 4) {
el15pjt 9:bc259fc22fa2 57 d = 0;
el15pjt 9:bc259fc22fa2 58 } else {
el15pjt 9:bc259fc22fa2 59 d++;
el15pjt 0:0b180348c7e4 60 }
el15pjt 9:bc259fc22fa2 61 myarray[d] = distance;
el15pjt 9:bc259fc22fa2 62 totaldistance =0;
el15pjt 10:c9f3c22368f1 63 for (int i = 0; i < 5; i++) {
el15pjt 9:bc259fc22fa2 64 totaldistance = totaldistance + myarray[i];
el15pjt 9:bc259fc22fa2 65 }
el15pjt 9:bc259fc22fa2 66 avgdistance = (totaldistance/5);
el15pjt 9:bc259fc22fa2 67
el15pjt 10:c9f3c22368f1 68 // serial.printf("TOATAL DISTANCE %i\n", totaldistance);
el15pjt 9:bc259fc22fa2 69 // serial.printf("DISTANCE %i\n", distance);
el15pjt 10:c9f3c22368f1 70 // serial.printf("AVERAGE DISTANCE %f\n", avgdistance);
el15pjt 10:c9f3c22368f1 71 // serial.printf("ARRAY ELEMENT = %i\n", d);
el15pjt 10:c9f3c22368f1 72 // serial.printf("myarray %i\n", myarray[d]);
el15pjt 10:c9f3c22368f1 73
el15pjt 10:c9f3c22368f1 74 /* uncomment to use button 2 to toggle thru alert levels for debugging and comment out setalert();
el15pjt 10:c9f3c22368f1 75 if (g_sw2_flag) { /// Event triggered inturupt to call the menu and reset page numbers
el15pjt 10:c9f3c22368f1 76 g_sw2_flag = 0;
el15pjt 10:c9f3c22368f1 77 if (alert ==8) {
el15pjt 10:c9f3c22368f1 78 alert =0;
el15pjt 10:c9f3c22368f1 79 } else {
el15pjt 10:c9f3c22368f1 80 alert++;
el15pjt 10:c9f3c22368f1 81 }
el15pjt 10:c9f3c22368f1 82 serial.printf("ALERT LEVEL %i\n", alert);
el15pjt 10:c9f3c22368f1 83 }*/
el15pjt 5:083d484e95a1 84 setalert();
el15pjt 10:c9f3c22368f1 85 //serial.printf("ALERT LEVEL %i\n", alert);
el15pjt 3:8782b8b8658b 86 lcdoutput();
el15pjt 10:c9f3c22368f1 87 if (alert !=0) {
el15pjt 10:c9f3c22368f1 88 if (buzz_flag == 0) {
el15pjt 10:c9f3c22368f1 89 setbuzzer();
el15pjt 10:c9f3c22368f1 90 }
el15pjt 10:c9f3c22368f1 91 }
el15pjt 3:8782b8b8658b 92 setleds();
el15pjt 4:673930f04866 93 sleep();
el15pjt 0:0b180348c7e4 94 }
el15pjt 0:0b180348c7e4 95 }
el15pjt 0:0b180348c7e4 96
el15pjt 3:8782b8b8658b 97 void lcdoutput()
el15pjt 3:8782b8b8658b 98 {
el15pjt 7:14cfb0df30e6 99 /**
el15pjt 7:14cfb0df30e6 100 Function called to print to the LCD display
el15pjt 7:14cfb0df30e6 101 @param i used to scale the max distaance to the width of the screen
el15pjt 7:14cfb0df30e6 102 @param distance Distance read from sensor to be dispayed
el15pjt 7:14cfb0df30e6 103 @param distbar used to adjust how far along the screen the bar is to go acorrding to distance
el15pjt 7:14cfb0df30e6 104 */
el15pjt 7:14cfb0df30e6 105
el15pjt 7:14cfb0df30e6 106 // if alert == 0 no need to display range path is clear
el15pjt 6:b464a8a94d91 107 if (alert == 0) {
el15pjt 9:bc259fc22fa2 108 lcd.clear();
el15pjt 7:14cfb0df30e6 109 if (g_timer_flag_standby) {
el15pjt 7:14cfb0df30e6 110 g_timer_flag_standby = 0;
el15pjt 9:bc259fc22fa2 111 Traw = tmp102.get_temperature();
el15pjt 7:14cfb0df30e6 112 standby++;
el15pjt 9:bc259fc22fa2 113 if (standby >2) {
el15pjt 9:bc259fc22fa2 114 standby = 2;
el15pjt 7:14cfb0df30e6 115 }
el15pjt 7:14cfb0df30e6 116 }
el15pjt 7:14cfb0df30e6 117 switch (standby) {
el15pjt 9:bc259fc22fa2 118 case 0:
el15pjt 9:bc259fc22fa2 119 if (check_flag == 1) {
el15pjt 10:c9f3c22368f1 120 lcd.printString("COLLISIONCHECK",0,5);
el15pjt 9:bc259fc22fa2 121 }
el15pjt 10:c9f3c22368f1 122 lcd.printString("**PATH CLEAR**",0,0);
el15pjt 9:bc259fc22fa2 123 lcd.refresh();
el15pjt 9:bc259fc22fa2 124 break;
el15pjt 7:14cfb0df30e6 125 case 1:
el15pjt 8:fe6ebe807b9d 126 if (check_flag == 1) {
el15pjt 10:c9f3c22368f1 127 lcd.printString("COLLISIONCHECK",0,5);
el15pjt 8:fe6ebe807b9d 128 }
el15pjt 9:bc259fc22fa2 129 if (units == 0) {
el15pjt 9:bc259fc22fa2 130 T = (Traw*1.8000)+32.00;
el15pjt 9:bc259fc22fa2 131 sprintf(buffer3,"TEMP = %.2fF",T);
el15pjt 9:bc259fc22fa2 132 sprintf(buffer2,"TEMPERATER");
el15pjt 9:bc259fc22fa2 133 } else {
el15pjt 9:bc259fc22fa2 134 T=Traw;
el15pjt 9:bc259fc22fa2 135 sprintf(buffer3,"TEMP = %.2fC",T);
el15pjt 9:bc259fc22fa2 136 sprintf(buffer2,"TEMPERATER");
el15pjt 9:bc259fc22fa2 137 }
el15pjt 9:bc259fc22fa2 138 lcd.printString(buffer3,4,3);
el15pjt 9:bc259fc22fa2 139 lcd.printString(buffer2,12,2);
el15pjt 7:14cfb0df30e6 140 lcd.refresh();
el15pjt 7:14cfb0df30e6 141 break;
el15pjt 7:14cfb0df30e6 142 case 2:
el15pjt 8:fe6ebe807b9d 143 if (check_flag == 1) {
el15pjt 10:c9f3c22368f1 144 lcd.printString("COLLISIONCHECK",0,5);
el15pjt 8:fe6ebe807b9d 145 }
el15pjt 9:bc259fc22fa2 146 if (units == 0) {
el15pjt 9:bc259fc22fa2 147 T = (Traw*1.8000)+32.00;
el15pjt 9:bc259fc22fa2 148 sprintf(buffer3,"TEMP = %.2fF",T);
el15pjt 9:bc259fc22fa2 149 sprintf(buffer2,"TEMPERATER");
el15pjt 9:bc259fc22fa2 150 } else {
el15pjt 9:bc259fc22fa2 151 T=Traw;
el15pjt 9:bc259fc22fa2 152 sprintf(buffer3,"TEMP = %.2fC",T);
el15pjt 9:bc259fc22fa2 153 sprintf(buffer2,"TEMPERATER");
el15pjt 8:fe6ebe807b9d 154 }
el15pjt 9:bc259fc22fa2 155 lcd.printString(buffer3,4,3);
el15pjt 9:bc259fc22fa2 156 lcd.printString(buffer2,12,2);
el15pjt 7:14cfb0df30e6 157 lcd.refresh();
el15pjt 7:14cfb0df30e6 158 lcd.setBrightness(0);
el15pjt 7:14cfb0df30e6 159 break;
el15pjt 9:bc259fc22fa2 160 } //close switch
el15pjt 10:c9f3c22368f1 161 } else {
el15pjt 10:c9f3c22368f1 162 //If alert isn't 0 then the distance is to be dispayed alonng with the the distance bar
el15pjt 9:bc259fc22fa2 163 lcd.setBrightness(bright);
el15pjt 9:bc259fc22fa2 164 standby = 0;
el15pjt 9:bc259fc22fa2 165 lcd.clear();
el15pjt 9:bc259fc22fa2 166 if (units == 1) {
el15pjt 9:bc259fc22fa2 167 sprintf(buffer2,"%0.2f Cm",avgdistance);
el15pjt 9:bc259fc22fa2 168 } else {
el15pjt 9:bc259fc22fa2 169 sprintf(buffer2,"%0.2f In",avgdistance);
el15pjt 9:bc259fc22fa2 170 }
el15pjt 9:bc259fc22fa2 171 lcd.printString(buffer2,25,2);
el15pjt 10:c9f3c22368f1 172 lcd.printString("****RANGE!****",0,0);
el15pjt 10:c9f3c22368f1 173 lcd.printString("DISTANCE",16,1);
el15pjt 10:c9f3c22368f1 174 lcd.printString("Menu",0,5);
el15pjt 9:bc259fc22fa2 175 int h;
el15pjt 10:c9f3c22368f1 176 h = (r7*c)/84; ///Maps length of bar to largest set range r7
el15pjt 9:bc259fc22fa2 177 distbar = (avgdistance*h)-2;
el15pjt 6:b464a8a94d91 178 //drawRect(int x0,int y0,int width,int height,int fill);
el15pjt 8:fe6ebe807b9d 179 lcd.drawRect(0,29,distbar,7,1); //
el15pjt 10:c9f3c22368f1 180 //serial.printf("H = %i, r7 = %i",h,r7);
el15pjt 10:c9f3c22368f1 181 //serial.printf("distbar %f",distbar);
el15pjt 6:b464a8a94d91 182 lcd.refresh();
el15pjt 5:083d484e95a1 183 }
el15pjt 10:c9f3c22368f1 184 }//close function
el15pjt 3:8782b8b8658b 185
el15pjt 3:8782b8b8658b 186 void setalert()
el15pjt 3:8782b8b8658b 187 {
el15pjt 8:fe6ebe807b9d 188 if (avgdistance >= (r6*c) && avgdistance < (r7*c)) { // r6 150 and r7 200
el15pjt 8:fe6ebe807b9d 189 alert = 1; /// alert 1 avgdistance between preset 150Cm to 200Cm
el15pjt 8:fe6ebe807b9d 190 } else if (avgdistance >= (r5*c) && avgdistance < (r6*c)) {
el15pjt 7:14cfb0df30e6 191 alert = 2; /// alert 2 when between preset 90Cm to 150Cm
el15pjt 8:fe6ebe807b9d 192 } else if (avgdistance >= (r4*c) && avgdistance < (r5*c)) {
el15pjt 8:fe6ebe807b9d 193 alert = 3; /// alert 3 when avgdistance between 60Cm to 90Cm
el15pjt 8:fe6ebe807b9d 194 } else if (avgdistance >= (r3*c) && avgdistance < (r4*c)) {
el15pjt 8:fe6ebe807b9d 195 alert = 4; /// alert 4 when avgdistance between 40Cm and 60Cm
el15pjt 8:fe6ebe807b9d 196 } else if (avgdistance >= (r2*c) && avgdistance < (r3*c)) {
el15pjt 8:fe6ebe807b9d 197 alert = 5; ///alert 5 when avgdistance between 20Cm and 40m
el15pjt 8:fe6ebe807b9d 198 } else if (avgdistance >= (r1*c) && avgdistance <= (r2*c)) { //r1 3 and r2 20
el15pjt 8:fe6ebe807b9d 199 alert = 6; ///alert 6 when avgdistance between 1 and 20
el15pjt 8:fe6ebe807b9d 200 } else if (avgdistance <=(r1*c)) {
el15pjt 8:fe6ebe807b9d 201 alert = 7; ///alert 7 when avgdistance below 1Cm
el15pjt 9:bc259fc22fa2 202 if (check_flag ==0) {
el15pjt 9:bc259fc22fa2 203 save();
el15pjt 9:bc259fc22fa2 204 }
el15pjt 8:fe6ebe807b9d 205 check_flag = 1;
el15pjt 3:8782b8b8658b 206 } else {
el15pjt 7:14cfb0df30e6 207 alert = 0; /// alert 0 all else
el15pjt 3:8782b8b8658b 208 }
el15pjt 2:329597081c06 209 }
el15pjt 2:329597081c06 210
el15pjt 3:8782b8b8658b 211 void setleds()
el15pjt 3:8782b8b8658b 212 {
el15pjt 10:c9f3c22368f1 213 if (g_timer_flag_led) {
el15pjt 10:c9f3c22368f1 214 g_timer_flag_led = 0;
el15pjt 10:c9f3c22368f1 215 flash = !flash; // if it has, clear the flag
el15pjt 10:c9f3c22368f1 216 }
el15pjt 10:c9f3c22368f1 217 if(Alertlevel[alert].fa_led == HIGH) {
el15pjt 10:c9f3c22368f1 218 a_led = flash;
el15pjt 10:c9f3c22368f1 219 } else {
el15pjt 10:c9f3c22368f1 220 a_led = Alertlevel[alert].sa_led;
el15pjt 10:c9f3c22368f1 221 }
el15pjt 10:c9f3c22368f1 222 if (Alertlevel[alert].frr_led == HIGH) {
el15pjt 10:c9f3c22368f1 223 rr_led = flash;
el15pjt 3:8782b8b8658b 224 } else {
el15pjt 3:8782b8b8658b 225 rr_led = Alertlevel[alert].srr_led;
el15pjt 10:c9f3c22368f1 226 }
el15pjt 10:c9f3c22368f1 227 if(Alertlevel[alert].fgg_led == HIGH) {
el15pjt 10:c9f3c22368f1 228 gg_led = flash;
el15pjt 10:c9f3c22368f1 229 } else {
el15pjt 5:083d484e95a1 230 gg_led = Alertlevel[alert].sgg_led;
el15pjt 3:8782b8b8658b 231 }
el15pjt 5:083d484e95a1 232 }
el15pjt 7:14cfb0df30e6 233
el15pjt 5:083d484e95a1 234 void setbuzzer()
el15pjt 5:083d484e95a1 235 {
el15pjt 7:14cfb0df30e6 236 /**
el15pjt 7:14cfb0df30e6 237 control the PWM to drive the buzzer
el15pjt 7:14cfb0df30e6 238 @param buzzer.period frequncy 1KHz
el15pjt 7:14cfb0df30e6 239 @param buzzer duty cycle equal on/off max volume
el15pjt 7:14cfb0df30e6 240 @param Alertlevel[alert].toneon controls how long the tone will last depending on alert
el15pjt 7:14cfb0df30e6 241 */
el15pjt 8:fe6ebe807b9d 242 buzzer.period (1.0/1000.0);
el15pjt 10:c9f3c22368f1 243 buzzer = 0.5;
el15pjt 8:fe6ebe807b9d 244 buzzoff.attach(&flip, Alertlevel[alert].toneon);
el15pjt 8:fe6ebe807b9d 245 }
el15pjt 7:14cfb0df30e6 246
el15pjt 8:fe6ebe807b9d 247 void flip()
el15pjt 8:fe6ebe807b9d 248 {
el15pjt 8:fe6ebe807b9d 249 buzz_flag = 1;
el15pjt 8:fe6ebe807b9d 250 buzzer = 0.0;
el15pjt 9:bc259fc22fa2 251 buzzon.attach(&buzzflag, Alertlevel[alert].toneoff);
el15pjt 8:fe6ebe807b9d 252 }
el15pjt 7:14cfb0df30e6 253
el15pjt 8:fe6ebe807b9d 254 void buzzflag()
el15pjt 8:fe6ebe807b9d 255 {
el15pjt 8:fe6ebe807b9d 256 buzz_flag = 0;
el15pjt 8:fe6ebe807b9d 257 return;
el15pjt 3:8782b8b8658b 258 }
el15pjt 3:8782b8b8658b 259
el15pjt 3:8782b8b8658b 260 void backlight ()
el15pjt 3:8782b8b8658b 261 {
el15pjt 3:8782b8b8658b 262 if (bright == 1.0) {
el15pjt 3:8782b8b8658b 263 bright = 0;
el15pjt 3:8782b8b8658b 264 } else {
el15pjt 3:8782b8b8658b 265 bright += 0.2;
el15pjt 3:8782b8b8658b 266 }
el15pjt 3:8782b8b8658b 267 lcd.setBrightness(bright);
el15pjt 3:8782b8b8658b 268 }
el15pjt 3:8782b8b8658b 269
el15pjt 3:8782b8b8658b 270 void sw2_isr()
el15pjt 3:8782b8b8658b 271 {
el15pjt 7:14cfb0df30e6 272 g_sw2_flag = 1; /** set flag in ISR by button 2 @param g_sw2_flag 0 or 1*/
el15pjt 3:8782b8b8658b 273 }
el15pjt 3:8782b8b8658b 274
el15pjt 5:083d484e95a1 275 void sw1_isr()
el15pjt 3:8782b8b8658b 276 {
el15pjt 7:14cfb0df30e6 277 g_sw1_flag = 1; /** set flag in ISR by button 2 @param g_sw1_flag 0 or 1*/
el15pjt 5:083d484e95a1 278 }
el15pjt 3:8782b8b8658b 279
el15pjt 5:083d484e95a1 280 void timer_isr_led()
el15pjt 2:329597081c06 281 {
el15pjt 7:14cfb0df30e6 282 g_timer_flag_led = 1; /** set flag in ISR by timer_isr_led @param g_timer_flag_led 0 or 1 */
el15pjt 3:8782b8b8658b 283 }
el15pjt 3:8782b8b8658b 284
el15pjt 3:8782b8b8658b 285 void timer_isr_srf02()
el15pjt 3:8782b8b8658b 286 {
el15pjt 7:14cfb0df30e6 287 g_timer_flag_srf02 = 1; /** set flag in ISR by ticker_srf02 @param g_timer_flag_srf02 0 or 1 */
el15pjt 4:673930f04866 288 }
el15pjt 4:673930f04866 289
el15pjt 7:14cfb0df30e6 290 void timer_isr_standby()
el15pjt 7:14cfb0df30e6 291 {
el15pjt 7:14cfb0df30e6 292 g_timer_flag_standby = 1; /** set flag in ISR by ticker_tone @param g_timer_flag_tone 0 or 1 */
el15pjt 4:673930f04866 293 }
el15pjt 4:673930f04866 294
el15pjt 9:bc259fc22fa2 295
el15pjt 5:083d484e95a1 296 void menu()
el15pjt 4:673930f04866 297 {
el15pjt 5:083d484e95a1 298 while(1) {
el15pjt 5:083d484e95a1 299 if (g_sw1_flag) {
el15pjt 5:083d484e95a1 300 g_sw1_flag = 0;
el15pjt 7:14cfb0df30e6 301 page++; /// Moves page
el15pjt 6:b464a8a94d91 302 lcd.clear();
el15pjt 5:083d484e95a1 303 }
el15pjt 5:083d484e95a1 304 switch (page) {
el15pjt 5:083d484e95a1 305 case 0:
el15pjt 5:083d484e95a1 306 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 307 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 308 backlight();
el15pjt 6:b464a8a94d91 309 lcd.clear();
el15pjt 5:083d484e95a1 310 }
el15pjt 9:bc259fc22fa2 311 int lightbar = bright*84;
el15pjt 9:bc259fc22fa2 312 sprintf(buffer2,"%.0f%%",bright*100);
el15pjt 9:bc259fc22fa2 313 lcd.drawRect(0,26,lightbar,7,1); // move bar up!!!!!!!!!!!!!!!!
el15pjt 10:c9f3c22368f1 314 lcd.printString("BACKLIGHT",0,1);
el15pjt 9:bc259fc22fa2 315 lcd.printString(buffer2,0,2);
el15pjt 10:c9f3c22368f1 316 lcd.printString("NEXT ADJ",0,5);
el15pjt 9:bc259fc22fa2 317 lcd.refresh();
el15pjt 5:083d484e95a1 318 break;
el15pjt 5:083d484e95a1 319 case 1:
el15pjt 5:083d484e95a1 320 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 321 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 322 if (offset == 20) {
el15pjt 5:083d484e95a1 323 offset = 0;
el15pjt 9:bc259fc22fa2 324 lcd.clear();
el15pjt 5:083d484e95a1 325 } else {
el15pjt 5:083d484e95a1 326 offset += 1;
el15pjt 5:083d484e95a1 327 }
el15pjt 5:083d484e95a1 328 }
el15pjt 9:bc259fc22fa2 329 sprintf(buffer2,"%i",offset);
el15pjt 10:c9f3c22368f1 330 lcd.printString("OFFSET",0,1);
el15pjt 9:bc259fc22fa2 331 sprintf(buffer4,"NEXT ADJ");
el15pjt 9:bc259fc22fa2 332 lcd.printString(buffer4,0,5);
el15pjt 5:083d484e95a1 333 break;
el15pjt 5:083d484e95a1 334 case 2:
el15pjt 5:083d484e95a1 335 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 336 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 9:bc259fc22fa2 337 if (units == 1) {
el15pjt 9:bc259fc22fa2 338 units = 0;
el15pjt 9:bc259fc22fa2 339 c = 0.3937;
el15pjt 5:083d484e95a1 340 } else {
el15pjt 9:bc259fc22fa2 341 units = 1;
el15pjt 7:14cfb0df30e6 342 c = 1;
el15pjt 9:bc259fc22fa2 343 lcd.clear();
el15pjt 5:083d484e95a1 344 }
el15pjt 5:083d484e95a1 345 }
el15pjt 10:c9f3c22368f1 346 if (units == 0) {
el15pjt 10:c9f3c22368f1 347 sprintf(buffer2,"IMPERIAL");
el15pjt 10:c9f3c22368f1 348 } else {
el15pjt 10:c9f3c22368f1 349 sprintf(buffer2,"METRIC");
el15pjt 10:c9f3c22368f1 350 }
el15pjt 10:c9f3c22368f1 351 lcd.printString("NEXT ADJ",0,5);
el15pjt 10:c9f3c22368f1 352 lcd.printString("UNITS",0,1);
el15pjt 5:083d484e95a1 353 break;
el15pjt 8:fe6ebe807b9d 354 case 3:
el15pjt 8:fe6ebe807b9d 355 if (g_sw2_flag) {
el15pjt 8:fe6ebe807b9d 356 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 8:fe6ebe807b9d 357 check_flag =0;
el15pjt 9:bc259fc22fa2 358 lcd.clear();
el15pjt 8:fe6ebe807b9d 359 }
el15pjt 9:bc259fc22fa2 360 if (check_flag == 0) {
el15pjt 9:bc259fc22fa2 361 sprintf(buffer2,"COLLISION");
el15pjt 10:c9f3c22368f1 362 lcd.printString("NO",0,1);
el15pjt 9:bc259fc22fa2 363 sprintf(buffer4,"NEXT ");
el15pjt 9:bc259fc22fa2 364 } else {
el15pjt 9:bc259fc22fa2 365 sprintf(buffer2,"COLLISION");
el15pjt 10:c9f3c22368f1 366 lcd.printString("CLEAR",0,1);
el15pjt 9:bc259fc22fa2 367 sprintf(buffer4,"NEXT CLEAR");
el15pjt 9:bc259fc22fa2 368 }
el15pjt 9:bc259fc22fa2 369
el15pjt 9:bc259fc22fa2 370 lcd.printString(buffer4,0,5);
el15pjt 9:bc259fc22fa2 371 break;
el15pjt 9:bc259fc22fa2 372 case 4:
el15pjt 9:bc259fc22fa2 373 if (g_sw2_flag) {
el15pjt 9:bc259fc22fa2 374 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 9:bc259fc22fa2 375 bright = 1.0;
el15pjt 9:bc259fc22fa2 376 offset = 0;
el15pjt 9:bc259fc22fa2 377 units = 1;
el15pjt 9:bc259fc22fa2 378 r1 = 03;/// Upper limit of alert 1
el15pjt 9:bc259fc22fa2 379 r2 = 10;/// Upper limit of alert 2
el15pjt 9:bc259fc22fa2 380 r3 = 20;/// Upper limit of alert 3
el15pjt 9:bc259fc22fa2 381 r4 = 35;/// Upper limit of alert 4
el15pjt 9:bc259fc22fa2 382 r5 = 50;/// Upper limit of alert 5
el15pjt 9:bc259fc22fa2 383 r6 = 65;/// Upper limit of alert 6
el15pjt 9:bc259fc22fa2 384 r7 = 80;/// Upper limit of alert 7
el15pjt 9:bc259fc22fa2 385 lcd.clear();
el15pjt 10:c9f3c22368f1 386 lcd.printString("SETTINGS",0,1);
el15pjt 10:c9f3c22368f1 387 lcd.printString("RESET",0,2);
el15pjt 9:bc259fc22fa2 388 wait(1);
el15pjt 9:bc259fc22fa2 389 return;
el15pjt 9:bc259fc22fa2 390 }
el15pjt 9:bc259fc22fa2 391 sprintf(buffer2,"SETTINGS");
el15pjt 10:c9f3c22368f1 392 lcd.printString("RESET",0,1);
el15pjt 10:c9f3c22368f1 393 lcd.printString("NEXT RESET",0,5);
el15pjt 8:fe6ebe807b9d 394 break;
el15pjt 9:bc259fc22fa2 395 case 5:
el15pjt 5:083d484e95a1 396 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 397 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 398 submenu();
el15pjt 5:083d484e95a1 399 }
el15pjt 9:bc259fc22fa2 400 sprintf(buffer2,"PARAMETERS");
el15pjt 10:c9f3c22368f1 401 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 402 lcd.printString("EXIT ADJ",0,5);
el15pjt 5:083d484e95a1 403 break;
el15pjt 5:083d484e95a1 404 default:
el15pjt 5:083d484e95a1 405 lcd.clear();
el15pjt 9:bc259fc22fa2 406 save ();
el15pjt 10:c9f3c22368f1 407 lcd.printString(" SAVING ",0,2);
el15pjt 10:c9f3c22368f1 408 lcd.printString(" SETTINGS ",0,3);
el15pjt 9:bc259fc22fa2 409 wait (1);
el15pjt 9:bc259fc22fa2 410 return;
el15pjt 9:bc259fc22fa2 411 }// switch bracket
el15pjt 9:bc259fc22fa2 412 lcd.printString(buffer2,0,2);
el15pjt 10:c9f3c22368f1 413 lcd.printString("*****MENU*****",0,0);
el15pjt 9:bc259fc22fa2 414 lcd.refresh();
el15pjt 9:bc259fc22fa2 415 }//while braket
el15pjt 9:bc259fc22fa2 416 }//functon bracket
el15pjt 7:14cfb0df30e6 417
el15pjt 7:14cfb0df30e6 418
el15pjt 9:bc259fc22fa2 419 void save()
el15pjt 9:bc259fc22fa2 420 {
el15pjt 9:bc259fc22fa2 421 fp = fopen("/sd/settings.txt", "w");
el15pjt 9:bc259fc22fa2 422 if (fp == NULL) { // if it can't open the file then print error message
el15pjt 9:bc259fc22fa2 423 serial.printf("Error! Unable to open file!\n");
el15pjt 9:bc259fc22fa2 424 } else { // opened file so can write
el15pjt 9:bc259fc22fa2 425 serial.printf("Writing to file....");
el15pjt 9:bc259fc22fa2 426 fprintf(fp, "%f,%i,%i,%i,%i,%i,%i,%i,%i,%i,%i",bright,units,offset,check_flag,r1,r2,r3,r4,r5,r6,r7); // ensure data type matches
el15pjt 9:bc259fc22fa2 427 serial.printf("Done.\n");
el15pjt 9:bc259fc22fa2 428 fclose(fp); // ensure you close the file after writing
el15pjt 4:673930f04866 429 }
el15pjt 5:083d484e95a1 430 }
el15pjt 9:bc259fc22fa2 431
el15pjt 9:bc259fc22fa2 432
el15pjt 5:083d484e95a1 433 void submenu()
el15pjt 5:083d484e95a1 434 {
el15pjt 5:083d484e95a1 435 while(1) {
el15pjt 9:bc259fc22fa2 436 /// interupt used to shift page
el15pjt 5:083d484e95a1 437 if (g_sw1_flag) {
el15pjt 5:083d484e95a1 438 g_sw1_flag = 0;
el15pjt 5:083d484e95a1 439 subpage++;
el15pjt 5:083d484e95a1 440 }
el15pjt 9:bc259fc22fa2 441 switch (subpage) { ///interupt used to adjust range
el15pjt 5:083d484e95a1 442 case 0:
el15pjt 5:083d484e95a1 443 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 444 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 445 if (r2 == r3) {
el15pjt 5:083d484e95a1 446 r2 = 1;
el15pjt 5:083d484e95a1 447 } else {
el15pjt 5:083d484e95a1 448 r2 = r2+1;
el15pjt 5:083d484e95a1 449 }
el15pjt 5:083d484e95a1 450 }
el15pjt 9:bc259fc22fa2 451 sprintf(buffer4,"1Cm to %iCm",r2);
el15pjt 10:c9f3c22368f1 452 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 453 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 454 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 455 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 456 lcd.printString("NEXT ADJ",0,5);
el15pjt 5:083d484e95a1 457 break;
el15pjt 5:083d484e95a1 458 case 1:
el15pjt 5:083d484e95a1 459 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 460 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 461 if (r3 == r4) {
el15pjt 5:083d484e95a1 462 r3 = r2;
el15pjt 5:083d484e95a1 463 } else {
el15pjt 5:083d484e95a1 464 r3 += 1;
el15pjt 5:083d484e95a1 465 }
el15pjt 5:083d484e95a1 466 }
el15pjt 9:bc259fc22fa2 467 sprintf(buffer4,"%iCm to %iCm",r2,r3);
el15pjt 10:c9f3c22368f1 468 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 469 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 470 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 471 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 472 lcd.printString("NEXT ADJ",0,5);
el15pjt 5:083d484e95a1 473 break;
el15pjt 5:083d484e95a1 474 case 2:
el15pjt 5:083d484e95a1 475 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 476 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 477 if (r4 == r5) {
el15pjt 5:083d484e95a1 478 r4 = r3;
el15pjt 5:083d484e95a1 479 } else {
el15pjt 5:083d484e95a1 480 r4 += 1;
el15pjt 5:083d484e95a1 481 }
el15pjt 5:083d484e95a1 482 }
el15pjt 9:bc259fc22fa2 483 sprintf(buffer4,"%iCm to %iCm",r3,r4);
el15pjt 10:c9f3c22368f1 484 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 485 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 486 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 487 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 488 lcd.printString("NEXT ADJ",0,5);
el15pjt 5:083d484e95a1 489 break;
el15pjt 5:083d484e95a1 490 case 3:
el15pjt 5:083d484e95a1 491 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 492 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 493 if (r5 == r6) {
el15pjt 5:083d484e95a1 494 r5 = r4;
el15pjt 5:083d484e95a1 495 } else {
el15pjt 5:083d484e95a1 496 r5 += 1;
el15pjt 5:083d484e95a1 497 }
el15pjt 5:083d484e95a1 498 }
el15pjt 10:c9f3c22368f1 499 sprintf(buffer4,"%iCm to %iCm",r4,r5);
el15pjt 10:c9f3c22368f1 500 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 501 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 502 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 503 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 504 lcd.printString("NEXT ADJ",0,5);
el15pjt 5:083d484e95a1 505 break;
el15pjt 5:083d484e95a1 506 case 4:
el15pjt 5:083d484e95a1 507 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 508 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 509 if (r6 == r7) {
el15pjt 5:083d484e95a1 510 r6 = r5;
el15pjt 5:083d484e95a1 511 } else {
el15pjt 5:083d484e95a1 512 r6 += 1;
el15pjt 5:083d484e95a1 513 }
el15pjt 5:083d484e95a1 514 }
el15pjt 9:bc259fc22fa2 515 sprintf(buffer4,"%iCm to %iCm",r5,r6);
el15pjt 10:c9f3c22368f1 516 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 517 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 518 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 519 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 520 lcd.printString("NEXT ADJ",0,5);
el15pjt 5:083d484e95a1 521 break;
el15pjt 5:083d484e95a1 522 case 5:
el15pjt 5:083d484e95a1 523 if (g_sw2_flag) {
el15pjt 5:083d484e95a1 524 g_sw2_flag = 0; // if it has, clear the flag
el15pjt 5:083d484e95a1 525 if (r7 == 300) {
el15pjt 5:083d484e95a1 526 r7 = r6;
el15pjt 5:083d484e95a1 527 } else {
el15pjt 5:083d484e95a1 528 r7 += 1;
el15pjt 5:083d484e95a1 529 }
el15pjt 5:083d484e95a1 530 }
el15pjt 9:bc259fc22fa2 531 sprintf(buffer4,"%iCm to %iCm",r6,r7);
el15pjt 10:c9f3c22368f1 532 lcd.printString("*****MENU*****",0,0);
el15pjt 10:c9f3c22368f1 533 lcd.printString("RANGE",0,1);
el15pjt 10:c9f3c22368f1 534 lcd.printString("PARAMETERS",0,2);
el15pjt 5:083d484e95a1 535 lcd.printString(buffer4,0,3);
el15pjt 10:c9f3c22368f1 536 lcd.printString("EXIT ADJ",0,5);
el15pjt 5:083d484e95a1 537 break;
el15pjt 5:083d484e95a1 538 default:
el15pjt 5:083d484e95a1 539 lcd.clear();
el15pjt 5:083d484e95a1 540 return;
el15pjt 9:bc259fc22fa2 541 }//switch breaket
el15pjt 9:bc259fc22fa2 542 }//while bracket
el15pjt 9:bc259fc22fa2 543 }//function bracket
el15pjt 9:bc259fc22fa2 544
el15pjt 7:14cfb0df30e6 545 void setup()
el15pjt 7:14cfb0df30e6 546 {
el15pjt 10:c9f3c22368f1 547 serial.baud(115200); // full-speed!
el15pjt 7:14cfb0df30e6 548 ticker.attach(&timer_isr_led,0.35); /// Attach the ticker for the flashig LEDs
el15pjt 9:bc259fc22fa2 549 ticker_srf02.attach(&timer_isr_srf02,0.1);/// Attach the ticker for collecting a range reading
el15pjt 9:bc259fc22fa2 550 ticker_standby.attach(&timer_isr_standby,5.0);
el15pjt 7:14cfb0df30e6 551 sw1.rise(&sw1_isr); /// sw1_isr called when button presed on the rising edge
el15pjt 7:14cfb0df30e6 552 sw2.rise(&sw2_isr); /// sw2_isr called when button presed on the rising edge
el15pjt 9:bc259fc22fa2 553 r_led = 1; //Onboard leds
el15pjt 9:bc259fc22fa2 554 b_led = 1; //Onboard leds
el15pjt 9:bc259fc22fa2 555 g_led = 1; //Onboard leds
el15pjt 9:bc259fc22fa2 556 rr_led = 0; //PCB LEDS
el15pjt 9:bc259fc22fa2 557 a_led = 0; //PCB LEDS
el15pjt 9:bc259fc22fa2 558 gg_led = 0; //PCB LEDS
el15pjt 9:bc259fc22fa2 559 sw2.mode(PullDown); //Turns on use of the pulldown resistors for use with the PCB buttons
el15pjt 9:bc259fc22fa2 560 sw1.mode(PullDown); //Turns on use of the pulldown resistors for use with the PCB buttons
el15pjt 5:083d484e95a1 561 }