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