ELEC2645 Sensor Project Andrew Ruffley 200887845
Dependencies: SDFileSystem SRF02 mbed
Diff: main.cpp
- Revision:
- 0:71f4b2285994
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu May 05 11:31:50 2016 +0000 @@ -0,0 +1,198 @@ +#include "mbed.h" +#include "SRF02.h" +#include "N5110.h" +#include "SDFileSystem.h" +/** ELEC2645 Project +*Finalised Project for submission +*/ + +// VCC, SCE, RST, D/C, MOSI, SCLK, LED +N5110 lcd (PTE26 , PTA0 , PTC4 , PTD0 , PTD2 , PTD1 , PTC3); // mbed pins +SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // MOSI, MISO, SCK, CS, SD Card Connections +SRF02 Sensor(PTE25,PTE24);//Distance Sensor + +// External LED's +DigitalOut LEDY(PTC5); +DigitalOut LEDG(PTC7); + +// K64F on-board LEDs +DigitalOut r_led(LED_RED); +DigitalOut g_led(LED_GREEN); +DigitalOut b_led(LED_BLUE); + +// K64F on-board switches +InterruptIn sw2(SW2); +InterruptIn sw3(SW3); + +// External Switches +DigitalIn Sw1(PTB19); +DigitalIn Sw2(PTB18); + +//Buzzer +PwmOut buzzer(PTA2); + +void D_Sensor();//Timer and Sensor Function +void delete_file(char filename[]); //Delete Save file +void init_K64F();// set-up the on-board LEDs and switches +void Buzzer(); //Buzzer +void Parking_Sensor();//Parking Sensor Program +char buffer[14]; + +Timer timer; //Initiate timer +int T;//Create time variable + +int main() + +{ + Sw1.mode(PullDown); + Sw2.mode(PullDown); + + init_K64F();//initialise ob-board LED's and switches + lcd.init();//initialise screen + lcd.refresh(); //refresh + + lcd.printString("ELEC 2645",15,1); + lcd.printString("Sensor",24,2); + lcd.printString("Andy Ruffley",7,4); + lcd.printString("200887845",16,5); + wait(3); + lcd.clear(); + + lcd.printString("Program Select",0,0); + lcd.printString("Parking Sensor",0,2); + lcd.printString("Motion Sensor",3,3); + lcd.printString("200887845",16,5); + + + while(1) { + + int program = Sw1+Sw2+Sw2; + switch (program) { + + case 1: + lcd.clear(); + lcd.printString("Parking Sensor",0,2); + lcd.refresh(); + wait(2); + lcd.clear(); + while(1) { + Parking_Sensor(); + } + + + case 2: + lcd.clear(); + lcd.printString("Motion Sensor",3,3); + lcd.refresh(); + wait(2); + lcd.clear(); + while(1) { + D_Sensor(); + } + } + } +} +//End of programme + + + +//Start of functions + +//Program 1 +void Parking_Sensor() +{ + int Array[5]; //Create an array + int Total = 0; //Create and set a variable + int count = 0; //Create and set a variable + int Distance; //Create a variable + + for(count = 0; count < 5; count++) { //Set limits + Array[count] = Sensor.getDistanceCm(); //Take sensor readings + Total = Total + Array[count]; //Add sensor readings to variable + } + Distance = Total/5; // Calculate average + lcd.drawRect(0,0,5,47,2);//Draw white fill rectangle + lcd.drawRect(0,0,5,(Distance/4.3),1); //Draw black fill rectangle + float distance = sprintf(buffer,"%d cm",Distance); + if (distance <=14) { + lcd.printString(buffer,10,1); //print reading + // short delay before next measurement + wait(0.5); + } + if (Distance <30) { + Buzzer();//Activate Buzzer function + LEDY=1; + LEDG=0; + } else { + buzzer = 0;//Turn off buzzer + LEDY=0; + LEDG=1; + } +} + +//program 2 +void D_Sensor() +{ + int Distance; + Distance = Sensor.getDistanceCm();//reads distance + + float distance = sprintf(buffer,"%d cm",Distance); + if (distance <=14) { + lcd.printString(buffer,10,1);//prints distance + // short delay before next measurement + wait(0.5); + } + timer.start(); + T = timer.read(); + float Time_E = sprintf(buffer,"%d S",T); + if (Time_E <=14) { + lcd.printString(buffer,7,2); //prints time + } + if (Distance<50) { + FILE *fp; // this is our file pointer + delete_file("/sd/Time_Log.txt"); + int Time = T;//Creates Variable and sets to T + fp = fopen("/sd/Time_Log.txt", "a"); + lcd.printString("Saved",15,3); + fprintf(fp, "%d",Time); // ensure data type matches + fclose(fp); // ensure you close the file after writing + } +} + + + +//Extra Functions + +void Buzzer() +{ + buzzer.period_ms(1); //1KHz frequency + buzzer = 0.05; //50% Duty cycle + wait(1); + buzzer.period_ms(2); //500Hz frequency +} + +void delete_file(char filename[]) +{ + + FILE *fp = fopen(filename, "r"); // try and open file + if (fp != NULL) { // if it does open... + fclose(fp); // close it + remove(filename); // and then delete + + } + // if we can't open it, it doesn't exist and so we can't delete it +} + +void init_K64F() +{ + // on-board LEDs are active-low, so set pin high to turn them off. + 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); + sw3.mode(PullNone); + +}