Distance Sensor Project using the SRF02 ultrasonic distance sensor and N5110 lcd display.

Dependencies:   N5110 PowerControl SRF02 mbed

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?

UserRevisionLine numberNew 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