Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

Files at this revision

API Documentation at this revision

Comitter:
el15pjt
Date:
Fri Apr 15 13:25:32 2016 +0000
Parent:
4:673930f04866
Child:
6:b464a8a94d91
Commit message:
Menus added. Still bug in buzzer Temp to be added still, Z.P.A to be added and LED timeout to be added.

Changed in this revision

SRF02.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/SRF02.lib	Thu Apr 14 14:23:37 2016 +0000
+++ b/SRF02.lib	Fri Apr 15 13:25:32 2016 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/eencae/code/SRF02/#ad1613b4145c
+http://mbed.org/users/eencae/code/SRF02/#78c8202f8929
--- a/main.cpp	Thu Apr 14 14:23:37 2016 +0000
+++ b/main.cpp	Fri Apr 15 13:25:32 2016 +0000
@@ -11,7 +11,8 @@
 
 #define LOW 0
 #define HIGH 1
-
+#define METRIC 1
+#define IMPERIAL 0
 
 DigitalOut rr_led (PTA1);
 DigitalOut a_led (PTC2);
@@ -29,26 +30,36 @@
 Ticker ticker_tone;
 Timeout buzzoff;
 
-
-
 // K64F on-board LEDs
 DigitalOut r_led(LED_RED);
 DigitalOut g_led(LED_GREEN);
 DigitalOut b_led(LED_BLUE);
 
 // K64F on-board switches
-//InterruptIn sw1(SW2);
+InterruptIn sw1(SW2);
 InterruptIn sw2(SW3);
 
-volatile int g_timer_flag = 0;
+volatile int g_timer_flag_led = 0;
 volatile int g_timer_flag_srf02 = 0;
-volatile int g_sw2_flag = 0;
 volatile int g_timer_flag_tone = 0;
 volatile int g_sw1_flag = 0;
+volatile int g_sw2_flag = 0;
 
+int r1 = 3;
+int r2 = 20;
+int r3 = 40;
+int r4 = 60;
+int r5 = 90;
+int r6 = 120;
+int r7 = 150;
+
+int subpage;
+int page;
+int offset = 0;
 int alert;
 int distance;
 float bright = 1;
+char units = METRIC;
 
 // struct for state
 struct Alertlevel {
@@ -74,44 +85,51 @@
     {LOW,LOW,LOW,HIGH,HIGH,HIGH,1,0.05} // all flash
 };
 void lcdoutput();
-void timer_isr(); // timed interuprt
+void timer_isr_led(); // timed interuprt
 void timer_isr_srf02();
 void timer_isr_tone();
 void backlight();
 void init_K64F(); // set up board
 void sw2_isr();
-//void sw1_isr();
+void sw1_isr();
 void setalert();
 void setleds();
 void setbuzzer();
-void flip();
+void nobuzz();
+void menu();
+void submenu();
 
 
 int main()
 {
     lcd.init();
     init_K64F();
-    ticker.attach(&timer_isr,0.35);
+    ticker.attach(&timer_isr_led,0.35);
     ticker_srf02.attach(&timer_isr_srf02,0.02);
     ticker_tone.attach(&timer_isr_tone,Alertlevel[alert].toneoff);
-    // sw1.fall(&sw1_isr);
+    sw1.fall(&sw1_isr);
     sw2.fall(&sw2_isr);
     while(1) {
 
-        if (g_sw2_flag) {
-            g_sw2_flag = 0;  // if it has, clear the flag
-            backlight();
+        if (g_sw1_flag) {
+            g_sw1_flag = 0;
+            page = 0;
+            subpage = 0;
+            menu();
         }
+
         if (g_timer_flag_srf02) {
             g_timer_flag_srf02 = 0;  // if it has, clear the flag
-            distance = srf02.getDistanceCm();
+            if (units == METRIC) {
+                distance = srf02.getDistanceCm();
+            } else {
+                distance = srf02.getDistannceInch();
+            }
+            distance = distance-offset;
         }
-        
-        
+        setalert();
         lcdoutput();
-        setalert();
-        
-        setbuzzer();
+        //     setbuzzer();
         setleds();
         sleep();
     }
@@ -124,12 +142,12 @@
     r_led = 1;
     g_led = 1;
     b_led = 1;
-
 // since the on-board switches have external pull-ups, we should disable the internal pull-down
 // resistors that are enabled by default using InterruptIn
     sw2.mode(PullNone);
-    // sw1.mode(PullNone);
+    sw1.mode(PullNone);
 }
+
 void lcdoutput()
 {
     int length;
@@ -137,13 +155,24 @@
     char buffer[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
     char buffer1[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
 
+    if (alert == 0) {
+        length1 = sprintf(buffer1,"**PATH CLEAR**",bright);
+        lcd.printString(buffer1,0,0);
+    }
 
-    length = sprintf(buffer,"D = %i Cm",distance);
-    length1 = sprintf(buffer1,"Bright = %f Cm",bright);
+    else {
+        if (units == METRIC) {
+            length = sprintf(buffer,"D = %i Cm",distance);
+            length1 = sprintf(buffer1,"****RANGE!****");
+        } else {
+            length = sprintf(buffer,"%i Inches",distance);
+            length1 = sprintf(buffer1,"****RANGE!****");
+        }
+    }
 
     if (length <= 14) {
-        lcd.printString(buffer,0,0);
-        lcd.printString(buffer1,0,1);
+        lcd.printString(buffer,0,1);
+        lcd.printString(buffer1,0,0);
     }
 
     // draw a line across the display at y = 40 pixels (origin top-left)
@@ -156,17 +185,17 @@
 
 void setalert()
 {
-    if (distance >= 200 && distance < 250) {
+    if (distance >= r6 && distance < r7) {  // r6 150 and r7 200
         alert = 1; //flash green
-    } else if (distance >= 150 && distance  < 200) {
+    } else if (distance >= r5 && distance  < r6) {  // r5 90 and r6 150
         alert = 2; //steady green
-    } else if (distance >= 100 && distance < 150) {
+    } else if (distance >= r4 && distance < r5) {  // r4 60 and r5 90
         alert = 3; //flashing amber
-    } else if (distance >= 50 && distance < 100) {
+    } else if (distance >= r3 && distance < r4) {  // r3 40 and r4 60
         alert = 4; //steady amber
-    } else if ( distance > 10 && distance < 50) {
+    } else if ( distance > r2 && distance < r3) {  // r2 20 and r3 40
         alert = 5; //flashing red
-    } else if (distance > 1 && distance <= 10) {
+    } else if (distance > 1 && distance <= r2) { //r1 3 and r2 20
         alert = 6; //steady red
     } else if (distance <=1) {
         alert = 7; //all flashing
@@ -178,33 +207,49 @@
 void setleds()
 {
     // If statments to determin the output of each LED
-
-    if (Alertlevel[alert].frr_led == HIGH) {
-        if (g_timer_flag) {
-            g_timer_flag = 0;  // if it has, clear the flag
+    if (Alertlevel[alert].frr_led and Alertlevel[alert].fgg_led and Alertlevel[alert].fa_led == HIGH) {
+        if (g_timer_flag_led) {
+            g_timer_flag_led = 0;  // if it has, clear the flag
             rr_led = !rr_led;
+            gg_led = !gg_led;
+            a_led = !a_led;
+        }
+    } else if(Alertlevel[alert].fa_led == HIGH) {
+        if (g_timer_flag_led) {
+            g_timer_flag_led = 0;  // if it has, clear the flag
+            a_led = !a_led;
+        }
+    } else if (Alertlevel[alert].frr_led == HIGH) {
+        if (g_timer_flag_led) {
+            g_timer_flag_led = 0;  // if it has, clear the flag
+            rr_led = !rr_led;
+        }
+    } else if(Alertlevel[alert].fgg_led == HIGH) {
+        if (g_timer_flag_led) {
+            g_timer_flag_led = 0;  // if it has, clear the flag
+            gg_led = !gg_led;
         }
     } else {
         rr_led = Alertlevel[alert].srr_led;
+        a_led = Alertlevel[alert].sa_led;
+        gg_led = Alertlevel[alert].sgg_led;
     }
 
-    if (Alertlevel[alert].fa_led == HIGH) {
-        if (g_timer_flag) {
-            g_timer_flag = 0;  // if it has, clear the flag
-            a_led = !a_led;
-        }
-    } else {
-        a_led = Alertlevel[alert].sa_led;
+}
+/*
+void setbuzzer()
+{
+    if (g_timer_flag_tone) {
+        g_timer_flag_tone = 0;
+        buzzer.period (1/1000);
+        buzzer=0.5;
+        buzzoff.attach(&nobuzz,Alertlevel[alert].toneon);
     }
+}*/
 
-    if (Alertlevel[alert].fgg_led == HIGH) {
-        if (g_timer_flag) {
-            g_timer_flag = 0;  // if it has, clear the flag
-            gg_led = !gg_led;
-        }
-    } else {
-        gg_led = Alertlevel[alert].sgg_led;
-    }
+void nobuzz()
+{
+    buzzer = 0.0;
 }
 
 void backlight ()
@@ -218,19 +263,22 @@
     lcd.setBrightness(bright);
 }
 
+
+
+
 void sw2_isr()
 {
     g_sw2_flag = 1;   // set flag in ISR
 }
 
-/*void sw1_isr()
+void sw1_isr()
 {
     g_sw1_flag = 1;   // set flag in ISR
-}*/
+}
 
-void timer_isr()
+void timer_isr_led()
 {
-    g_timer_flag = 1;   // set flag in ISR
+    g_timer_flag_led = 1;   // set flag in ISR
 }
 
 void timer_isr_srf02()
@@ -243,17 +291,251 @@
     g_timer_flag_tone = 1;
 }
 
-void setbuzzer()
+void menu()
 {
-    if (g_timer_flag_tone) {
-        g_timer_flag_tone = 0;
-        buzzer.period (1/1000);
-        buzzer=0.5;
-        buzzoff.attach(&flip,Alertlevel[alert].toneon);
-    }
-    }
-    
-    void flip() {
-        buzzer = 0.0;
+    int length2;
+    int length1;
+    int length3;
+    int length4;
+    char buffer2[14];
+    char buffer3[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+    char buffer1[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+    char buffer4[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14
+    while(1) {
+        if (g_sw1_flag) {
+            g_sw1_flag = 0;
+            page++;
+        }
+
+        switch (page) {
+            case 0:
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;  // if it has, clear the flag
+                    backlight();
+                }
+                lcd.clear();
+
+                length2 = sprintf(buffer2,"*****MENU*****");
+                length1 = sprintf(buffer1,"BACKLIGHT");
+                length3 = sprintf(buffer3,"%f.0",bright);
+                if (length2 <= 14) {
+                    lcd.printString(buffer2,0,0);
+                    lcd.printString(buffer1,0,1);
+                    lcd.printString(buffer3,0,2);
+                }
+                lcd.refresh(); // need to refresh display after setting pixels
+                break;
+
+            case 1:
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;  // if it has, clear the flag
+                    if (offset == 20) {
+                        offset = 0;
+                    } else {
+                        offset += 1;
+                    }
+                }
+                lcd.clear();
+                length2 = sprintf(buffer2,"*****MENU*****");
+                length1 = sprintf(buffer1,"OFFSET");
+                length3 = sprintf(buffer3,"%i",offset);
+                if (length2 <= 14) {
+                    lcd.printString(buffer2,0,0);
+                    lcd.printString(buffer1,0,1);
+                    lcd.printString(buffer3,0,2);
+                }
+                lcd.refresh(); // need to refresh display after setting pixel
+                break;
+
+            case 2:
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;  // if it has, clear the flag
+                    if (units == METRIC) {
+                        units = IMPERIAL;
+                    } else {
+                        units = METRIC;
+                    }
+                }
+                lcd.clear();
+                if (units == METRIC) {
+                    length3 = sprintf(buffer3,"METRIC");
+                } else {
+                    length3 = sprintf(buffer3,"IMPERIAL");
+                }
+
+                length2 = sprintf(buffer2,"*****MENU*****");
+                length1 = sprintf(buffer1,"UNITS");
+                //length3 = sprintf(buffer3,"%i",units);
+                if (length2 <= 14) {
+                    lcd.printString(buffer2,0,0);
+                    lcd.printString(buffer1,0,1);
+                    lcd.printString(buffer3,0,2);
+                }
+                lcd.refresh(); // need to refresh display after setting pixel
+                break;
+
+            case 3:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;  // if it has, clear the flag
+                    submenu();
+                }
+                length2 = sprintf(buffer3,"*****MENU*****");
+                length3 = sprintf(buffer1,"RANGE");
+                length3 = sprintf(buffer2,"PARAMETERS");
+                lcd.printString(buffer3,0,0);
+                lcd.printString(buffer1,0,1);
+                lcd.printString(buffer2,0,2);
+                break;
+
+            default:
+                lcd.clear();
+                return;
+        }
     }
 
+}
+void submenu()
+{
+    int length2;
+    int length1;
+    int length3;
+    int length4;
+    char buffer2[14];
+    char buffer3[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+    char buffer1[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+    char buffer4[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14
+    while(1) {
+        if (g_sw1_flag) {
+            g_sw1_flag = 0;
+            subpage++;
+        }
+        switch (subpage) {
+            case 0:
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r2 == r3) {
+                        r2 = 1;
+                    } else {
+                        r2 = r2+1;
+                    }
+                }
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length4 = sprintf(buffer4,"1Cm  to  %iCm",r2);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+
+            case 1:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r3 == r4) {
+                        r3 = r2;
+                    } else {
+                        r3 += 1;
+                    }
+                }
+
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length3 = sprintf(buffer4,"%iCm  to  %iCm",r2,r3);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+
+            case 2:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r4 == r5) {
+                        r4 = r3;
+                    } else {
+                        r4 += 1;
+                    }
+                }
+
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length3 = sprintf(buffer4,"%iCm  to  %iCm",r3,r4);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+
+            case 3:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r5 == r6) {
+                        r5 = r4;
+                    } else {
+                        r5 += 1;
+                    }
+                }
+
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length3 = sprintf(buffer4,"%iCm  to  %iCm",r4,r5);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+            case 4:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r6 == r7) {
+                        r6 = r5;
+                    } else {
+                        r6 += 1;
+                    }
+                }
+
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length3 = sprintf(buffer4,"%iCm  to  %iCm",r5,r6);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+            case 5:
+
+                if (g_sw2_flag) {
+                    g_sw2_flag = 0;           // if it has, clear the flag
+                    if (r7 == 300) {
+                        r7 = r6;
+                    } else {
+                        r7 += 1;
+                    }
+                }
+
+                length2 = sprintf(buffer1,"*****MENU*****");
+                length3 = sprintf(buffer2,"RANGE");
+                length3 = sprintf(buffer3,"PARAMETERS");
+                length3 = sprintf(buffer4,"%iCm  to  %iCm",r6,r7);
+                lcd.printString(buffer1,0,0);
+                lcd.printString(buffer2,0,1);
+                lcd.printString(buffer3,0,2);
+                lcd.printString(buffer4,0,3);
+                break;
+
+            default:
+                lcd.clear();
+                return;
+        }
+    }
+}
\ No newline at end of file