Level 2 Project Range Device
Dependencies: N5110 SDFileSystem SRF02 TMP102 mbed
Diff: main.cpp
- Revision:
- 8:fe6ebe807b9d
- Parent:
- 7:14cfb0df30e6
- Child:
- 9:bc259fc22fa2
--- a/main.cpp Mon Apr 25 10:08:05 2016 +0000 +++ b/main.cpp Wed Apr 27 09:09:55 2016 +0000 @@ -6,11 +6,13 @@ #include "main.h" #include "SDFileSystem.h" -Serial serial(USBTX, USBRX); // for PC debug +//Serial serial(USBTX, USBRX); // for PC debug int main() { + int d = 0; + int myarray[9]; setup(); lcd.init(); // Initiate LCD /* @@ -45,9 +47,9 @@ int r5; int r6; int r7; - int offset; // create suitable variables to store the data in the file - float bright; - float value; + int offset; + float bright; + float value; int i; // in this example, we keep reading (using fscanf) until we reach @@ -62,9 +64,10 @@ } } */ + while(1) { - if (g_sw1_flag) { + if (g_sw1_flag) { /// Event triggered inturupt to call the menu and reset page numbers g_sw1_flag = 0; page = 0; subpage = 0; @@ -73,6 +76,7 @@ } if (g_timer_flag_srf02) { + g_timer_flag_srf02 = 0; // if it has, clear the flag if (units == METRIC) { distance = srf02.getDistanceCm(); @@ -82,41 +86,32 @@ distance = distance -(offset*c); } - - - - - - - - if (d == 9) { + if (d == 10) { d = 0; } else { d++; } myarray[d] = distance; - totaldistance = 0; - for (i = 0; i < 10; i++) { - totaldistance = totaldistance+myarray[i]; + int totaldistance = 0; + for (int i = 0; i < 9; i++) { + int totaldistance = totaldistance+myarray[i]; } - avgdistance = totaldistance; + avgdistance = totaldistance/9; } - - - - - - - setalert(); lcdoutput(); - setbuzzer(); + if (!alert == 0) { + if (buzz_flag == 0) { + setbuzzer(); + } + } setleds(); sleep(); } } + void lcdoutput() { /** @@ -139,25 +134,38 @@ switch (standby) { case 1: + if (check_flag == 1) { + sprintf(buffer4,"COLLISIONCHECK"); + } lcd.clear(); sprintf(buffer,"**PATH CLEAR**"); lcd.printString(buffer,0,0); + lcd.printString(buffer4,0,5); lcd.refresh(); break; case 2: + if (check_flag == 1) { + sprintf(buffer4,"COLLISIONCHECK"); + } lcd.clear(); sprintf(buffer3,"TEMP = %.2f",T); sprintf(buffer2,"TEMPERATER"); - lcd.printString(buffer3,4,3); - lcd.printString(buffer2,12,2); + lcd.printString(buffer3,4,2); + lcd.printString(buffer2,12,1); + lcd.printString(buffer4,0,5); + break; case 3: + if (check_flag == 1) { + sprintf(buffer4,"COLLISIONCHECK"); + } lcd.clear(); sprintf(buffer3,"TEMP = %.2f",T); sprintf(buffer2,"TEMPERATER"); lcd.refresh(); - lcd.printString(buffer3,4,3); - lcd.printString(buffer2,12,2); + lcd.printString(buffer3,4,2); + lcd.printString(buffer2,12,1); + lcd.printString(buffer4,0,5); lcd.setBrightness(0); break; } @@ -170,34 +178,35 @@ lcd.clear(); if (units == METRIC) { - sprintf(buffer,"%i Cm",distance); + sprintf(buffer,"%0.2f Cm",avgdistance); sprintf(buffer1,"****RANGE!****"); sprintf(buffer2,"DISTANCE"); - sprintf(buffer3,"%0.2f",avgdistance); + sprintf(buffer4,"Menu"); } else { - sprintf(buffer,"%i Inches",distance); + sprintf(buffer,"%0.2f Inches",avgdistance); sprintf(buffer1,"****RANGE!****"); sprintf(buffer2,"***DISTANCE***"); - sprintf(buffer2,"Menu"); + sprintf(buffer4,"Menu"); } lcd.printString(buffer,25,2); lcd.printString(buffer1,0,0); lcd.printString(buffer2,16,1); lcd.printString(buffer4,0,5); - lcd.printString(buffer3,0,3); + - float i = (r7/84); - float distbar = (distance*i); + float h = (r7/84); + float distbar = (avgdistance*h); //drawRect(int x0,int y0,int width,int height,int fill); - lcd.drawRect(0,29,distbar,7,1); // MOVE BAR UP!!!!!!!!!!!!!!!!!!!!!!!!! + lcd.drawRect(0,29,distbar,7,1); // lcd.refresh(); } } + void setalert() { /** A fuction used to determin the alert level given a range with the use of IF statments @@ -206,20 +215,21 @@ @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)) { + 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 (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 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 + check_flag = 1; } else { alert = 0; /// alert 0 all else } @@ -259,32 +269,28 @@ 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 = 1; - if (beat == 10) { - beat = 0; - } else { - beat++; - } - - + buzzer.period (1.0/1000.0); + buzzer = 0.5; + buzzoff.attach(&flip, Alertlevel[alert].toneon); +} - if (Alertlevel[alert].toneon < beat) { - buzzer.period (1/10000); - buzzer = 0.5; - } else { - buzzer = 0.0; - } +void flip() +{ + buzz_flag = 1; + buzzer = 0.0; + buzzon.attach(&buzzflag,Alertlevel[alert].toneoff); +} - - } +void buzzflag() +{ + buzz_flag = 0; + return; } void backlight () @@ -347,7 +353,7 @@ sprintf(buffer2,"*****MENU*****"); sprintf(buffer1,"BACKLIGHT"); sprintf(buffer3,"%.0f%%",bright*100); - sprintf(buffer4,"Next Adj"); + sprintf(buffer4,"NEXT ADJ"); lcd.printString(buffer2,0,0); lcd.printString(buffer1,0,1); lcd.printString(buffer3,0,2); @@ -370,7 +376,7 @@ length2 = sprintf(buffer2,"*****MENU*****"); length1 = sprintf(buffer1,"OFFSET"); length3 = sprintf(buffer3,"%i",offset); - sprintf(buffer4,"Next Adj"); + sprintf(buffer4,"NEXT ADJ"); lcd.printString(buffer2,0,0); lcd.printString(buffer1,0,1); lcd.printString(buffer3,0,2); @@ -400,15 +406,29 @@ } sprintf(buffer2,"*****MENU*****"); sprintf(buffer1,"UNITS"); - sprintf(buffer4,"Next Adj"); + sprintf(buffer4,"NEXT ADJ"); lcd.printString(buffer2,0,0); lcd.printString(buffer1,0,1); lcd.printString(buffer4,0,5); lcd.refresh(); break; + case 3: + if (g_sw2_flag) { + g_sw2_flag = 0; // if it has, clear the flag + check_flag =0; + } + length2 = sprintf(buffer3,"*****MENU*****"); + length3 = sprintf(buffer1,"CLEAR"); + length3 = sprintf(buffer2,"COLLISION"); + sprintf(buffer4,"NEXT YES"); + lcd.printString(buffer3,0,0); + lcd.printString(buffer1,0,1); + lcd.printString(buffer2,0,2); + lcd.printString(buffer4,0,5); - case 3: + break; + case 4: if (g_sw2_flag) { g_sw2_flag = 0; // if it has, clear the flag @@ -417,7 +437,7 @@ length2 = sprintf(buffer3,"*****MENU*****"); length3 = sprintf(buffer1,"RANGE"); length3 = sprintf(buffer2,"PARAMETERS"); - sprintf(buffer4,"Next Adj"); + sprintf(buffer4,"NEXT ADJ"); lcd.printString(buffer3,0,0); lcd.printString(buffer1,0,1); lcd.printString(buffer2,0,2); @@ -464,8 +484,6 @@ return; } } - // lcd.refresh(); - } void submenu() { @@ -491,7 +509,7 @@ length3 = sprintf(buffer2,"RANGE"); length3 = sprintf(buffer3,"PARAMETERS"); length4 = sprintf(buffer4,"1Cm to %iCm",r2); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); lcd.printString(buffer3,0,2); @@ -514,7 +532,7 @@ sprintf(buffer2,"RANGE"); sprintf(buffer3,"PARAMETERS"); sprintf(buffer4,"%iCm to %iCm",r2,r3); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); lcd.printString(buffer3,0,2); @@ -537,7 +555,7 @@ sprintf(buffer2,"RANGE"); sprintf(buffer3,"PARAMETERS"); sprintf(buffer4,"%iCm to %iCm",r3,r4); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); lcd.printString(buffer3,0,2); @@ -560,7 +578,7 @@ sprintf(buffer2,"RANGE"); sprintf(buffer3,"PARAMETERS"); sprintf(buffer4,"%iCm to %iCm",r4,r5); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); lcd.printString(buffer3,0,2); @@ -582,7 +600,7 @@ length3 = sprintf(buffer2,"RANGE"); length3 = sprintf(buffer3,"PARAMETERS"); length3 = sprintf(buffer4,"%iCm to %iCm",r5,r6); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); lcd.printString(buffer3,0,2); @@ -603,7 +621,7 @@ length2 = sprintf(buffer1,"*****MENU*****"); length3 = sprintf(buffer2,"RANGE"); length3 = sprintf(buffer3,"PARAMETERS"); - sprintf(buffer,"Next Adj"); + sprintf(buffer,"NEXT ADJ"); length3 = sprintf(buffer4,"%iCm to %iCm",r6,r7); lcd.printString(buffer1,0,0); lcd.printString(buffer2,0,1); @@ -623,16 +641,15 @@ { 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_tone.attach(&timer_isr_tone,0.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 - */ + + r_led = 1; + b_led = 1; + g_led = 1; rr_led = 0; a_led = 0; gg_led = 0;