Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Revision:
11:b64d123b9f4f
Parent:
10:c9f3c22368f1
Child:
12:0171e8723d9d
--- 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 */
+}