Uses the SRF02 UDS and displays distance in a variety of ways on the N5110 LCD.

Dependencies:   N5110WN PowerControl SRF02 mbed

Committer:
JakBlackburn
Date:
Fri May 08 09:08:25 2015 +0000
Revision:
11:2b3d646e3bfb
Parent:
9:163159830eaf
updated docs

Who changed what in which revision?

UserRevisionLine numberNew 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 11:2b3d646e3bfb 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 9:163159830eaf 112 char buffer[30]; /*!<buffer used to store time and date string */
JakBlackburn 3:00933efbe463 113 char rxString[16]; /*!< buffer to store received string */
JakBlackburn 3:00933efbe463 114 LocalFileSystem local("local"); /*!< create local filesystem */
JakBlackburn 9:163159830eaf 115 float array[84];/*!< creates an array that stores data */
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 9:163159830eaf 119 float PrevArray[84];/*!< creates an array that stores Previous graph data */
JakBlackburn 9:163159830eaf 120 char Gbuffer[30]; /*!<buffer used to store time string */
JakBlackburn 1:7f151ab172cb 121 // ---- functions ----
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 9:163159830eaf 204 sets the parameters for the fifth visual mode
JakBlackburn 9:163159830eaf 205 */
JakBlackburn 9:163159830eaf 206 void LCDVis4();
JakBlackburn 9:163159830eaf 207 /**
JakBlackburn 7:962b5f044a9b 208 sets an image of a car in pixels
JakBlackburn 4:2e9aa626a02c 209 */
JakBlackburn 4:2e9aa626a02c 210 void car();
JakBlackburn 7:962b5f044a9b 211 /**
JakBlackburn 7:962b5f044a9b 212 Used for power saving
JakBlackburn 7:962b5f044a9b 213 */
JakBlackburn 7:962b5f044a9b 214 int semihost_powerdown();
JakBlackburn 1:7f151ab172cb 215
JakBlackburn 7:962b5f044a9b 216 //----Structs----
JakBlackburn 1:7f151ab172cb 217 typedef const struct State STyp; /*!< defines the struct type */
JakBlackburn 1:7f151ab172cb 218 /**
JakBlackburn 7:962b5f044a9b 219 Sets the structure for the units FSM
JakBlackburn 1:7f151ab172cb 220 */
JakBlackburn 1:7f151ab172cb 221 struct State {
JakBlackburn 1:7f151ab172cb 222 float unitMultiple; /*!< float that stores the unit mulitple */
JakBlackburn 2:a1eaa4d74b63 223 const char *Unit; /*!<stores the sting value of the unit */
JakBlackburn 1:7f151ab172cb 224 int nextState[2]; /*!< array of next states */
JakBlackburn 1:7f151ab172cb 225 };
JakBlackburn 1:7f151ab172cb 226
JakBlackburn 1:7f151ab172cb 227 /**
JakBlackburn 1:7f151ab172cb 228 @brief sets the Finite State Machine for the Unit toggle.
JakBlackburn 1:7f151ab172cb 229 */
JakBlackburn 1:7f151ab172cb 230 STyp fsm[3] = {
JakBlackburn 2:a1eaa4d74b63 231 {1,"cm",{0,1}}, /*!< State 0: stays in the current state unless input is recieved */
JakBlackburn 2:a1eaa4d74b63 232 {0.01,"m",{1,2}}, /*!< State 1: stays in the current state unless input is recieved */
JakBlackburn 2:a1eaa4d74b63 233 {10,"mm",{2,0}} /*!< State 2: stays in the current state unless input is recieved */
JakBlackburn 1:7f151ab172cb 234 };
JakBlackburn 1:7f151ab172cb 235 int state=0;/*!< sets the initial state */
JakBlackburn 1:7f151ab172cb 236
JakBlackburn 3:00933efbe463 237 typedef const struct VState VSTyp; /*!< defines the struct type */
JakBlackburn 3:00933efbe463 238 /**
JakBlackburn 7:962b5f044a9b 239 Sets the structure for the visual change FSM
JakBlackburn 3:00933efbe463 240 */
JakBlackburn 3:00933efbe463 241 struct VState {
JakBlackburn 3:00933efbe463 242 int visual; /*!< integer that stores the visual mode */
JakBlackburn 3:00933efbe463 243 int nextState[2]; /*!< array of next states */
JakBlackburn 3:00933efbe463 244 };
JakBlackburn 3:00933efbe463 245
JakBlackburn 3:00933efbe463 246 /**
JakBlackburn 3:00933efbe463 247 @brief sets the Finite State Machine for the Visual toggle.
JakBlackburn 3:00933efbe463 248 */
JakBlackburn 9:163159830eaf 249 VSTyp Vfsm[5] = {
JakBlackburn 3:00933efbe463 250 {0,{0,1}}, /*!< State 0: stays in the current state unless input is recieved */
JakBlackburn 3:00933efbe463 251 {1,{1,2}}, /*!< State 1: stays in the current state unless input is recieved */
JakBlackburn 4:2e9aa626a02c 252 {2,{2,3}}, /*!< State 2: stays in the current state unless input is recieved */
JakBlackburn 9:163159830eaf 253 {3,{3,4}}, /*!< State 3: stays in the current state unless input is recieved */
JakBlackburn 9:163159830eaf 254 {4,{4,0}} /*!< State 3: stays in the current state unless input is recieved */
JakBlackburn 3:00933efbe463 255 };
JakBlackburn 3:00933efbe463 256 int Vstate=0;/*!< sets the initial state */
JakBlackburn 3:00933efbe463 257
JakBlackburn 1:7f151ab172cb 258 #endif
JakBlackburn 1:7f151ab172cb 259
JakBlackburn 1:7f151ab172cb 260