Distance Sensor Project using the SRF02 ultrasonic distance sensor and N5110 lcd display.
Dependencies: N5110 PowerControl SRF02 mbed
main.h@3:bf56dab11abc, 2015-05-08 (annotated)
- Committer:
- el13jar
- Date:
- Fri May 08 09:08:58 2015 +0000
- Revision:
- 3:bf56dab11abc
- Parent:
- 1:d7cfd0e55682
Final Commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13jar | 0:bc54502de2bb | 1 | /** |
el13jar | 1:d7cfd0e55682 | 2 | @file main.h |
el13jar | 1:d7cfd0e55682 | 3 | @brief Header file containing functions prototypes, defines and global variables. |
el13jar | 1:d7cfd0e55682 | 4 | @brief Distance Sensor Project |
el13jar | 1:d7cfd0e55682 | 5 | @brief ELEC 2645 |
el13jar | 1:d7cfd0e55682 | 6 | @author James A. Robinson |
el13jar | 0:bc54502de2bb | 7 | @date March 2015 |
el13jar | 0:bc54502de2bb | 8 | */ |
el13jar | 0:bc54502de2bb | 9 | |
el13jar | 1:d7cfd0e55682 | 10 | #include "SRF02.h" |
el13jar | 1:d7cfd0e55682 | 11 | #include "N5110.h" |
el13jar | 1:d7cfd0e55682 | 12 | #include "PowerControl/PowerControl.h" |
el13jar | 1:d7cfd0e55682 | 13 | #include "PowerControl/EthernetPowerControl.h" |
el13jar | 1:d7cfd0e55682 | 14 | #define USR_POWERDOWN (0x104) |
el13jar | 1:d7cfd0e55682 | 15 | |
el13jar | 1:d7cfd0e55682 | 16 | int semihost_powerdown() /*!<definition of powerdown function */ |
el13jar | 1:d7cfd0e55682 | 17 | { |
el13jar | 1:d7cfd0e55682 | 18 | uint32_t arg; |
el13jar | 1:d7cfd0e55682 | 19 | return __semihost(USR_POWERDOWN, &arg); |
el13jar | 1:d7cfd0e55682 | 20 | } |
el13jar | 1:d7cfd0e55682 | 21 | |
el13jar | 1:d7cfd0e55682 | 22 | //I/O |
el13jar | 1:d7cfd0e55682 | 23 | |
el13jar | 1:d7cfd0e55682 | 24 | /** |
el13jar | 1:d7cfd0e55682 | 25 | @namespace leds |
el13jar | 1:d7cfd0e55682 | 26 | @brief bus output for the LED's |
el13jar | 1:d7cfd0e55682 | 27 | */ |
el13jar | 1:d7cfd0e55682 | 28 | BusOut leds(LED4,LED3,LED2,LED1); |
el13jar | 1:d7cfd0e55682 | 29 | |
el13jar | 1:d7cfd0e55682 | 30 | /** |
el13jar | 1:d7cfd0e55682 | 31 | @namespace lcd |
el13jar | 1:d7cfd0e55682 | 32 | @brief outputs for the N5110 lcd display |
el13jar | 1:d7cfd0e55682 | 33 | @breif lcd (VCC,SCE,RST,D/C,MOSI,SCLK,LED) |
el13jar | 1:d7cfd0e55682 | 34 | */ |
el13jar | 1:d7cfd0e55682 | 35 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); |
el13jar | 1:d7cfd0e55682 | 36 | |
el13jar | 1:d7cfd0e55682 | 37 | /** |
el13jar | 1:d7cfd0e55682 | 38 | @namespace serial |
el13jar | 1:d7cfd0e55682 | 39 | @brief serial I/O for serial printing over usb |
el13jar | 1:d7cfd0e55682 | 40 | */ |
el13jar | 1:d7cfd0e55682 | 41 | Serial serial(USBTX,USBRX); |
el13jar | 1:d7cfd0e55682 | 42 | |
el13jar | 1:d7cfd0e55682 | 43 | SRF02 sensor(p28,p27);//SDA,SCL |
el13jar | 1:d7cfd0e55682 | 44 | Ticker timer; // timer |
el13jar | 1:d7cfd0e55682 | 45 | |
el13jar | 1:d7cfd0e55682 | 46 | |
el13jar | 1:d7cfd0e55682 | 47 | InterruptIn P17(p17); //button MODE |
el13jar | 1:d7cfd0e55682 | 48 | InterruptIn P16(p16); //button LOG |
el13jar | 1:d7cfd0e55682 | 49 | PwmOut P21(p21); //output BUZZER |
el13jar | 1:d7cfd0e55682 | 50 | PwmOut P26(p26); //output BACKLIGHT |
el13jar | 1:d7cfd0e55682 | 51 | AnalogIn P19(p19); //potentiometer VOLUME |
el13jar | 1:d7cfd0e55682 | 52 | AnalogIn P20(p20); //potentiometer BACKLIGHT |
el13jar | 1:d7cfd0e55682 | 53 | |
el13jar | 1:d7cfd0e55682 | 54 | //flags/variables |
el13jar | 1:d7cfd0e55682 | 55 | |
el13jar | 1:d7cfd0e55682 | 56 | int timerflag = 0; /*!<initialise timer flag to 0*/ |
el13jar | 1:d7cfd0e55682 | 57 | int setTimeFlag = 0; /*!<initialise setTime flag to 0*/ |
el13jar | 1:d7cfd0e55682 | 58 | int MFlag=0; /*!<initialise Mflag to 0*/ |
el13jar | 1:d7cfd0e55682 | 59 | int M=0; /*!<initialise variable M to 0*/ |
el13jar | 1:d7cfd0e55682 | 60 | int LogFlag=0; /*!<initialise LogFlag to 0*/ |
el13jar | 1:d7cfd0e55682 | 61 | |
el13jar | 1:d7cfd0e55682 | 62 | char rxString[16]; /*!<buffer to store received string */ |
el13jar | 1:d7cfd0e55682 | 63 | char* buffer;/*!<buffer to store data and time string*/ |
el13jar | 1:d7cfd0e55682 | 64 | int distance;/*!<variable to store average distance measurment */ |
el13jar | 1:d7cfd0e55682 | 65 | const char* PrintDistance;/*!<buffer to store diatance string for LCD printing */ |
el13jar | 1:d7cfd0e55682 | 66 | |
el13jar | 1:d7cfd0e55682 | 67 | |
el13jar | 1:d7cfd0e55682 | 68 | //functions |
el13jar | 1:d7cfd0e55682 | 69 | |
el13jar | 1:d7cfd0e55682 | 70 | /** |
el13jar | 1:d7cfd0e55682 | 71 | \This function reads the distance value and sets an integer ten times, before taking |
el13jar | 1:d7cfd0e55682 | 72 | the sum(dt) and dividing by 10 to get an average returning distance for use within |
el13jar | 1:d7cfd0e55682 | 73 | other functions. This was done to reduce the impact of noise on the returned value. |
el13jar | 1:d7cfd0e55682 | 74 | @param a - int d0 |
el13jar | 1:d7cfd0e55682 | 75 | @param b - int d1 |
el13jar | 1:d7cfd0e55682 | 76 | @param c - int d2 |
el13jar | 1:d7cfd0e55682 | 77 | @param d - int d3 |
el13jar | 1:d7cfd0e55682 | 78 | @param e - int d4 |
el13jar | 1:d7cfd0e55682 | 79 | @param f - int d5 |
el13jar | 1:d7cfd0e55682 | 80 | @param g - int d6 |
el13jar | 1:d7cfd0e55682 | 81 | @param h - int d7 |
el13jar | 1:d7cfd0e55682 | 82 | @param i - int d8 |
el13jar | 1:d7cfd0e55682 | 83 | @param j - int d9 |
el13jar | 1:d7cfd0e55682 | 84 | @param k - int dt (sum of d0:d9) |
el13jar | 1:d7cfd0e55682 | 85 | @param l - distance |
el13jar | 1:d7cfd0e55682 | 86 | @returns distance the average of dt |
el13jar | 1:d7cfd0e55682 | 87 | */ |
el13jar | 1:d7cfd0e55682 | 88 | void GetDistance(); |
el13jar | 1:d7cfd0e55682 | 89 | |
el13jar | 1:d7cfd0e55682 | 90 | /** |
el13jar | 1:d7cfd0e55682 | 91 | \This function reads the backlight potentiometer (P20) and using this value sets the |
el13jar | 1:d7cfd0e55682 | 92 | pwm output to the lcd backlight (P26) as the inverse, this varies the brightness of |
el13jar | 1:d7cfd0e55682 | 93 | the lcd display. |
el13jar | 1:d7cfd0e55682 | 94 | @param a - P20 |
el13jar | 1:d7cfd0e55682 | 95 | @param b - P26 |
el13jar | 1:d7cfd0e55682 | 96 | */ |
el13jar | 1:d7cfd0e55682 | 97 | void backlight(); |
el13jar | 1:d7cfd0e55682 | 98 | |
el13jar | 1:d7cfd0e55682 | 99 | /** |
el13jar | 1:d7cfd0e55682 | 100 | \This function reads the volume potentiometer (P19) and sets a float to 1/5th of this |
el13jar | 1:d7cfd0e55682 | 101 | value before adding this value to 0.8, then using it to set the pwm duty cycle output |
el13jar | 1:d7cfd0e55682 | 102 | to the buzzer (P21). This function causes the volume of the buzzer to increase from |
el13jar | 1:d7cfd0e55682 | 103 | silence to a loud audible alert. |
el13jar | 1:d7cfd0e55682 | 104 | @param a - P19 |
el13jar | 1:d7cfd0e55682 | 105 | @param b - V |
el13jar | 1:d7cfd0e55682 | 106 | @param c - P21 |
el13jar | 1:d7cfd0e55682 | 107 | */ |
el13jar | 1:d7cfd0e55682 | 108 | void volume(); |
el13jar | 1:d7cfd0e55682 | 109 | |
el13jar | 1:d7cfd0e55682 | 110 | /** |
el13jar | 1:d7cfd0e55682 | 111 | This function is called if MFlag=1, where MFlag=1 when MButtonPressed interrupt is |
el13jar | 1:d7cfd0e55682 | 112 | called. The function firstly increments the value of M, then checks if the value is |
el13jar | 1:d7cfd0e55682 | 113 | equal to 2, if so the value is set to 0, it is then checked if the value is equal to |
el13jar | 1:d7cfd0e55682 | 114 | 0 if so the lcd is set to normal mode, before finally checking if the value is equal |
el13jar | 1:d7cfd0e55682 | 115 | to 1, if it does the lcd is set to inverse mode. |
el13jar | 1:d7cfd0e55682 | 116 | @param a - M |
el13jar | 1:d7cfd0e55682 | 117 | */ |
el13jar | 1:d7cfd0e55682 | 118 | void modeChange(); |
el13jar | 1:d7cfd0e55682 | 119 | |
el13jar | 1:d7cfd0e55682 | 120 | /** |
el13jar | 1:d7cfd0e55682 | 121 | \This function is called if the interupt P17.rise(&MButtonPressed) is activated, it |
el13jar | 1:d7cfd0e55682 | 122 | sets the MFlag to 1 which causes the function modeChange() to be called in the main(). |
el13jar | 1:d7cfd0e55682 | 123 | @param a - MFlag |
el13jar | 1:d7cfd0e55682 | 124 | */ |
el13jar | 1:d7cfd0e55682 | 125 | void MButtonPressed(); |
el13jar | 1:d7cfd0e55682 | 126 | |
el13jar | 1:d7cfd0e55682 | 127 | /** |
el13jar | 1:d7cfd0e55682 | 128 | \This function is called if the interrupt P16.rise(&LButtonPressed) is activated, |
el13jar | 1:d7cfd0e55682 | 129 | this function sets LogFlag to be the inverse of its current value. If the value is |
el13jar | 1:d7cfd0e55682 | 130 | equal to 1 this causes the function WriteDataToFile() to be called in the main. Also |
el13jar | 1:d7cfd0e55682 | 131 | includes a short delay to prevent accidental switching. |
el13jar | 1:d7cfd0e55682 | 132 | @param a - LogFlag |
el13jar | 1:d7cfd0e55682 | 133 | */ |
el13jar | 1:d7cfd0e55682 | 134 | void LButtonPressed(); |
el13jar | 1:d7cfd0e55682 | 135 | |
el13jar | 1:d7cfd0e55682 | 136 | /** |
el13jar | 1:d7cfd0e55682 | 137 | \This function is called when serial interrupts, this indicates that data has been |
el13jar | 1:d7cfd0e55682 | 138 | received. The function then reads the received string into a buffer (rxString) for |
el13jar | 1:d7cfd0e55682 | 139 | use in the function setTime().The SetTimeFlag is set to 1 which in turn causes the |
el13jar | 1:d7cfd0e55682 | 140 | function setTime() to be called in the main. |
el13jar | 1:d7cfd0e55682 | 141 | @param a - SetTimeFlag |
el13jar | 1:d7cfd0e55682 | 142 | @param b - rxString |
el13jar | 1:d7cfd0e55682 | 143 | @author Dr Craig A. Evans (University Of Leeds) |
el13jar | 1:d7cfd0e55682 | 144 | */ |
el13jar | 1:d7cfd0e55682 | 145 | void serialISR(); |
el13jar | 1:d7cfd0e55682 | 146 | |
el13jar | 1:d7cfd0e55682 | 147 | /** |
el13jar | 1:d7cfd0e55682 | 148 | \This function is called as result of SetTimeFlag equalling 1, the function converts |
el13jar | 1:d7cfd0e55682 | 149 | the string saved in a buffer(rxString) from the serialISR() function into an |
el13jar | 1:d7cfd0e55682 | 150 | integer(time), this integer is then used to set the time. |
el13jar | 1:d7cfd0e55682 | 151 | @param a - rxString |
el13jar | 1:d7cfd0e55682 | 152 | @param b - time |
el13jar | 1:d7cfd0e55682 | 153 | @author Dr Craig A. Evans (University Of Leeds) |
el13jar | 1:d7cfd0e55682 | 154 | */ |
el13jar | 1:d7cfd0e55682 | 155 | void setTime(); |
el13jar | 1:d7cfd0e55682 | 156 | |
el13jar | 1:d7cfd0e55682 | 157 | /** |
el13jar | 1:d7cfd0e55682 | 158 | \This function is called when the timer.attach(&timerexpired,1) expires every 1 |
el13jar | 1:d7cfd0e55682 | 159 | seconds. The function sets the timerflag to 1, which in turn causes the code in |
el13jar | 1:d7cfd0e55682 | 160 | the main while loop to be ran, if the timerflag does not equal 1 the while loop |
el13jar | 1:d7cfd0e55682 | 161 | remains in the power saving mode "sleep". |
el13jar | 1:d7cfd0e55682 | 162 | @param a - timerflag |
el13jar | 1:d7cfd0e55682 | 163 | @author Dr Craig A. Evans (University Of Leeds) |
el13jar | 1:d7cfd0e55682 | 164 | */ |
el13jar | 1:d7cfd0e55682 | 165 | void timerexpired(); |
el13jar | 1:d7cfd0e55682 | 166 | |
el13jar | 1:d7cfd0e55682 | 167 | /** |
el13jar | 1:d7cfd0e55682 | 168 | This function is called in the main if LogFlag equals 1. The function opens the |
el13jar | 1:d7cfd0e55682 | 169 | local file 'local', or if it does not exist it is created then opened, the data |
el13jar | 1:d7cfd0e55682 | 170 | buffers for time/date and distance are then printed to this file, before closing. |
el13jar | 1:d7cfd0e55682 | 171 | The mbed leds are used as feedback to the user, at the start of the function the |
el13jar | 1:d7cfd0e55682 | 172 | mbed led bus(leds) is set to 15, which turns all the leds on and at the end set |
el13jar | 1:d7cfd0e55682 | 173 | to 0, which turns them all off again. |
el13jar | 1:d7cfd0e55682 | 174 | [writeDataToFile (time and date , distance)] |
el13jar | 1:d7cfd0e55682 | 175 | @param a - bufferdata |
el13jar | 1:d7cfd0e55682 | 176 | @param b - distancedata |
el13jar | 1:d7cfd0e55682 | 177 | @author Dr Craig A. Evans (University Of Leeds) |
el13jar | 1:d7cfd0e55682 | 178 | */ |
el13jar | 1:d7cfd0e55682 | 179 | void writeDataToFile(char* bufferdata,float distancedata); |
el13jar | 1:d7cfd0e55682 | 180 |