Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
Fork of Ranger by
Revision 5:083d484e95a1, committed 2016-04-15
- 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
