ultrasonic distance sensor - time headerfile
Dependencies: N5110 PowerControl SRF02 beep mbed
Fork of Ultrasonicdistancesensor by
ultrasonic.cpp
- Committer:
- probrania7
- Date:
- 2015-05-05
- Revision:
- 0:7a82ad48df33
- Child:
- 1:920749af1300
File content as of revision 0:7a82ad48df33:
#include "mbed.h" #include "N5110.h" #include "beep.h" #include "SRF02.h" #include "timeMgr.h" // VCC,SCE,RST,D/C,MOSI,SCLK,LED N5110 lcd(p7,p8,p9,p10,p11,p13,p26); // Can also power (VCC) directly from VOUT (3.3 V) - // Can give better performance due to current limitation from GPIO pin // SDA, SCL SRF02 sensor(p28,p27); Beep beep1(p21); AnalogIn potIn (p20); 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 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(); //==================================== void distMeasure(); void saveData(); void adjustBrightness(float); void systemTest(); //------------------------ void button1Pressed(); void button2Pressed(); void button3Pressed(); //Global variables initialisation //================================= //Timer introTimer; int menuLevelFlag = 0; int brightFlag = 0; int distFlag = 0; int clockFlag = 0; //------------------------------ int main() { // first need to initialise display lcd.init(); // button2.rise(&button2Pressed); beeper(1000, 0.5); serial.attach(&serialISR); // attach serial ISR set_time(1424535031); // initialise time to 1st January 1970 introMessage(); button1.rise(&button1Pressed); button3.rise(&button3Pressed); //----------------------------------------------------- //----------------------------------------------------- while(1) { if (msgFlag) { startMessage(); } if (button1Flag) { msgFlag=0; menu(); menuLevelFlag = 1; } if (menuLevelFlag) { button1Flag =0; menuLevel(potIn); } if (distFlag) { menuLevelFlag = 0; distMeasure(); if(button1) { distFlag = 0; } } if (brightFlag) { menuLevelFlag = 0; adjustBrightness(potIn); if (button1) { brightFlag = 0; } } if (clockFlag) { menuLevelFlag = 0; displayClock(); if (button1) { clockFlag = 0; } } } } 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() { } 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 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.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("brightness",15,3); lcd.printString("SYS test",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(j = 1; j < 46; j++) { lcd.clearPixel(i,j); } } //particular selection for (i = xDimm; i < xLimm; i++) { for(j = yDimm; j < yLimm; j++) { 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% // 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 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); // 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) wait(5.0); lcd.clear(); // clear display lcd.inverseMode(); // invert colours lcd.setBrightness(1.0); // put LED backlight on full float array[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% // 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(); // 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(); // 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(); } //Interrupt service routines //=========================== void button1Pressed() { button1Flag = 1; } void button2Pressed() { button2Flag = 1; } void button3Pressed() { button3Flag = 1; } //beep sound based on beeper frequency and beeper time //entered respectively void beeper(float beeperFreq, float beeperTime) { beep1.beep(beeperFreq,beeperTime); } void menuLevel(float lvl) { if ((lvl >= 0) && (lvl < 0.25)) { cursorSelect(1, 6, 9, 14); if (button2) { distFlag = 1; brightFlag = 0; clockFlag = 0; } } if ((lvl >= 0.25) && (lvl < 0.5)) { cursorSelect(1, 6, 17, 22); } if ((lvl >= 0.5) && (lvl < 0.75)) { cursorSelect(1, 6, 25, 30); if (button2) { brightFlag = 1; distFlag =0; clockFlag = 0; } } if ((lvl >= 0.75) && (lvl <= 1)) { cursorSelect(1, 6, 33, 38); if (button2) { clockFlag = 1; distFlag = 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(); 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 { lcd.printString(buffer,0,1); // display on screen } // serial.printf("Distance = %d cm\n",distance); serial.printf("\n\n\r %s, %0.2f C\n",buffer, length); } void saveData() { lcd.printString("Save data",36,0); } void systemTest() { lcd.printString("System test",30,0); } void startMessage() { lcd.printString("Press",25,2); 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) { getCurrentTime(); } if (setTimeFlag) { chkUpdateTime(); } lcd.printString(buffer2,4,2); // display on screen }