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 Mar 20 11:46:08 2015 +0000
Revision:
1:7f151ab172cb
Child:
2:a1eaa4d74b63
Added RTC and logging capabilities

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 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 1:7f151ab172cb 104 //string units;
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 1:7f151ab172cb 154
JakBlackburn 1:7f151ab172cb 155
JakBlackburn 1:7f151ab172cb 156 typedef const struct State STyp; /*!< defines the struct type */
JakBlackburn 1:7f151ab172cb 157 /**
JakBlackburn 1:7f151ab172cb 158 Sets the struct
JakBlackburn 1:7f151ab172cb 159 */
JakBlackburn 1:7f151ab172cb 160 struct State {
JakBlackburn 1:7f151ab172cb 161 float unitMultiple; /*!< float that stores the unit mulitple */
JakBlackburn 1:7f151ab172cb 162 // Unit; /*!<stores the sting value of the unit */
JakBlackburn 1:7f151ab172cb 163 int nextState[2]; /*!< array of next states */
JakBlackburn 1:7f151ab172cb 164 };
JakBlackburn 1:7f151ab172cb 165
JakBlackburn 1:7f151ab172cb 166 /**
JakBlackburn 1:7f151ab172cb 167 @brief sets the Finite State Machine for the Unit toggle.
JakBlackburn 1:7f151ab172cb 168 */
JakBlackburn 1:7f151ab172cb 169 STyp fsm[3] = {
JakBlackburn 1:7f151ab172cb 170 {1,{0,1}}, /*!< State 0: stays in the current state unless input is recieved */
JakBlackburn 1:7f151ab172cb 171 {0.01,{1,2}}, /*!< State 1: stays in the current state unless input is recieved */
JakBlackburn 1:7f151ab172cb 172 {10,{2,0}} /*!< State 2: stays in the current state unless input is recieved */
JakBlackburn 1:7f151ab172cb 173 };
JakBlackburn 1:7f151ab172cb 174 int state=0;/*!< sets the initial state */
JakBlackburn 1:7f151ab172cb 175
JakBlackburn 1:7f151ab172cb 176
JakBlackburn 1:7f151ab172cb 177
JakBlackburn 1:7f151ab172cb 178 #endif
JakBlackburn 1:7f151ab172cb 179
JakBlackburn 1:7f151ab172cb 180