Level 2 Project Range Device

Dependencies:   N5110 SDFileSystem SRF02 TMP102 mbed

Fork of Ranger by Philip Thompson

Revision:
7:14cfb0df30e6
Parent:
6:b464a8a94d91
Child:
8:fe6ebe807b9d
--- a/main.cpp	Fri Apr 15 17:23:17 2016 +0000
+++ b/main.cpp	Mon Apr 25 10:08:05 2016 +0000
@@ -1,114 +1,67 @@
-/*
-Philip Thompsonn
-EL15PJT
-Embedded System Project
-EL2645
+
+/**
+@file main.cpp
+@brief Program implementation
 */
 
-#include "mbed.h"
-#include "SRF02.h"
-#include "N5110.h"
-
-#define LOW 0
-#define HIGH 1
-#define METRIC 1
-#define IMPERIAL 0
-
-DigitalOut rr_led (PTA1);
-DigitalOut a_led (PTC2);
-DigitalOut gg_led(PTB23);
-PwmOut buzzer(PTA2);
-
-// Ranger object
-SRF02 srf02(I2C_SDA,I2C_SCL);
-
-//N5110 Object  VCC, SCE,RST, D/C, MOSI,SCLK, LED
-N5110           lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3);
-
-Ticker ticker;
-Ticker ticker_srf02;
-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 sw2(SW3);
-
-volatile int g_timer_flag_led = 0;
-volatile int g_timer_flag_srf02 = 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 = 80;
-int r6 = 100;
-int r7 = 120;
-
-int subpage;
-int page;
-int offset = 0;
-int alert;
-int distance;
-float bright = 1;
-char units = METRIC;
-
-// struct for state
-struct Alertlevel {
-    char srr_led;  // output value
-    char sa_led;    // time in state
-    char sgg_led;  // array of next states
-    char frr_led;
-    char fa_led;
-    char fgg_led;
-    float toneon;
-    float toneoff;
-};
-typedef const struct Alertlevel STyp;
-
-STyp Alertlevel[8] = {
-    {LOW,LOW,LOW,LOW,LOW,LOW,0,1}, // no output
-    {LOW,LOW,LOW,LOW,LOW,HIGH,0.05,1}, //flash green
-    {LOW,LOW,HIGH,LOW,LOW,LOW,0.1,1}, //steady green
-    {LOW,LOW,HIGH,LOW,HIGH,LOW,0.2,0.5}, //flash amber
-    {LOW,HIGH,HIGH,LOW,LOW,LOW,0.55,0.25}, //steady amber
-    {LOW,HIGH,HIGH,HIGH,LOW,LOW,0.8,0.1}, //flash red
-    {HIGH,HIGH,HIGH,LOW,LOW,LOW,1,1.05},// steady red
-    {LOW,LOW,LOW,HIGH,HIGH,HIGH,1,0.05} // all flash
-};
-void lcdoutput();
-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 setalert();
-void setleds();
-void setbuzzer();
-void nobuzz();
-void menu();
-void submenu();
+#include "main.h"
+#include "SDFileSystem.h"
+Serial serial(USBTX, USBRX);  // for PC debug
 
 
 int main()
 {
-    lcd.init();
-    init_K64F();
-    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);
-    sw2.fall(&sw2_isr);
+    setup();
+    lcd.init(); // Initiate LCD
+    /*
+        sprintf(buffer,"ELEC 2645");
+        sprintf(buffer1,"Project Ranger");
+        sprintf(buffer2,"Phil Thompson");
+        sprintf(buffer3,"SID 200971914 ");
+        lcd.printString(buffer,0,0);
+        lcd.printString(buffer1,0,1);
+        lcd.printString(buffer2,0,2);
+        lcd.printString(buffer3,0,3);
+        wait (3);
+        */
+    /*
+    serial.baud(115200);  // full-speed!
+    serial.printf("#### SD Card Example #####\n");
+    FILE *fp; // this is our file pointer
+    wait(1);
+    {
+       /////////////////////// Reading from file example ////////////////////////
+
+       // now open file for reading...note the 'r'
+       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");
+       } else {
+           serial.printf("Reading file....\n");
+           int r1;
+           int r2;
+           int r3;
+           int r4;
+           int r5;
+           int r6;
+           int r7;
+           int offset; // create suitable variables to store the data in the file
+           float bright;
+           float value;
+           int i;
+
+           // in this example, we keep reading (using fscanf) until we reach
+           // the 'end of file'. Note we use the address operator & to write
+           // to the variables. Also the format of the string must match what
+           // is in the file
+           while (fscanf(fp, "%d,%f", &i, &value) != EOF) {
+               serial.printf("%d,%f\n",i,value);
+           }
+           serial.printf("Done.\n");
+           fclose(fp);  // ensure you close the file after reading
+       }
+    }
+    */
     while(1) {
 
         if (g_sw1_flag) {
@@ -123,71 +76,122 @@
             g_timer_flag_srf02 = 0;  // if it has, clear the flag
             if (units == METRIC) {
                 distance = srf02.getDistanceCm();
+                distance = distance-(offset*c);
             } else {
                 distance = srf02.getDistannceInch();
+                distance = distance -(offset*c);
             }
-            distance = distance-offset;
+
+
+
+
+
+
+
+
+            if (d == 9) {
+                d = 0;
+            } else {
+                d++;
+            }
+            myarray[d] = distance;
+            totaldistance = 0;
+            for (i = 0; i < 10; i++) {
+                totaldistance = totaldistance+myarray[i];
+            }
+            avgdistance = totaldistance;
         }
+
+
+
+
+
+
+
+
         setalert();
         lcdoutput();
-        //     setbuzzer();
+        setbuzzer();
         setleds();
         sleep();
     }
 }
 
-//Set up board switches and LEDS
-void init_K64F()
-{
-//on-board LEDs are active-low, so set pin high to turn them off.
-    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);
-}
-
 void lcdoutput()
 {
-    int length;
-    int length1;
-    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)
-    int length2;
-    char buffer2[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
-    int length3;
-    char buffer3[14];  // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
+    /**
+    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 alert == 0 no need to display range path is clear
     if (alert == 0) {
+        if (g_timer_flag_standby) {
+            g_timer_flag_standby = 0;
+            T = tmp102.get_temperature();
+            standby++;
+            if (standby >3) {
+                standby = 3;
+            }
+        }
+
+        switch (standby) {
+            case 1:
+                lcd.clear();
+                sprintf(buffer,"**PATH CLEAR**");
+                lcd.printString(buffer,0,0);
+                lcd.refresh();
+                break;
+            case 2:
+                lcd.clear();
+                sprintf(buffer3,"TEMP = %.2f",T);
+                sprintf(buffer2,"TEMPERATER");
+                lcd.printString(buffer3,4,3);
+                lcd.printString(buffer2,12,2);
+                break;
+            case 3:
+                lcd.clear();
+                sprintf(buffer3,"TEMP = %.2f",T);
+                sprintf(buffer2,"TEMPERATER");
+                lcd.refresh();
+                lcd.printString(buffer3,4,3);
+                lcd.printString(buffer2,12,2);
+                lcd.setBrightness(0);
+                break;
+        }
+    }
+
+    //If alert isn't 0 then the distance is to be dispayed alonng with the the distance bar
+    else {
+        lcd.setBrightness(bright);
+        standby =0;
         lcd.clear();
 
-        length1 = sprintf(buffer1,"**PATH CLEAR**",bright);
-        lcd.printString(buffer1,0,0);
-        lcd.refresh();
-
-    }
+        if (units == METRIC) {
+            sprintf(buffer,"%i Cm",distance);
+            sprintf(buffer1,"****RANGE!****");
+            sprintf(buffer2,"DISTANCE");
+            sprintf(buffer3,"%0.2f",avgdistance);
+            sprintf(buffer4,"Menu");
 
-    else {
-        lcd.clear();
-        if (units == METRIC) {
-            length = sprintf(buffer,"%i Cm",distance);
-            length1 = sprintf(buffer1,"****RANGE!****");
-            length2 = sprintf(buffer2,"***DISTANCE***");
-            length3 = sprintf(buffer3,"Alert = %i",alert);
         } else {
-            length = sprintf(buffer,"%i Inches",distance);
-            length1 = sprintf(buffer1,"****RANGE!****");
-            length2 = sprintf(buffer2,"***DISTANCE***");
+            sprintf(buffer,"%i Inches",distance);
+            sprintf(buffer1,"****RANGE!****");
+            sprintf(buffer2,"***DISTANCE***");
+            sprintf(buffer2,"Menu");
         }
-        lcd.printString(buffer,20,3);
+        lcd.printString(buffer,25,2);
         lcd.printString(buffer1,0,0);
-        lcd.printString(buffer2,0,1);
-        lcd.printString(buffer3,0,2);
-        float i = r7/84;
-        float distbar = distance*i;
+        lcd.printString(buffer2,16,1);
+        lcd.printString(buffer4,0,5);
+        lcd.printString(buffer3,0,3);
+
+        float i = (r7/84);
+        float distbar = (distance*i);
         //drawRect(int x0,int y0,int width,int height,int fill);
-        lcd.drawRect(0,38,distbar,7,1);
+        lcd.drawRect(0,29,distbar,7,1); //    MOVE BAR UP!!!!!!!!!!!!!!!!!!!!!!!!!
         lcd.refresh();
 
     }
@@ -196,29 +200,34 @@
 
 void setalert()
 {
-    if (distance >= r6 && distance < r7) {  // r6 150 and r7 200
-        alert = 1; //flash green
-    } else if (distance >= r5 && distance  < r6) {  // r5 90 and r6 150
-        alert = 2; //steady green
-    } else if (distance >= r4 && distance < r5) {  // r4 60 and r5 90
-        alert = 3; //flashing amber
-    } else if (distance >= r3 && distance < r4) {  // r3 40 and r4 60
-        alert = 4; //steady amber
-    } else if ( distance > r2 && distance < r3) {  // r2 20 and r3 40
-        alert = 5; //flashing red
-    } else if (distance > 1 && distance <= r2) { //r1 3 and r2 20
-        alert = 6; //steady red
-    } else if (distance <=1) {
-        alert = 7; //all flashing
+    /** A fuction used to determin the alert level given a range with the use of IF statments
+    @param distance The distance read from sensor
+    @param alert The level that distance falls with in 0 -7
+    @returns alert
+    */
+
+    if (distance >= (r6*c) && distance < (r7*c)) {  // r6 150 and r7 200
+        alert = 1; /// alert 1 distance between preset 150Cm to 200Cm
+    } else if (distance >= (r5*c) && distance  < (r6*c)) {
+        alert = 2; /// alert 2 when between preset 90Cm to 150Cm
+    } else if (distance >= (r4*c) && distance < (r5*c)) {
+        alert = 3; /// alert 3 when distance between 60Cm to 90Cm
+    } else if (distance >= (r3*c) && distance < (r4*c)) {
+        alert = 4; /// alert 4 when distance between 40Cm and 60Cm
+    } else if (distance >= (r2*c) && distance < (r3*c)) {
+        alert = 5; ///alert 5 when distance between 20Cm and 40m
+    } else if (distance >= (r1*c) && distance <= (r2*c)) { //r1 3 and r2 20
+        alert = 6; ///alert 6 when distance between 1 and 20
+    } else if (distance <=(r1*c)) {
+        alert = 7; ///alert 7 when distance below 1Cm
     } else {
-        alert = 0; //no output
+        alert = 0; /// alert 0 all else
     }
 }
 
 void setleds()
 {
-    // If statments to determin the output of each LED
-    if (Alertlevel[alert].frr_led and Alertlevel[alert].fgg_led and Alertlevel[alert].fa_led == HIGH) {
+    if (alert ==7) {
         if (g_timer_flag_led) {
             g_timer_flag_led = 0;  // if it has, clear the flag
             rr_led = !rr_led;
@@ -247,25 +256,39 @@
     }
 
 }
-/*
+
 void setbuzzer()
 {
+    int beat;
+    /**
+    control the PWM to drive the buzzer
+    @param buzzer.period frequncy 1KHz
+    @param buzzer duty cycle equal on/off max volume
+    @param Alertlevel[alert].toneon controls how long the tone will last depending on alert
+    */
     if (g_timer_flag_tone) {
-        g_timer_flag_tone = 0;
-        buzzer.period (1/1000);
-        buzzer=0.5;
-        buzzoff.attach(&nobuzz,Alertlevel[alert].toneon);
+        g_timer_flag_tone = 1;
+        if (beat == 10) {
+            beat = 0;
+        } else {
+            beat++;
+        }
+
+
+
+        if (Alertlevel[alert].toneon < beat) {
+            buzzer.period (1/10000);
+            buzzer = 0.5;
+        } else {
+            buzzer = 0.0;
+        }
+
+
     }
-}*/
-
-void nobuzz()
-{
-    buzzer = 0.0;
 }
 
 void backlight ()
 {
-
     if (bright == 1.0) {
         bright = 0;
     } else {
@@ -274,51 +297,43 @@
     lcd.setBrightness(bright);
 }
 
-
-
-
 void sw2_isr()
 {
-    g_sw2_flag = 1;   // set flag in 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
+    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
+    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
+    g_timer_flag_srf02 = 1;   /** set flag in ISR by ticker_srf02 @param g_timer_flag_srf02 0 or 1 */
 }
 
 void timer_isr_tone()
 {
-    g_timer_flag_tone = 1;
+    g_timer_flag_tone = 1; /** set flag in ISR by ticker_tone @param g_timer_flag_tone 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()
 {
-    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++;
+            page++; /// Moves page
             lcd.clear();
         }
         switch (page) {
@@ -329,13 +344,15 @@
                     lcd.clear();
                 } else {
                     int lightbar = bright*84;
-                    length2 = sprintf(buffer2,"*****MENU*****");
-                    length1 = sprintf(buffer1,"BACKLIGHT");
-                    length3 = sprintf(buffer3,"%.0f%%",bright*100);
+                    sprintf(buffer2,"*****MENU*****");
+                    sprintf(buffer1,"BACKLIGHT");
+                    sprintf(buffer3,"%.0f%%",bright*100);
+                    sprintf(buffer4,"Next       Adj");
                     lcd.printString(buffer2,0,0);
                     lcd.printString(buffer1,0,1);
                     lcd.printString(buffer3,0,2);
-                    lcd.drawRect(0,38,lightbar,7,1);
+                    lcd.printString(buffer4,0,5);
+                    lcd.drawRect(0,26,lightbar,7,1);  // move bar up!!!!!!!!!!!!!!!!
                     lcd.refresh();
 
                 }
@@ -353,9 +370,11 @@
                     length2 = sprintf(buffer2,"*****MENU*****");
                     length1 = sprintf(buffer1,"OFFSET");
                     length3 = sprintf(buffer3,"%i",offset);
+                    sprintf(buffer4,"Next       Adj");
                     lcd.printString(buffer2,0,0);
                     lcd.printString(buffer1,0,1);
                     lcd.printString(buffer3,0,2);
+                    lcd.printString(buffer4,0,5);
                     lcd.refresh();
                 }
 
@@ -366,22 +385,26 @@
                     g_sw2_flag = 0;  // if it has, clear the flag
                     if (units == METRIC) {
                         units = IMPERIAL;
+                        c= 0.3937;
                     } else {
                         units = METRIC;
+                        c = 1;
                     }
                 }
                 if (units == METRIC) {
-                    length3 = sprintf(buffer3,"METRIC");
+                    sprintf(buffer3,"METRIC");
+                    lcd.printString(buffer3,0,2);
                 } else {
-                    length3 = sprintf(buffer3,"IMPERIAL");
+                    sprintf(buffer3,"IMPERIAL");
+                    lcd.printString(buffer3,0,2);
                 }
-
-                length2 = sprintf(buffer2,"*****MENU*****");
-                length1 = sprintf(buffer1,"UNITS");
+                sprintf(buffer2,"*****MENU*****");
+                sprintf(buffer1,"UNITS");
+                sprintf(buffer4,"Next       Adj");
                 lcd.printString(buffer2,0,0);
                 lcd.printString(buffer1,0,1);
-                lcd.printString(buffer3,0,2);
-
+                lcd.printString(buffer4,0,5);
+                lcd.refresh();
 
                 break;
 
@@ -394,36 +417,67 @@
                 length2 = sprintf(buffer3,"*****MENU*****");
                 length3 = sprintf(buffer1,"RANGE");
                 length3 = sprintf(buffer2,"PARAMETERS");
+                sprintf(buffer4,"Next       Adj");
                 lcd.printString(buffer3,0,0);
                 lcd.printString(buffer1,0,1);
                 lcd.printString(buffer2,0,2);
-
+                lcd.printString(buffer4,0,5);
 
                 break;
 
             default:
                 lcd.clear();
+                /*   //save();
+
+                ///////////////////// Writing list to file example //////////////////////
+
+                   // for this example, I'll create some numbers to write to file in a big list
+                   // a data logger for example will usually append to a file - at a reading
+                   // at the end rather than creating a new file
+                   fp = fopen("/sd/settinngs.txt", "a");
+
+                   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....");
+                       for(int i = 1; i <= 50; i++) {
+                           int r1;
+                           int r2;
+                           int r3;
+                           int r4;
+                           int r5;
+                           int r6;
+                           int r7;
+                           int offset; // create suitable variables to store the data in the file
+                           float bright;
+                           float dummy = 1000.0F/i;  // dummy variable
+                           fprintf(fp, "%d,%f\n",i,dummy);  // print formatted string to file (CSV)
+                       }
+                       serial.printf("Done.\n");
+                       fclose(fp);  // ensure you close the file after writing
+                   }
+
+                   // you can comment out the writing example to check that the writing has
+                   // worked - when you run it after commenting, it should still open the
+                   // file that exists on the SD card - assuming you didn't delete it!
+                */
                 return;
         }
     }
-    lcd.refresh();
+    // lcd.refresh();
+
 }
 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) {
+        /// innterupt used to shift page
         if (g_sw1_flag) {
             g_sw1_flag = 0;
             subpage++;
         }
         switch (subpage) {
+                ///interupt used to adjust range
             case 0:
                 if (g_sw2_flag) {
                     g_sw2_flag = 0;           // if it has, clear the flag
@@ -437,10 +491,12 @@
                 length3 = sprintf(buffer2,"RANGE");
                 length3 = sprintf(buffer3,"PARAMETERS");
                 length4 = sprintf(buffer4,"1Cm  to  %iCm",r2);
+                sprintf(buffer,"Next       Adj");
                 lcd.printString(buffer1,0,0);
                 lcd.printString(buffer2,0,1);
                 lcd.printString(buffer3,0,2);
                 lcd.printString(buffer4,0,3);
+                lcd.printString(buffer,0,5);
                 break;
 
             case 1:
@@ -454,14 +510,16 @@
                     }
                 }
 
-                length2 = sprintf(buffer1,"*****MENU*****");
-                length3 = sprintf(buffer2,"RANGE");
-                length3 = sprintf(buffer3,"PARAMETERS");
-                length3 = sprintf(buffer4,"%iCm  to  %iCm",r2,r3);
+                sprintf(buffer1,"*****MENU*****");
+                sprintf(buffer2,"RANGE");
+                sprintf(buffer3,"PARAMETERS");
+                sprintf(buffer4,"%iCm  to  %iCm",r2,r3);
+                sprintf(buffer,"Next       Adj");
                 lcd.printString(buffer1,0,0);
                 lcd.printString(buffer2,0,1);
                 lcd.printString(buffer3,0,2);
                 lcd.printString(buffer4,0,3);
+                lcd.printString(buffer,0,5);
                 break;
 
             case 2:
@@ -475,14 +533,16 @@
                     }
                 }
 
-                length2 = sprintf(buffer1,"*****MENU*****");
-                length3 = sprintf(buffer2,"RANGE");
-                length3 = sprintf(buffer3,"PARAMETERS");
-                length3 = sprintf(buffer4,"%iCm  to  %iCm",r3,r4);
+                sprintf(buffer1,"*****MENU*****");
+                sprintf(buffer2,"RANGE");
+                sprintf(buffer3,"PARAMETERS");
+                sprintf(buffer4,"%iCm  to  %iCm",r3,r4);
+                sprintf(buffer,"Next       Adj");
                 lcd.printString(buffer1,0,0);
                 lcd.printString(buffer2,0,1);
                 lcd.printString(buffer3,0,2);
                 lcd.printString(buffer4,0,3);
+                lcd.printString(buffer,0,5);
                 break;
 
             case 3:
@@ -496,14 +556,16 @@
                     }
                 }
 
-                length2 = sprintf(buffer1,"*****MENU*****");
-                length3 = sprintf(buffer2,"RANGE");
-                length3 = sprintf(buffer3,"PARAMETERS");
-                length3 = sprintf(buffer4,"%iCm to %iCm",r4,r5);
+                sprintf(buffer1,"*****MENU*****");
+                sprintf(buffer2,"RANGE");
+                sprintf(buffer3,"PARAMETERS");
+                sprintf(buffer4,"%iCm to %iCm",r4,r5);
+                sprintf(buffer,"Next       Adj");
                 lcd.printString(buffer1,0,0);
                 lcd.printString(buffer2,0,1);
                 lcd.printString(buffer3,0,2);
                 lcd.printString(buffer4,0,3);
+                lcd.printString(buffer,0,5);
                 break;
             case 4:
 
@@ -520,10 +582,12 @@
                 length3 = sprintf(buffer2,"RANGE");
                 length3 = sprintf(buffer3,"PARAMETERS");
                 length3 = sprintf(buffer4,"%iCm to %iCm",r5,r6);
+                sprintf(buffer,"Next       Adj");
                 lcd.printString(buffer1,0,0);
                 lcd.printString(buffer2,0,1);
                 lcd.printString(buffer3,0,2);
                 lcd.printString(buffer4,0,3);
+                lcd.printString(buffer,0,5);
                 break;
             case 5:
 
@@ -539,16 +603,39 @@
                 length2 = sprintf(buffer1,"*****MENU*****");
                 length3 = sprintf(buffer2,"RANGE");
                 length3 = sprintf(buffer3,"PARAMETERS");
+                sprintf(buffer,"Next       Adj");
                 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);
+                lcd.printString(buffer,0,5);
                 break;
 
             default:
                 lcd.clear();
+                //  save();
                 return;
         }
     }
+}
+void setup()
+{
+    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_tone.attach(&timer_isr_tone,1); /// Attach the ticker which controls the off time of the buzzer 0.1 = 10 beats per second
+    ticker_standby.attach(&timer_isr_standby,3.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
+
+    /**Set up LEDs switches and LEDS
+    @param r_led 1 or 0
+    @param g_led 1 or 0
+    @param b_led 1 or 0
+    */
+    rr_led = 0;
+    a_led = 0;
+    gg_led = 0;
+    sw2.mode(PullDown);
+    sw1.mode(PullDown);
 }
\ No newline at end of file