Uses the SRF02 UDS and displays distance in a variety of ways on the N5110 LCD.
Dependencies: N5110WN PowerControl SRF02 mbed
main.h@8:ffcde84b8cf3, 2015-04-30 (annotated)
- Committer:
- JakBlackburn
- Date:
- Thu Apr 30 17:12:41 2015 +0000
- Revision:
- 8:ffcde84b8cf3
- Parent:
- 7:962b5f044a9b
- Child:
- 9:163159830eaf
updated documentation;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JakBlackburn | 1:7f151ab172cb | 1 | /** |
JakBlackburn | 1:7f151ab172cb | 2 | @file main.h |
JakBlackburn | 1:7f151ab172cb | 3 | @brief Header file containng function prototypes, defines and global variables. |
JakBlackburn | 8:ffcde84b8cf3 | 4 | @brief Ultra-sonic Distance Sensor |
JakBlackburn | 1:7f151ab172cb | 5 | @author Jakobi Blackburn |
JakBlackburn | 1:7f151ab172cb | 6 | @date 13 March 2015 |
JakBlackburn | 1:7f151ab172cb | 7 | */ |
JakBlackburn | 1:7f151ab172cb | 8 | #ifndef MAIN_H |
JakBlackburn | 1:7f151ab172cb | 9 | #define MAIN_H |
JakBlackburn | 1:7f151ab172cb | 10 | |
JakBlackburn | 1:7f151ab172cb | 11 | #define PI 3.14159265359 |
JakBlackburn | 7:962b5f044a9b | 12 | #define USR_POWERDOWN (0x104) |
JakBlackburn | 1:7f151ab172cb | 13 | |
JakBlackburn | 1:7f151ab172cb | 14 | #include "mbed.h" |
JakBlackburn | 1:7f151ab172cb | 15 | #include "PowerControl/PowerControl.h" |
JakBlackburn | 1:7f151ab172cb | 16 | #include "PowerControl/EthernetPowerControl.h" |
JakBlackburn | 1:7f151ab172cb | 17 | #include "Speaker.h" |
JakBlackburn | 1:7f151ab172cb | 18 | #include "N5110.h" |
JakBlackburn | 1:7f151ab172cb | 19 | #include "SRF02/SRF02.h" |
JakBlackburn | 1:7f151ab172cb | 20 | |
JakBlackburn | 8:ffcde84b8cf3 | 21 | // --- Inputs --- |
JakBlackburn | 1:7f151ab172cb | 22 | /** |
JakBlackburn | 1:7f151ab172cb | 23 | @namespace UnitTog |
JakBlackburn | 1:7f151ab172cb | 24 | @brief An Interrupt button that toggles the Unit |
JakBlackburn | 1:7f151ab172cb | 25 | */ |
JakBlackburn | 1:7f151ab172cb | 26 | InterruptIn UnitTog(p14); |
JakBlackburn | 5:f9b97f057836 | 27 | |
JakBlackburn | 1:7f151ab172cb | 28 | /** |
JakBlackburn | 1:7f151ab172cb | 29 | @namespace LogTog |
JakBlackburn | 1:7f151ab172cb | 30 | @brief An Interrupt button that toggles the Logging Capabilities |
JakBlackburn | 1:7f151ab172cb | 31 | */ |
JakBlackburn | 1:7f151ab172cb | 32 | InterruptIn LogTog(p16); |
JakBlackburn | 1:7f151ab172cb | 33 | /** |
JakBlackburn | 1:7f151ab172cb | 34 | @namespace VisTog |
JakBlackburn | 1:7f151ab172cb | 35 | @brief An Interrupt button that changes the visual representation of the data |
JakBlackburn | 1:7f151ab172cb | 36 | */ |
JakBlackburn | 1:7f151ab172cb | 37 | InterruptIn VisTog(p17); |
JakBlackburn | 1:7f151ab172cb | 38 | /** |
JakBlackburn | 1:7f151ab172cb | 39 | @namespace BuzVol |
JakBlackburn | 1:7f151ab172cb | 40 | @brief An Analogue input (Potentiometer) that is used to change the volume of the buzzer |
JakBlackburn | 1:7f151ab172cb | 41 | */ |
JakBlackburn | 1:7f151ab172cb | 42 | AnalogIn BuzVol(p19); |
JakBlackburn | 1:7f151ab172cb | 43 | /** |
JakBlackburn | 1:7f151ab172cb | 44 | @namespace BLEDLevel |
JakBlackburn | 1:7f151ab172cb | 45 | @brief An Analogue input (Potentiometer) that is used to change the backlight of the LCD screen |
JakBlackburn | 1:7f151ab172cb | 46 | */ |
JakBlackburn | 1:7f151ab172cb | 47 | AnalogIn BLEDLevel(p20); |
JakBlackburn | 1:7f151ab172cb | 48 | /** |
JakBlackburn | 1:7f151ab172cb | 49 | @namespace sensor |
JakBlackburn | 1:7f151ab172cb | 50 | @brief Ultra-Sonic distance sensor requires SDA and SCL lines |
JakBlackburn | 1:7f151ab172cb | 51 | */ |
JakBlackburn | 1:7f151ab172cb | 52 | SRF02 sensor(p28,p27);//SDA SCL |
JakBlackburn | 1:7f151ab172cb | 53 | |
JakBlackburn | 8:ffcde84b8cf3 | 54 | // --- Outputs --- |
JakBlackburn | 1:7f151ab172cb | 55 | /** |
JakBlackburn | 1:7f151ab172cb | 56 | @namespace N5110 LCD |
JakBlackburn | 1:7f151ab172cb | 57 | @brief An LCD screen that requires |
JakBlackburn | 1:7f151ab172cb | 58 | @brief Pinout VCC,SCE,RST,D/C,MOSI,SCLK,LED |
JakBlackburn | 1:7f151ab172cb | 59 | */ |
JakBlackburn | 1:7f151ab172cb | 60 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); |
JakBlackburn | 1:7f151ab172cb | 61 | /** |
JakBlackburn | 1:7f151ab172cb | 62 | @namespace Buzzer |
JakBlackburn | 8:ffcde84b8cf3 | 63 | @brief A buzzer that can produce different notes dependant on the frquency of |
JakBlackburn | 8:ffcde84b8cf3 | 64 | @brief the signal inputted to it. Used as an auditory alert |
JakBlackburn | 1:7f151ab172cb | 65 | */ |
JakBlackburn | 1:7f151ab172cb | 66 | Speaker Buzzer(p18); |
JakBlackburn | 1:7f151ab172cb | 67 | /** |
JakBlackburn | 1:7f151ab172cb | 68 | @namespace BLED |
JakBlackburn | 1:7f151ab172cb | 69 | @brief The backlight of the LCD screen. Brightness can be changed via Pulse Width Modulation |
JakBlackburn | 1:7f151ab172cb | 70 | */ |
JakBlackburn | 1:7f151ab172cb | 71 | PwmOut BLED(p26); |
JakBlackburn | 1:7f151ab172cb | 72 | /** |
JakBlackburn | 1:7f151ab172cb | 73 | @namespace WLED |
JakBlackburn | 1:7f151ab172cb | 74 | @brief A LED used as visual warning |
JakBlackburn | 1:7f151ab172cb | 75 | */ |
JakBlackburn | 1:7f151ab172cb | 76 | DigitalOut WLED(p21); |
JakBlackburn | 1:7f151ab172cb | 77 | /** |
JakBlackburn | 1:7f151ab172cb | 78 | @namespace LLED |
JakBlackburn | 1:7f151ab172cb | 79 | @brief A LED used to show Logging is off/on |
JakBlackburn | 1:7f151ab172cb | 80 | */ |
JakBlackburn | 1:7f151ab172cb | 81 | DigitalOut LLED(p29); |
JakBlackburn | 1:7f151ab172cb | 82 | /** |
JakBlackburn | 1:7f151ab172cb | 83 | @namespace pc |
JakBlackburn | 1:7f151ab172cb | 84 | @brief Serial output used mainly for debugging. |
JakBlackburn | 1:7f151ab172cb | 85 | @brief Pinout TX, RX |
JakBlackburn | 1:7f151ab172cb | 86 | */ |
JakBlackburn | 1:7f151ab172cb | 87 | Serial pc(USBTX,USBRX);// the tx and rx respectively |
JakBlackburn | 1:7f151ab172cb | 88 | /** |
JakBlackburn | 1:7f151ab172cb | 89 | @namespace leds |
JakBlackburn | 1:7f151ab172cb | 90 | @brief leds used to display error messages and when the file is being written too |
JakBlackburn | 1:7f151ab172cb | 91 | */ |
JakBlackburn | 1:7f151ab172cb | 92 | BusOut leds(LED4,LED3,LED2,LED1); |
JakBlackburn | 1:7f151ab172cb | 93 | |
JakBlackburn | 1:7f151ab172cb | 94 | |
JakBlackburn | 1:7f151ab172cb | 95 | // ---- Variables ---- |
JakBlackburn | 1:7f151ab172cb | 96 | |
JakBlackburn | 1:7f151ab172cb | 97 | float volume=1; /*!< float used to vary the volume */ |
JakBlackburn | 1:7f151ab172cb | 98 | int distance; /*!< integer that stores the distance */ |
JakBlackburn | 1:7f151ab172cb | 99 | float unitX=1; /*!< Float that stores the unit multiple if 1 unit is cm, 0.01 = m, 10 = mm */ |
JakBlackburn | 3:00933efbe463 | 100 | const char *units ="cm"; /*!< string of characters that stores the unit */ |
JakBlackburn | 3:00933efbe463 | 101 | int visual =0;/*!< integer that stores the visual display mode */ |
JakBlackburn | 1:7f151ab172cb | 102 | |
JakBlackburn | 1:7f151ab172cb | 103 | // ---- Flags ---- |
JakBlackburn | 1:7f151ab172cb | 104 | int timerFlag=0; /*!< flag used to trigger the timer ISR */ |
JakBlackburn | 5:f9b97f057836 | 105 | int timer2Flag=0; /*!< flag used to trigger the 2nd timer ISR */ |
JakBlackburn | 5:f9b97f057836 | 106 | int timer3Flag=0; /*!< flag used to trigger the 3nd timer ISR */ |
JakBlackburn | 1:7f151ab172cb | 107 | int setTimeFlag = 0; /*!< flag for ISR for setting time */ |
JakBlackburn | 1:7f151ab172cb | 108 | int logButtonFlag = 0; /*!<flag for button toggle */ |
JakBlackburn | 1:7f151ab172cb | 109 | |
JakBlackburn | 1:7f151ab172cb | 110 | // ---- MISC ---- |
JakBlackburn | 6:a5cd7eb72264 | 111 | char Dbuffer [20];/*!<buffer used to store distance string */ |
JakBlackburn | 5:f9b97f057836 | 112 | char buffer[30]; /*!<buffer used to store time string */ |
JakBlackburn | 3:00933efbe463 | 113 | char rxString[16]; /*!< buffer to store received string */ |
JakBlackburn | 3:00933efbe463 | 114 | LocalFileSystem local("local"); /*!< create local filesystem */ |
JakBlackburn | 1:7f151ab172cb | 115 | |
JakBlackburn | 5:f9b97f057836 | 116 | Ticker timer; /*!< timer for first speed */ |
JakBlackburn | 5:f9b97f057836 | 117 | Ticker timer2;/*!< timer for second speed */ |
JakBlackburn | 5:f9b97f057836 | 118 | Ticker timer3;/*!< timer for third speed */ |
JakBlackburn | 1:7f151ab172cb | 119 | |
JakBlackburn | 1:7f151ab172cb | 120 | // ---- functions ---- |
JakBlackburn | 5:f9b97f057836 | 121 | |
JakBlackburn | 8:ffcde84b8cf3 | 122 | /** |
JakBlackburn | 8:ffcde84b8cf3 | 123 | Contains the main code |
JakBlackburn | 8:ffcde84b8cf3 | 124 | */ |
JakBlackburn | 5:f9b97f057836 | 125 | void theMain(); |
JakBlackburn | 1:7f151ab172cb | 126 | /** |
JakBlackburn | 1:7f151ab172cb | 127 | deals with the visual and audiable alerts. |
JakBlackburn | 1:7f151ab172cb | 128 | */ |
JakBlackburn | 1:7f151ab172cb | 129 | void warnings(); |
JakBlackburn | 1:7f151ab172cb | 130 | /** |
JakBlackburn | 1:7f151ab172cb | 131 | takes 10 distances and averages them. |
JakBlackburn | 1:7f151ab172cb | 132 | @returns The distance between the Sensor and the nearest object infront of it |
JakBlackburn | 1:7f151ab172cb | 133 | */ |
JakBlackburn | 1:7f151ab172cb | 134 | float getDistance(); |
JakBlackburn | 1:7f151ab172cb | 135 | /** |
JakBlackburn | 1:7f151ab172cb | 136 | changes the units cm/m/mm |
JakBlackburn | 1:7f151ab172cb | 137 | */ |
JakBlackburn | 3:00933efbe463 | 138 | void unitToggle(); |
JakBlackburn | 3:00933efbe463 | 139 | /** |
JakBlackburn | 3:00933efbe463 | 140 | changes the visual display |
JakBlackburn | 3:00933efbe463 | 141 | */ |
JakBlackburn | 3:00933efbe463 | 142 | void visToggle(); |
JakBlackburn | 1:7f151ab172cb | 143 | /** |
JakBlackburn | 1:7f151ab172cb | 144 | ISR used for the timer |
JakBlackburn | 1:7f151ab172cb | 145 | */ |
JakBlackburn | 1:7f151ab172cb | 146 | void timerExpired(); |
JakBlackburn | 1:7f151ab172cb | 147 | /** |
JakBlackburn | 5:f9b97f057836 | 148 | ISR used for the 2nd timer |
JakBlackburn | 1:7f151ab172cb | 149 | */ |
JakBlackburn | 5:f9b97f057836 | 150 | void timer2Expired(); |
JakBlackburn | 5:f9b97f057836 | 151 | /** |
JakBlackburn | 5:f9b97f057836 | 152 | ISR used for the 3rd timer |
JakBlackburn | 5:f9b97f057836 | 153 | */ |
JakBlackburn | 5:f9b97f057836 | 154 | void timer3Expired(); |
JakBlackburn | 5:f9b97f057836 | 155 | |
JakBlackburn | 1:7f151ab172cb | 156 | /** |
JakBlackburn | 1:7f151ab172cb | 157 | Displays an error message on the Mbed LEDs |
JakBlackburn | 3:00933efbe463 | 158 | @brief The error message show is up to 14. IF 15 shown it is a ack bit error for the SRF02 |
JakBlackburn | 1:7f151ab172cb | 159 | @param E - Error Code |
JakBlackburn | 3:00933efbe463 | 160 | @returns flashing Mbed LEDs signifying the error |
JakBlackburn | 1:7f151ab172cb | 161 | */ |
JakBlackburn | 1:7f151ab172cb | 162 | void error(int E); |
JakBlackburn | 3:00933efbe463 | 163 | /** |
JakBlackburn | 4:2e9aa626a02c | 164 | ISR for the LOGTOG button Toggling |
JakBlackburn | 4:2e9aa626a02c | 165 | @brief logging Capabilities |
JakBlackburn | 3:00933efbe463 | 166 | */ |
JakBlackburn | 4:2e9aa626a02c | 167 | void logToggle(); |
JakBlackburn | 3:00933efbe463 | 168 | /** |
JakBlackburn | 4:2e9aa626a02c | 169 | Takes the time and temperature value |
JakBlackburn | 4:2e9aa626a02c | 170 | @brief and inserts them into a CSV file |
JakBlackburn | 4:2e9aa626a02c | 171 | @param char* data |
JakBlackburn | 4:2e9aa626a02c | 172 | @param float data1 |
JakBlackburn | 3:00933efbe463 | 173 | */ |
JakBlackburn | 3:00933efbe463 | 174 | void logging(char* data,float data1); |
JakBlackburn | 3:00933efbe463 | 175 | /** |
JakBlackburn | 3:00933efbe463 | 176 | ISR for the serial port |
JakBlackburn | 3:00933efbe463 | 177 | */ |
JakBlackburn | 3:00933efbe463 | 178 | void serialISR(); |
JakBlackburn | 3:00933efbe463 | 179 | /** |
JakBlackburn | 3:00933efbe463 | 180 | function to set the UNIX time |
JakBlackburn | 3:00933efbe463 | 181 | */ |
JakBlackburn | 3:00933efbe463 | 182 | void setTime(); |
JakBlackburn | 3:00933efbe463 | 183 | /** |
JakBlackburn | 3:00933efbe463 | 184 | Plays a set of frequencies through the buzzer creating a tune |
JakBlackburn | 3:00933efbe463 | 185 | */ |
JakBlackburn | 3:00933efbe463 | 186 | void introTune(); |
JakBlackburn | 3:00933efbe463 | 187 | /** |
JakBlackburn | 3:00933efbe463 | 188 | sets the parameters for the first visual mode |
JakBlackburn | 3:00933efbe463 | 189 | */ |
JakBlackburn | 3:00933efbe463 | 190 | void LCDVis0(); |
JakBlackburn | 3:00933efbe463 | 191 | /** |
JakBlackburn | 3:00933efbe463 | 192 | sets the parameters for the second visual mode |
JakBlackburn | 3:00933efbe463 | 193 | */ |
JakBlackburn | 3:00933efbe463 | 194 | void LCDVis1(); |
JakBlackburn | 3:00933efbe463 | 195 | /** |
JakBlackburn | 3:00933efbe463 | 196 | sets the parameters for the third visual mode |
JakBlackburn | 3:00933efbe463 | 197 | */ |
JakBlackburn | 3:00933efbe463 | 198 | void LCDVis2(); |
JakBlackburn | 4:2e9aa626a02c | 199 | /** |
JakBlackburn | 4:2e9aa626a02c | 200 | sets the parameters for the fourth visual mode |
JakBlackburn | 4:2e9aa626a02c | 201 | */ |
JakBlackburn | 4:2e9aa626a02c | 202 | void LCDVis3(); |
JakBlackburn | 4:2e9aa626a02c | 203 | /** |
JakBlackburn | 7:962b5f044a9b | 204 | sets an image of a car in pixels |
JakBlackburn | 4:2e9aa626a02c | 205 | */ |
JakBlackburn | 4:2e9aa626a02c | 206 | void car(); |
JakBlackburn | 7:962b5f044a9b | 207 | /** |
JakBlackburn | 7:962b5f044a9b | 208 | Used for power saving |
JakBlackburn | 7:962b5f044a9b | 209 | */ |
JakBlackburn | 7:962b5f044a9b | 210 | int semihost_powerdown(); |
JakBlackburn | 1:7f151ab172cb | 211 | |
JakBlackburn | 7:962b5f044a9b | 212 | //----Structs---- |
JakBlackburn | 1:7f151ab172cb | 213 | typedef const struct State STyp; /*!< defines the struct type */ |
JakBlackburn | 1:7f151ab172cb | 214 | /** |
JakBlackburn | 7:962b5f044a9b | 215 | Sets the structure for the units FSM |
JakBlackburn | 1:7f151ab172cb | 216 | */ |
JakBlackburn | 1:7f151ab172cb | 217 | struct State { |
JakBlackburn | 1:7f151ab172cb | 218 | float unitMultiple; /*!< float that stores the unit mulitple */ |
JakBlackburn | 2:a1eaa4d74b63 | 219 | const char *Unit; /*!<stores the sting value of the unit */ |
JakBlackburn | 1:7f151ab172cb | 220 | int nextState[2]; /*!< array of next states */ |
JakBlackburn | 1:7f151ab172cb | 221 | }; |
JakBlackburn | 1:7f151ab172cb | 222 | |
JakBlackburn | 1:7f151ab172cb | 223 | /** |
JakBlackburn | 1:7f151ab172cb | 224 | @brief sets the Finite State Machine for the Unit toggle. |
JakBlackburn | 1:7f151ab172cb | 225 | */ |
JakBlackburn | 1:7f151ab172cb | 226 | STyp fsm[3] = { |
JakBlackburn | 2:a1eaa4d74b63 | 227 | {1,"cm",{0,1}}, /*!< State 0: stays in the current state unless input is recieved */ |
JakBlackburn | 2:a1eaa4d74b63 | 228 | {0.01,"m",{1,2}}, /*!< State 1: stays in the current state unless input is recieved */ |
JakBlackburn | 2:a1eaa4d74b63 | 229 | {10,"mm",{2,0}} /*!< State 2: stays in the current state unless input is recieved */ |
JakBlackburn | 1:7f151ab172cb | 230 | }; |
JakBlackburn | 1:7f151ab172cb | 231 | int state=0;/*!< sets the initial state */ |
JakBlackburn | 1:7f151ab172cb | 232 | |
JakBlackburn | 3:00933efbe463 | 233 | typedef const struct VState VSTyp; /*!< defines the struct type */ |
JakBlackburn | 3:00933efbe463 | 234 | /** |
JakBlackburn | 7:962b5f044a9b | 235 | Sets the structure for the visual change FSM |
JakBlackburn | 3:00933efbe463 | 236 | */ |
JakBlackburn | 3:00933efbe463 | 237 | struct VState { |
JakBlackburn | 3:00933efbe463 | 238 | int visual; /*!< integer that stores the visual mode */ |
JakBlackburn | 3:00933efbe463 | 239 | int nextState[2]; /*!< array of next states */ |
JakBlackburn | 3:00933efbe463 | 240 | }; |
JakBlackburn | 3:00933efbe463 | 241 | |
JakBlackburn | 3:00933efbe463 | 242 | /** |
JakBlackburn | 3:00933efbe463 | 243 | @brief sets the Finite State Machine for the Visual toggle. |
JakBlackburn | 3:00933efbe463 | 244 | */ |
JakBlackburn | 4:2e9aa626a02c | 245 | VSTyp Vfsm[4] = { |
JakBlackburn | 3:00933efbe463 | 246 | {0,{0,1}}, /*!< State 0: stays in the current state unless input is recieved */ |
JakBlackburn | 3:00933efbe463 | 247 | {1,{1,2}}, /*!< State 1: stays in the current state unless input is recieved */ |
JakBlackburn | 4:2e9aa626a02c | 248 | {2,{2,3}}, /*!< State 2: stays in the current state unless input is recieved */ |
JakBlackburn | 4:2e9aa626a02c | 249 | {3,{3,0}} /*!< State 3: stays in the current state unless input is recieved */ |
JakBlackburn | 3:00933efbe463 | 250 | }; |
JakBlackburn | 3:00933efbe463 | 251 | int Vstate=0;/*!< sets the initial state */ |
JakBlackburn | 3:00933efbe463 | 252 | |
JakBlackburn | 1:7f151ab172cb | 253 | #endif |
JakBlackburn | 1:7f151ab172cb | 254 | |
JakBlackburn | 1:7f151ab172cb | 255 |