ultrasonic distance sensor - time headerfile
Dependencies: N5110 PowerControl SRF02 beep mbed
Fork of Ultrasonicdistancesensor by
Diff: ultrasonic.cpp
- Revision:
- 0:7a82ad48df33
- Child:
- 1:920749af1300
diff -r 000000000000 -r 7a82ad48df33 ultrasonic.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ultrasonic.cpp Tue May 05 00:39:32 2015 +0000 @@ -0,0 +1,492 @@ +#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 +} \ No newline at end of file