Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
Diff: main.cpp
- Revision:
- 11:b64d123b9f4f
- Parent:
- 10:c9f3c22368f1
- Child:
- 12:0171e8723d9d
diff -r c9f3c22368f1 -r b64d123b9f4f main.cpp --- a/main.cpp Wed May 04 22:16:06 2016 +0000 +++ b/main.cpp Thu May 05 10:51:19 2016 +0000 @@ -5,22 +5,16 @@ */ #include "main.h" -#include "SDFileSystem.h" -Serial serial(USBTX, USBRX); // for PC debug int main() { - int d = 0; - int myarray[5] {999,999,999,999,999}; /// initilised to any possitive integer to prevent random values at start up triggering an alert setup(); lcd.init(); // Initiate LCD - lcd.printString("ELEC 2645",0,0); - lcd.printString("Project Ranger",0,1); - lcd.printString("Phil Thompson",0,2); - lcd.printString("SID 200971914 ",0,3); - wait (3); + int d = 0; + int myarray[5] {999,999,999,999,999}; /// initilised to any possitive integer to prevent random values at start up triggering an alert + + // Load settings from SD Card\\\\\\\\\\ FILE *fp; // file pointer - // Load settings fp = fopen("/sd/settings.txt", "r"); if (fp == NULL) { // if it can't open the file then print error message serial.printf("Error! Unable to open file!\n"); @@ -33,7 +27,19 @@ serial.printf("Done.\n"); fclose(fp); // ensure you close the file after reading } - lcd.setBrightness(bright); + //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + //Startup Screen\\\\\\\\\\\\\\\\\\\\ + lcd.printString("ELEC 2645",0,0); + lcd.printString("Project Ranger",0,1); + lcd.printString("Phil Thompson",0,2); + lcd.printString("SID 200971914 ",0,3); + wait (3); + //\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + lcd.setBrightness(bright); //Set brightness of screen on startup from loaded value from SD Card + + // Main while loop of the Ranger while(1) { if (g_sw1_flag) { /// Event triggered inturupt to call the menu and reset page numbers g_sw1_flag = 0; @@ -44,15 +50,18 @@ } if (g_timer_flag_srf02) { g_timer_flag_srf02 = 0; // if it has, clear the flag - if (units == 1) { + if (units == 1) { // if units = 1 metric measurment are retrived from SFR02 distance = srf02.getDistanceCm(); distance = distance-(offset*c); - } else { + } else { //If units = 0 imperial measurments retrived from SFR02 distance = srf02.getDistannceInch(); - distance = distance -(offset*c); //MAYBE MOVE C TO OFSET SETTING - }// close else breaket + distance = distance -(offset*c); + } // close else breaket } // close if inteurrupt bracket + +//Function to average last 5 readings\\\\\\\\\\\\\\\\ + if (d == 4) { d = 0; } else { @@ -65,44 +74,65 @@ } avgdistance = (totaldistance/5); - // serial.printf("TOATAL DISTANCE %i\n", totaldistance); - // serial.printf("DISTANCE %i\n", distance); - // serial.printf("AVERAGE DISTANCE %f\n", avgdistance); - // serial.printf("ARRAY ELEMENT = %i\n", d); - // serial.printf("myarray %i\n", myarray[d]); +/* + Debugging\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + Uncomment to use button 2 to toggle thru alert levels for debugging and comment out setalert(); + serial.printf("TOATAL DISTANCE %i\n", totaldistance); + serial.printf("DISTANCE %i\n", distance); + serial.printf("AVERAGE DISTANCE %f\n", avgdistance); + serial.printf("ARRAY ELEMENT = %i\n", d); + serial.printf("myarray %i\n", myarray[d]); + if (g_sw2_flag) { /// Event triggered inturupt to call the menu and reset page numbers + g_sw2_flag = 0; + if (alert ==8) { + alert =0; + } else { + alert++; + } + serial.printf("ALERT LEVEL %i\n", alert); + } +*/ - /* uncomment to use button 2 to toggle thru alert levels for debugging and comment out setalert(); - if (g_sw2_flag) { /// Event triggered inturupt to call the menu and reset page numbers - g_sw2_flag = 0; - if (alert ==8) { - alert =0; - } else { - alert++; - } - serial.printf("ALERT LEVEL %i\n", alert); - }*/ setalert(); //serial.printf("ALERT LEVEL %i\n", alert); lcdoutput(); - if (alert !=0) { - if (buzz_flag == 0) { + + if (alert !=0) { // no buzzer needed at alert == 0 path clear + if (buzz_flag == 0) {// flag keeps buzz from being called durig it's off period setbuzzer(); } } - setleds(); - sleep(); + setleds(); // Function called to set LED outputs + sleep(); // Sleep till nest interupt } } -void lcdoutput() +void setalert() { - /** - Function called to print to the LCD display - @param i used to scale the max distaance to the width of the screen - @param distance Distance read from sensor to be dispayed - @param distbar used to adjust how far along the screen the bar is to go acorrding to distance - */ - + if (avgdistance >= (r6*c) && avgdistance < (r7*c)) { // r6 150 and r7 200 + alert = 1; /// alert 1 avgdistance between preset 150Cm to 200Cm + } else if (avgdistance >= (r5*c) && avgdistance < (r6*c)) { + alert = 2; /// alert 2 when between preset 90Cm to 150Cm + } else if (avgdistance >= (r4*c) && avgdistance < (r5*c)) { + alert = 3; /// alert 3 when avgdistance between 60Cm to 90Cm + } else if (avgdistance >= (r3*c) && avgdistance < (r4*c)) { + alert = 4; /// alert 4 when avgdistance between 40Cm and 60Cm + } else if (avgdistance >= (r2*c) && avgdistance < (r3*c)) { + alert = 5; ///alert 5 when avgdistance between 20Cm and 40m + } else if (avgdistance >= (r1*c) && avgdistance <= (r2*c)) { //r1 3 and r2 20 + alert = 6; ///alert 6 when avgdistance between 1 and 20 + } else if (avgdistance <=(r1*c)) { + alert = 7; ///alert 7 when avgdistance below 1Cm + if (check_flag ==0) { + save(); + } + check_flag = 1; + } else { + alert = 0; /// alert 0 all else + } +} +void lcdoutput() +{ // if alert == 0 no need to display range path is clear if (alert == 0) { lcd.clear(); @@ -183,33 +213,10 @@ } }//close function -void setalert() -{ - if (avgdistance >= (r6*c) && avgdistance < (r7*c)) { // r6 150 and r7 200 - alert = 1; /// alert 1 avgdistance between preset 150Cm to 200Cm - } else if (avgdistance >= (r5*c) && avgdistance < (r6*c)) { - alert = 2; /// alert 2 when between preset 90Cm to 150Cm - } else if (avgdistance >= (r4*c) && avgdistance < (r5*c)) { - alert = 3; /// alert 3 when avgdistance between 60Cm to 90Cm - } else if (avgdistance >= (r3*c) && avgdistance < (r4*c)) { - alert = 4; /// alert 4 when avgdistance between 40Cm and 60Cm - } else if (avgdistance >= (r2*c) && avgdistance < (r3*c)) { - alert = 5; ///alert 5 when avgdistance between 20Cm and 40m - } else if (avgdistance >= (r1*c) && avgdistance <= (r2*c)) { //r1 3 and r2 20 - alert = 6; ///alert 6 when avgdistance between 1 and 20 - } else if (avgdistance <=(r1*c)) { - alert = 7; ///alert 7 when avgdistance below 1Cm - if (check_flag ==0) { - save(); - } - check_flag = 1; - } else { - alert = 0; /// alert 0 all else - } -} void setleds() { + int flash = 0; ///Variable to toggle LEDs high low if (g_timer_flag_led) { g_timer_flag_led = 0; flash = !flash; // if it has, clear the flag @@ -267,38 +274,12 @@ lcd.setBrightness(bright); } -void sw2_isr() -{ - g_sw2_flag = 1; /** set flag in ISR by button 2 @param g_sw2_flag 0 or 1*/ -} - -void sw1_isr() -{ - g_sw1_flag = 1; /** set flag in ISR by button 2 @param g_sw1_flag 0 or 1*/ -} - -void timer_isr_led() -{ - g_timer_flag_led = 1; /** set flag in ISR by timer_isr_led @param g_timer_flag_led 0 or 1 */ -} - -void timer_isr_srf02() -{ - g_timer_flag_srf02 = 1; /** set flag in ISR by ticker_srf02 @param g_timer_flag_srf02 0 or 1 */ -} - -void timer_isr_standby() -{ - g_timer_flag_standby = 1; /** set flag in ISR by ticker_tone @param g_timer_flag_tone 0 or 1 */ -} - - void menu() { while(1) { if (g_sw1_flag) { g_sw1_flag = 0; - page++; /// Moves page + page++; // Moves page lcd.clear(); } switch (page) { @@ -375,13 +356,13 @@ bright = 1.0; offset = 0; units = 1; - r1 = 03;/// Upper limit of alert 1 - r2 = 10;/// Upper limit of alert 2 - r3 = 20;/// Upper limit of alert 3 - r4 = 35;/// Upper limit of alert 4 - r5 = 50;/// Upper limit of alert 5 - r6 = 65;/// Upper limit of alert 6 - r7 = 80;/// Upper limit of alert 7 + r1 = 03;// Upper limit of alert 1 + r2 = 10;// Upper limit of alert 2 + r3 = 20;// Upper limit of alert 3 + r4 = 30;// Upper limit of alert 4 + r5 = 50;// Upper limit of alert 5 + r6 = 60;// Upper limit of alert 6 + r7 = 80;// Upper limit of alert 7 lcd.clear(); lcd.printString("SETTINGS",0,1); lcd.printString("RESET",0,2); @@ -415,21 +396,6 @@ }//while braket }//functon bracket - -void save() -{ - fp = fopen("/sd/settings.txt", "w"); - if (fp == NULL) { // if it can't open the file then print error message - serial.printf("Error! Unable to open file!\n"); - } else { // opened file so can write - serial.printf("Writing to file...."); - 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 - serial.printf("Done.\n"); - fclose(fp); // ensure you close the file after writing - } -} - - void submenu() { while(1) { @@ -443,7 +409,7 @@ if (g_sw2_flag) { g_sw2_flag = 0; // if it has, clear the flag if (r2 == r3) { - r2 = 1; + r2 = 3; } else { r2 = r2+1; } @@ -496,7 +462,7 @@ r5 += 1; } } - sprintf(buffer4,"%iCm to %iCm",r4,r5); + sprintf(buffer4,"%iCm to %iCm",r4,r5); lcd.printString("*****MENU*****",0,0); lcd.printString("RANGE",0,1); lcd.printString("PARAMETERS",0,2); @@ -542,11 +508,24 @@ }//while bracket }//function bracket +void save() +{ + fp = fopen("/sd/settings.txt", "w"); + if (fp == NULL) { // if it can't open the file then print error message + serial.printf("Error! Unable to open file!\n"); + } else { // opened file so can write + serial.printf("Writing to file...."); + 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 + serial.printf("Done.\n"); + fclose(fp); // ensure you close the file after writing + } +} + void setup() { serial.baud(115200); // full-speed! ticker.attach(&timer_isr_led,0.35); /// Attach the ticker for the flashig LEDs - ticker_srf02.attach(&timer_isr_srf02,0.1);/// Attach the ticker for collecting a range reading + ticker_srf02.attach(&timer_isr_srf02,0.2);/// Attach the ticker for collecting a range reading ticker_standby.attach(&timer_isr_standby,5.0); sw1.rise(&sw1_isr); /// sw1_isr called when button presed on the rising edge sw2.rise(&sw2_isr); /// sw2_isr called when button presed on the rising edge @@ -558,4 +537,29 @@ gg_led = 0; //PCB LEDS sw2.mode(PullDown); //Turns on use of the pulldown resistors for use with the PCB buttons sw1.mode(PullDown); //Turns on use of the pulldown resistors for use with the PCB buttons -} \ No newline at end of file +} + +void sw2_isr() +{ + g_sw2_flag = 1; /** set flag in ISR by button 2 @param g_sw2_flag 0 or 1*/ +} + +void sw1_isr() +{ + g_sw1_flag = 1; /** set flag in ISR by button 2 @param g_sw1_flag 0 or 1*/ +} + +void timer_isr_led() +{ + g_timer_flag_led = 1; /** set flag in ISR by timer_isr_led @param g_timer_flag_led 0 or 1 */ +} + +void timer_isr_srf02() +{ + g_timer_flag_srf02 = 1; /** set flag in ISR by ticker_srf02 @param g_timer_flag_srf02 0 or 1 */ +} + +void timer_isr_standby() +{ + g_timer_flag_standby = 1; /** set flag in ISR by ticker_tone @param g_timer_flag_tone 0 or 1 */ +}