Uses the SRF02 UDS and displays distance in a variety of ways on the N5110 LCD.
Dependencies: N5110WN PowerControl SRF02 mbed
main.h@2:a1eaa4d74b63, 2015-03-20 (annotated)
- Committer:
- JakBlackburn
- Date:
- Fri Mar 20 17:25:39 2015 +0000
- Revision:
- 2:a1eaa4d74b63
- Parent:
- 1:7f151ab172cb
- Child:
- 3:00933efbe463
added units to the FSM using const char
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 | 1:7f151ab172cb | 103 | int U=0; /*!< integer used to define the units. if 0 cm, 1 is m, 2 is mm */ |
JakBlackburn | 2:a1eaa4d74b63 | 104 | const char *units ="cm"; |
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 | 1:7f151ab172cb | 112 | char rxString[16]; // buffer to store received string |
JakBlackburn | 1:7f151ab172cb | 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 | 1:7f151ab172cb | 130 | void unitToggle(); |
JakBlackburn | 1:7f151ab172cb | 131 | /** |
JakBlackburn | 1:7f151ab172cb | 132 | ISR used for the timer |
JakBlackburn | 1:7f151ab172cb | 133 | */ |
JakBlackburn | 1:7f151ab172cb | 134 | void timerExpired(); |
JakBlackburn | 1:7f151ab172cb | 135 | /** |
JakBlackburn | 1:7f151ab172cb | 136 | sets the speed of the scanning, dependant on the distance |
JakBlackburn | 1:7f151ab172cb | 137 | */ |
JakBlackburn | 1:7f151ab172cb | 138 | void setScanSpeed(); |
JakBlackburn | 1:7f151ab172cb | 139 | /** |
JakBlackburn | 1:7f151ab172cb | 140 | Displays an error message on the Mbed LEDs |
JakBlackburn | 1:7f151ab172cb | 141 | @param E - Error Code |
JakBlackburn | 1:7f151ab172cb | 142 | */ |
JakBlackburn | 1:7f151ab172cb | 143 | void error(int E); |
JakBlackburn | 1:7f151ab172cb | 144 | |
JakBlackburn | 1:7f151ab172cb | 145 | |
JakBlackburn | 1:7f151ab172cb | 146 | void logButtonPressed(); |
JakBlackburn | 1:7f151ab172cb | 147 | |
JakBlackburn | 1:7f151ab172cb | 148 | void logging(char* data,float data1); |
JakBlackburn | 1:7f151ab172cb | 149 | |
JakBlackburn | 1:7f151ab172cb | 150 | void serialISR(); |
JakBlackburn | 1:7f151ab172cb | 151 | |
JakBlackburn | 1:7f151ab172cb | 152 | void setTime(); // function to set the UNIX time |
JakBlackburn | 1:7f151ab172cb | 153 | |
JakBlackburn | 2:a1eaa4d74b63 | 154 | void introTune(); |
JakBlackburn | 1:7f151ab172cb | 155 | |
JakBlackburn | 2:a1eaa4d74b63 | 156 | void checkerBoard(); |
JakBlackburn | 1:7f151ab172cb | 157 | |
JakBlackburn | 1:7f151ab172cb | 158 | typedef const struct State STyp; /*!< defines the struct type */ |
JakBlackburn | 1:7f151ab172cb | 159 | /** |
JakBlackburn | 1:7f151ab172cb | 160 | Sets the struct |
JakBlackburn | 1:7f151ab172cb | 161 | */ |
JakBlackburn | 1:7f151ab172cb | 162 | struct State { |
JakBlackburn | 1:7f151ab172cb | 163 | float unitMultiple; /*!< float that stores the unit mulitple */ |
JakBlackburn | 2:a1eaa4d74b63 | 164 | const char *Unit; /*!<stores the sting value of the unit */ |
JakBlackburn | 1:7f151ab172cb | 165 | int nextState[2]; /*!< array of next states */ |
JakBlackburn | 1:7f151ab172cb | 166 | }; |
JakBlackburn | 1:7f151ab172cb | 167 | |
JakBlackburn | 1:7f151ab172cb | 168 | /** |
JakBlackburn | 1:7f151ab172cb | 169 | @brief sets the Finite State Machine for the Unit toggle. |
JakBlackburn | 1:7f151ab172cb | 170 | */ |
JakBlackburn | 1:7f151ab172cb | 171 | STyp fsm[3] = { |
JakBlackburn | 2:a1eaa4d74b63 | 172 | {1,"cm",{0,1}}, /*!< State 0: stays in the current state unless input is recieved */ |
JakBlackburn | 2:a1eaa4d74b63 | 173 | {0.01,"m",{1,2}}, /*!< State 1: stays in the current state unless input is recieved */ |
JakBlackburn | 2:a1eaa4d74b63 | 174 | {10,"mm",{2,0}} /*!< State 2: stays in the current state unless input is recieved */ |
JakBlackburn | 1:7f151ab172cb | 175 | }; |
JakBlackburn | 1:7f151ab172cb | 176 | int state=0;/*!< sets the initial state */ |
JakBlackburn | 1:7f151ab172cb | 177 | |
JakBlackburn | 1:7f151ab172cb | 178 | |
JakBlackburn | 1:7f151ab172cb | 179 | |
JakBlackburn | 1:7f151ab172cb | 180 | #endif |
JakBlackburn | 1:7f151ab172cb | 181 | |
JakBlackburn | 1:7f151ab172cb | 182 |