Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

Committer:
el15pjt
Date:
Wed May 04 14:05:07 2016 +0000
Revision:
9:bc259fc22fa2
Parent:
8:fe6ebe807b9d
Child:
10:c9f3c22368f1
BUZZER needs doing arrange code finish off comments

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