![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
ultrasonic distance sensor - time headerfile
Dependencies: N5110 PowerControl SRF02 beep mbed
Fork of Ultrasonicdistancesensor by
Diff: ultrasonic.cpp
- Revision:
- 2:184524f95eb1
- Parent:
- 1:920749af1300
- Child:
- 3:bbfabbbc4291
diff -r 920749af1300 -r 184524f95eb1 ultrasonic.cpp --- a/ultrasonic.cpp Tue May 05 03:08:14 2015 +0000 +++ b/ultrasonic.cpp Thu May 07 16:43:32 2015 +0000 @@ -3,6 +3,7 @@ #include "beep.h" #include "SRF02.h" #include "timeMgr.h" +#include "datafile.h" // VCC,SCE,RST,D/C,MOSI,SCLK,LED @@ -10,41 +11,34 @@ // Can also power (VCC) directly from VOUT (3.3 V) - // Can give better performance due to current limitation from GPIO pin -// SDA, SCL +// SDA, SCL SRF02 sensor(p28,p27); Beep beep1(p21); AnalogIn potIn (p20); - DigitalOut Led1 (p24); - DigitalOut Led2 (p14); - DigitalOut Led3 (p25); - DigitalOut Led4 (p23); +DigitalOut Led1 (p24); +DigitalOut Led2 (p14); +DigitalOut Led3 (p25); +DigitalOut Led4 (p23); //========================= InterruptIn button1 (p17); InterruptIn button2 (p29); InterruptIn button3 (p30); - - - - //=============================== int button1Flag = 0; int button2Flag = 0; -int button3Flag = 0; +int button3Flag = 0; int msgFlag = 1; //function declarations //========================= void introMessage(); -void endMessage(); void errorHandler(); void menu(); void demo(); void cursorSelect(int, int, int, int); -void cursorMove(int); void beeper(float, float); -void introMessageTimer(); void menuLevel(float); void startMessage(); void displayClock(); @@ -52,479 +46,571 @@ void distMeasure(); void saveData(); void adjustBrightness(float); -void systemTest(); +void sysClock(); +void startClockMsg(); +void clearRow(); +void snapShot(); //------------------------ void button1Pressed(); void button2Pressed(); void button3Pressed(); -//Global variables initialisation -//================================= -//Timer introTimer; + int menuLevelFlag = 0; int brightFlag = 0; int distFlag = 0; int clockFlag = 0; -//------------------------------ + Ticker distTimer; int dstFlg = 0; void distChk() { - dstFlg = 1; -} + dstFlg = 1; +} Ticker clkTimer; int clkFlg = 0; void clkChk() { - clkFlg = 1; -} + clkFlg = 1; +} + +void buzzerRange(); +int distance; +//-------------------- + +int speedTime; +int soundDist; +int soundSpeed; +int Mspeed; + +//-------------------- int main() { // first need to initialise display lcd.init(); - - // button2.rise(&button2Pressed); - - //beeper(1000, 0.5); - + + // beeper(1000, 0.5); + serial.attach(&serialISR); // attach serial ISR timer2.attach(&timer2Expired,1.0); - + set_time(1424535031); // initialise time to 1st January 1970 - - + //1424535031 + introMessage(); - - button1.rise(&button1Pressed); + + button1.rise(&button1Pressed); button3.rise(&button3Pressed); //----------------------------------------------------- - + //----------------------------------------------------- distTimer.attach(&distChk, 1.0); //call ISR every 5 sec clkTimer.attach(&clkChk, 1.0); //call ISR every 5 sec while(1) - { - if (msgFlag) + { + if (msgFlag) { - startMessage(); - } + startMessage(); + } - if (button1Flag) - { + if (button1Flag) + { msgFlag=0; - menu(); - menuLevelFlag = 1; - } - - if (menuLevelFlag) + menu(); + menuLevelFlag = 1; + } + + if (menuLevelFlag) { button1Flag =0; - menuLevel(potIn); + menuLevel(potIn); } - - if (distFlag) + + if (distFlag) { menuLevelFlag = 0; - if (dstFlg) + if (dstFlg) { dstFlg = 0; distMeasure(); - if(button1) + + if(button1) { - distFlag = 0; - } - } - } - - if (brightFlag) - { - menuLevelFlag = 0; - - - adjustBrightness(potIn); - if (button1) - { - brightFlag = 0; + distFlag = 0; } - + } } - if (clockFlag) + + if (brightFlag) { menuLevelFlag = 0; - if (clkFlg) + adjustBrightness(potIn); + if (button1) + { + brightFlag = 0; + } + + } + if (clockFlag) + { + menuLevelFlag = 0; + if (clkFlg) { clkFlg = 0; displayClock(); - if (button1) + if (button1) { - clockFlag = 0; - } + clockFlag = 0; } - } - - - } + } + } + + sleep(); + } } void introMessage() - { - //introducto text a - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("Ultrasonic",13,1); - lcd.printString("Distance",18,2); - lcd.printString("Sensor",23,3); - lcd.drawLine(4, 45, 79, 45, 1); - - wait(1.3); - lcd.clear(); - - //introductory text b - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("University",13,1); - lcd.printString("Of",35,2); - lcd.printString("Leeds",26,3); - lcd.drawLine(4, 45, 79, 45, 1); - - wait(1.3); - lcd.clear(); - - //introductory text c - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("Ibrahim Adam",5,1); - lcd.printString("200789110",10,2); - lcd.printString("Yr2 - 2015",8,3); - lcd.drawLine(4, 45, 79, 45, 1); - - wait(1.3); - lcd.clear(); - - //introductory text c - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("Elec 2645",15,1); - lcd.printString("Embedded SYS",8,2); - lcd.printString("Project",21,3); - lcd.drawLine(4, 45, 79, 45, 1); - - msgFlag = 1; - - wait(1.3); - lcd.clear(); - } - - void mainMenu() - { - - } +{ + //introducto text a + lcd.drawLine(4, 0, 79, 0, 1); + lcd.printString("Ultrasonic",13,1); + lcd.printString("Distance",18,2); + lcd.printString("Sensor",23,3); + lcd.drawLine(4, 45, 79, 45, 1); + + wait(1.3); + lcd.clear(); + + //introductory text b + lcd.drawLine(4, 0, 79, 0, 1); + lcd.printString("University",13,1); + lcd.printString("Of",35,2); + lcd.printString("Leeds",26,3); + lcd.drawLine(4, 45, 79, 45, 1); + + wait(1.3); + lcd.clear(); + + //introductory text c + lcd.drawLine(4, 0, 79, 0, 1); + lcd.printString("Ibrahim Adam",5,1); + lcd.printString("200789110",10,2); + lcd.printString("Yr2 - 2015",8,3); + lcd.drawLine(4, 45, 79, 45, 1); + + wait(1.3); + lcd.clear(); + + //introductory text c + lcd.drawLine(4, 0, 79, 0, 1); + lcd.printString("Elec 2645",15,1); + lcd.printString("Embedded SYS",8,2); + lcd.printString("Project",21,3); + lcd.drawLine(4, 45, 79, 45, 1); + + msgFlag = 1; + + wait(1.3); + lcd.clear(); + + startClockMsg(); +} - void endMessage() - { - //end text - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("Thank You",12,1); - lcd.printString("Goodbye",19,2); - - lcd.drawLine(4, 45, 79, 45, 1); - - wait(1); - lcd.clear(); - } - - void errorHandler() - { - //end text - lcd.drawLine(4, 0, 79, 0, 1); - lcd.printString("Error Help",12,1); - - - wait(0.2); - lcd.clear(); - } +void errorHandler() +{ + //end text + lcd.drawLine(4, 0, 79, 0, 1); + lcd.printString("Error Help",12,1); + + + wait(0.2); + lcd.clear(); +} + +void adjustBrightness(float x) +{ + if ((x >= 0) && (x < 0.2)) { + + lcd.setBrightness(0); + lcd.printString("Light 0%",13,1); + } + + if ((x >= 0.2) && (x < 0.4)) { + + lcd.setBrightness(0.25); + lcd.printString("Light 25%",13,1); + } + + if ((x >= 0.4) && (x < 0.6)) { + + lcd.setBrightness(0.5); + lcd.printString("Light 50%",13,1); + } + + if ((x >= 0.6) && (x < 0.8)) { + + lcd.setBrightness(0.75); + lcd.printString("Light 75%",13,1); + + } + if (x >= 0.8) { + + lcd.setBrightness(1); + lcd.printString("Light 100%",13,1); + } + lcd.clear(); - void adjustBrightness(float x) - { - if ((x >= 0) && (x < 0.2)) - { - - lcd.setBrightness(0); - lcd.printString("Light 0%",13,1); - } - - if ((x >= 0.2) && (x < 0.4)) - { - - lcd.setBrightness(0.25); - lcd.printString("Light 25%",13,1); - } - - if ((x >= 0.4) && (x < 0.6)) - { - - lcd.setBrightness(0.5); - lcd.printString("Light 50%",13,1); - } - - if ((x >= 0.6) && (x < 0.8)) - { - - lcd.setBrightness(0.75); - lcd.printString("Light 75%",13,1); - - } - if (x >= 0.8) - { - - lcd.setBrightness(1); - lcd.printString("Light 100%",13,1); - } - lcd.clear(); - } - +} + void menu() -{ - lcd.clear(); +{ + lcd.clear(); lcd.printString("-MAIN MENU-",9,0); lcd.drawLine(4, 7, 79, 7, 1); lcd.printString("Dist read",15,1); - lcd.printString("Save data",15,2); + lcd.printString("Data",15,2); lcd.printString("brightness",15,3); - lcd.printString("SYS test",15,4); -} + lcd.printString("SYS Clock",15,4); +} void cursorSelect(int xDimm, int xLimm, int yDimm, int yLimm) { int i,j; - + //clear selecton column - for (i = 1; i < 6; i++) + for (i = 1; i < 6; i++) { - for(j = 1; j < 46; j++) + for(j = 1; j < 46; j++) { lcd.clearPixel(i,j); - } - } - + } + } + //particular selection - for (i = xDimm; i < xLimm; i++) + for (i = xDimm; i < xLimm; i++) { - for(j = yDimm; j < yLimm; j++) + for(j = yDimm; j < yLimm; j++) { - lcd.setPixel(i,j); - } - } - lcd.refresh(); -} + lcd.setPixel(i,j); + } + } + lcd.refresh(); +} void demo() { // these are default settings so not strictly needed lcd.normalMode(); // normal colour mode - lcd.setBrightness(0.5); // put LED backlight on 50% + lcd.setBrightness(0.5); // put LED backlight on 50% - // can directly print strings at specified co-ordinates - lcd.printString("Hello, World!",0,0); + // can directly print strings at specified co-ordinates + lcd.printString("Hello, World!",0,0); - char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) - // so can display a string of a maximum 14 characters in length - // or create formatted strings - ensure they aren't more than 14 characters long - int temperature = 27; - int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer - // it is important the format specifier ensures the length will fit in the buffer - if (length <= 14) // if string will fit on display - lcd.printString(buffer,0,1); // display on screen + char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) + // so can display a string of a maximum 14 characters in length + // or create formatted strings - ensure they aren't more than 14 characters long + int temperature = 27; + int length = sprintf(buffer,"T = %2d C",temperature); // print formatted data to buffer + // it is important the format specifier ensures the length will fit in the buffer + if (length <= 14) // if string will fit on display + lcd.printString(buffer,0,1); // display on screen - float pressure = 1012.3; // same idea with floats - length = sprintf(buffer,"P = %.2f mb",pressure); - if (length <= 14) - lcd.printString(buffer,0,2); + float pressure = 1012.3; // same idea with floats + length = sprintf(buffer,"P = %.2f mb",pressure); + if (length <= 14) + lcd.printString(buffer,0,2); - // can also print individual characters at specified place - lcd.printChar('X',5,3); + // can also print individual characters at specified place + lcd.printChar('X',5,3); - // draw a line across the display at y = 40 pixels (origin top-left) - for (int i = 0; i < WIDTH; i++) - { - lcd.setPixel(i,40); - } - // need to refresh display after setting pixels - lcd.refresh(); + // draw a line across the display at y = 40 pixels (origin top-left) + for (int i = 0; i < WIDTH; i++) + { + lcd.setPixel(i,40); + } + // need to refresh display after setting pixels + lcd.refresh(); - // can also check status of pixels using getPixel(x,y) + // can also check status of pixels using getPixel(x,y) - wait(5.0); - lcd.clear(); // clear display - lcd.inverseMode(); // invert colours - lcd.setBrightness(1.0); // put LED backlight on full + wait(5.0); + lcd.clear(); // clear display + lcd.inverseMode(); // invert colours + lcd.setBrightness(1.0); // put LED backlight on full - float array[84]; + float array[84]; - for (int i = 0; i < 84; i++) - { - array[i] = 0.5 + 0.5*sin(i*2*3.14/84); - } + for (int i = 0; i < 84; i++) + { + array[i] = 0.5 + 0.5*sin(i*2*3.14/84); + } - // can also plot graphs - 84 elements only - // values must be in range 0.0 - 1.0 - lcd.plotArray(array); - wait(5.0); - lcd.clear(); - lcd.normalMode(); // normal colour mode back - lcd.setBrightness(0.5); // put LED backlight on 50% + // can also plot graphs - 84 elements only + // values must be in range 0.0 - 1.0 + lcd.plotArray(array); + wait(5.0); + lcd.clear(); + lcd.normalMode(); // normal colour mode back + lcd.setBrightness(0.5); // put LED backlight on 50% - // example of drawing lines - for (int x = 0; x < WIDTH ; x+=10) - { - // x0,y0,x1,y1,type 0-white,1-black,2-dotted - lcd.drawLine(0,0,x,HEIGHT,2); - } + // example of drawing lines + for (int x = 0; x < WIDTH ; x+=10) + { + // x0,y0,x1,y1,type 0-white,1-black,2-dotted + lcd.drawLine(0,0,x,HEIGHT,2); + } - wait(5.0); - lcd.clear(); + wait(5.0); + lcd.clear(); - // example of how to draw circles - lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill - lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill - lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // x,y,radius,transparent with outline + // example of how to draw circles + lcd.drawCircle(WIDTH/2,HEIGHT/2,20,1); // x,y,radius,black fill + lcd.drawCircle(WIDTH/2,HEIGHT/2,10,2); // x,y,radius,white fill + lcd.drawCircle(WIDTH/2,HEIGHT/2,30,0); // x,y,radius,transparent with outline - wait(5.0); - lcd.clear(); + wait(5.0); + lcd.clear(); - // example of how to draw rectangles - // origin x,y,width,height,type - lcd.drawRect(10,10,50,30,1); // filled black rectangle - lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline) - lcd.drawRect(2,2,70,40,0); // transparent, just outline + // example of how to draw rectangles + // origin x,y,width,height,type + lcd.drawRect(10,10,50,30,1); // filled black rectangle + lcd.drawRect(15,15,20,10,2); // filled white rectange (no outline) + lcd.drawRect(2,2,70,40,0); // transparent, just outline - wait(5.0); - lcd.clear(); -} + wait(5.0); + lcd.clear(); +} //Interrupt service routines //=========================== void button1Pressed() { button1Flag = 1; -} +} void button2Pressed() { - button2Flag = 1; -} + button2Flag = 1; +} void button3Pressed() { - button3Flag = 1; -} + button3Flag = 1; +} -//beep sound based on beeper frequency and beeper time +//beep sound based on beeper frequency and beeper time //entered respectively void beeper(float beeperFreq, float beeperTime) { - beep1.beep(beeperFreq,beeperTime); -} - + beep1.beep(beeperFreq,beeperTime); +} + void menuLevel(float lvl) { - if ((lvl >= 0) && (lvl < 0.25)) - { + if ((lvl >= 0) && (lvl < 0.25)) + { cursorSelect(1, 6, 9, 14); - if (button2) - { + if (button2) + { distFlag = 1; - brightFlag = 0; + brightFlag = 0; clockFlag = 0; - } - + } + } if ((lvl >= 0.25) && (lvl < 0.5)) { cursorSelect(1, 6, 17, 22); } - if ((lvl >= 0.5) && (lvl < 0.75)) + + if ((lvl >= 0.5) && (lvl < 0.75)) { - cursorSelect(1, 6, 25, 30); - if (button2) + cursorSelect(1, 6, 25, 30); + if (button2) { brightFlag = 1; - distFlag =0; + distFlag =0; clockFlag = 0; - } - + } + } - if ((lvl >= 0.75) && (lvl <= 1)) + if ((lvl >= 0.75) && (lvl <= 1)) { cursorSelect(1, 6, 33, 38); - if (button2) + if (button2) { clockFlag = 1; distFlag = 0; - brightFlag = 0; - } + brightFlag = 0; + } } - - -} -void clockA() -{ - lcd.printString("Set clock",35,0); -} + + +} + void distMeasure() { lcd.clear(); lcd.printString("Measure",15,0); - + + // read sensor distance in cm and print over serial port char buffer[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14) - // so can display a string of a maximum 14 characters in length - // or create formatted strings - ensure they aren't more than 14 characters long - int distance = sensor.getDistanceCm(); + // so can display a string of a maximum 14 characters in length + // or create formatted strings - ensure they aren't more than 14 characters long + + + distance = sensor.getDistanceCm(); + soundDist = distance * 2; + + soundSpeed = 34029; + speedTime = soundDist/soundSpeed; + Mspeed = distance/speedTime; + + //==================================================================================== + /* + float Avg; + float k; + float array[10]; + for (int a = 0;a<10;a++) + { + array[a] = ; + k = k + array[a]; + } + Avg = k/10; + + */ + //==================================================================================== + int length = sprintf(buffer,"Dist = %2d cm",distance); // print formatted data to buffer - // it is important the format specifier ensures the length will fit in the buffer - if (length <= 14) // if string will fit on display - { + // it is important the format specifier ensures the length will fit in the buffer + + + + if (length <= 14) { // if string will fit on display lcd.printString(buffer,0,1); // display on screen } + - // serial.printf("Distance = %d cm\n",distance); + + serial.printf("Distance = %d cm\n",distance); serial.printf("\n\n\r %s, %0.2f \n",buffer, length); - -} - + + + +} + void saveData() { lcd.printString("Save data",36,0); -} -void systemTest() +} +void sysClock() { lcd.printString("System test",30,0); -} +} void startMessage() { lcd.printString("Press",25,2); - lcd.printString("Start Button",8,3); + lcd.printString("Start Button",8,3); //displayClock(); - -} + +} void displayClock() { //timer2.attach(&timer2Expired,1.0); //serial.attach(&serialISR); // attach serial ISR lcd.clear(); - + lcd.printString("-SYS CLOCK-",9,0); - - if (timer2Flag) + + if (timer2Flag) { + getCurrentTime(); + } + + if (setTimeFlag) { + chkUpdateTime(); + } + + lcd.printString(buffer2,4,2); // display on screen +} + +void buzzerRange() +{ + { - getCurrentTime(); - } - - if (setTimeFlag) + beeper(400,distance); + } +} + + +void startClockMsg() +{ + if(time(NULL)) { + displayClock(); + lcd.printString("Set Clock",15,0); + wait(0.1); + clearRow(); + wait(0.1); + lcd.printString("Set Clock",15,0); + wait(0.1); + clearRow(); + wait(0.1); + lcd.printString("Set Clock",15,0); + wait(0.1); + clearRow(); + wait(0.3); + lcd.printString("Set Clock",15,0); + wait(0.1); + clearRow(); + wait(0.1); + lcd.printString("Set Clock",15,0); + wait(1); + lcd.clear(); + } else { + displayClock(); + lcd.printString("Clock Set",15,0); + wait(1.3); + } +} + +void clearRow() +{ + int i,j; + //clear selecton column + for(j = 0; j < 7; j++) + { - chkUpdateTime(); - } - - lcd.printString(buffer2,4,2); // display on screen -} \ No newline at end of file + + for (i = 0; i < 83; i++) + { + lcd.clearPixel(i,j); + } + } + lcd.refresh(); + wait(0.2); +} + +void snapShot() +{ + Timer A; + A.start(); + if (A.read_ms()==3000) + { + beeper(1000, 0.1); + beeper(1000, 0.1); + beeper(1000, 0.1); + beeper(1000, 0.5); + + if (button3) + { + beeper(1000,0.5); + + } + } + +} +