Final revision to radar/distance measuring tool. Radar feature not implemented within time frame due to issues with hardware and mbed.org servers
Dependencies: N5110 PowerControl SRF02 mbed
main.cpp@0:ca83aafb7dcb, 2015-05-11 (annotated)
- Committer:
- el13k3s
- Date:
- Mon May 11 16:35:26 2015 +0000
- Revision:
- 0:ca83aafb7dcb
- Child:
- 1:d374bd09fa94
Initial commit - radar not working; ; 11 May 2015
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el13k3s | 0:ca83aafb7dcb | 1 | /** |
el13k3s | 0:ca83aafb7dcb | 2 | @file main.cpp |
el13k3s | 0:ca83aafb7dcb | 3 | @brief Radar/Distance Measurement program implementation |
el13k3s | 0:ca83aafb7dcb | 4 | @author Karina Sodipo |
el13k3s | 0:ca83aafb7dcb | 5 | @date May 2015 |
el13k3s | 0:ca83aafb7dcb | 6 | */ |
el13k3s | 0:ca83aafb7dcb | 7 | |
el13k3s | 0:ca83aafb7dcb | 8 | #include "mbed.h" |
el13k3s | 0:ca83aafb7dcb | 9 | #include "N5110.h" |
el13k3s | 0:ca83aafb7dcb | 10 | #include "SRF02.h" |
el13k3s | 0:ca83aafb7dcb | 11 | #include "PowerControl/PowerControl.h" |
el13k3s | 0:ca83aafb7dcb | 12 | #include "PowerControl/EthernetPowerControl.h" |
el13k3s | 0:ca83aafb7dcb | 13 | |
el13k3s | 0:ca83aafb7dcb | 14 | /** |
el13k3s | 0:ca83aafb7dcb | 15 | @see - mbed CookBook (Power Management) |
el13k3s | 0:ca83aafb7dcb | 16 | */ |
el13k3s | 0:ca83aafb7dcb | 17 | |
el13k3s | 0:ca83aafb7dcb | 18 | /// function to power down the USB interface |
el13k3s | 0:ca83aafb7dcb | 19 | #define USR_POWERDOWN (0x104) |
el13k3s | 0:ca83aafb7dcb | 20 | int semihost_powerdown() { |
el13k3s | 0:ca83aafb7dcb | 21 | uint32_t arg; |
el13k3s | 0:ca83aafb7dcb | 22 | return __semihost(USR_POWERDOWN, &arg); |
el13k3s | 0:ca83aafb7dcb | 23 | } |
el13k3s | 0:ca83aafb7dcb | 24 | |
el13k3s | 0:ca83aafb7dcb | 25 | |
el13k3s | 0:ca83aafb7dcb | 26 | /** |
el13k3s | 0:ca83aafb7dcb | 27 | @namespace lcd |
el13k3s | 0:ca83aafb7dcb | 28 | @brief LCD screen display with VCC,SCE,RST,D/C,MOSI,SCLK,LED pins |
el13k3s | 0:ca83aafb7dcb | 29 | */ |
el13k3s | 0:ca83aafb7dcb | 30 | N5110 lcd(p7,p8,p9,p10,p11,p13,p26); // |
el13k3s | 0:ca83aafb7dcb | 31 | |
el13k3s | 0:ca83aafb7dcb | 32 | /** |
el13k3s | 0:ca83aafb7dcb | 33 | @namespace sensor |
el13k3s | 0:ca83aafb7dcb | 34 | @brief SRF02 ultrasonic distance sensor |
el13k3s | 0:ca83aafb7dcb | 35 | */ |
el13k3s | 0:ca83aafb7dcb | 36 | SRF02 sensor(p28,p27); |
el13k3s | 0:ca83aafb7dcb | 37 | |
el13k3s | 0:ca83aafb7dcb | 38 | /** |
el13k3s | 0:ca83aafb7dcb | 39 | @namespace leds |
el13k3s | 0:ca83aafb7dcb | 40 | @brief the on-board mbed LEDs in a BusOut class |
el13k3s | 0:ca83aafb7dcb | 41 | */ |
el13k3s | 0:ca83aafb7dcb | 42 | BusOut leds(LED4,LED3,LED2,LED1); |
el13k3s | 0:ca83aafb7dcb | 43 | |
el13k3s | 0:ca83aafb7dcb | 44 | /** |
el13k3s | 0:ca83aafb7dcb | 45 | @namespace led |
el13k3s | 0:ca83aafb7dcb | 46 | @brief LED proximity indicator |
el13k3s | 0:ca83aafb7dcb | 47 | */ |
el13k3s | 0:ca83aafb7dcb | 48 | PwmOut led(p24); |
el13k3s | 0:ca83aafb7dcb | 49 | |
el13k3s | 0:ca83aafb7dcb | 50 | /** |
el13k3s | 0:ca83aafb7dcb | 51 | @namespace screenInvert |
el13k3s | 0:ca83aafb7dcb | 52 | @brief button to switch from black-on-white to white-on-black |
el13k3s | 0:ca83aafb7dcb | 53 | */ |
el13k3s | 0:ca83aafb7dcb | 54 | InterruptIn screenInvert(p16); |
el13k3s | 0:ca83aafb7dcb | 55 | |
el13k3s | 0:ca83aafb7dcb | 56 | /** |
el13k3s | 0:ca83aafb7dcb | 57 | @namespace unitSW |
el13k3s | 0:ca83aafb7dcb | 58 | @brief button to switch from cm to inches |
el13k3s | 0:ca83aafb7dcb | 59 | */ |
el13k3s | 0:ca83aafb7dcb | 60 | InterruptIn unitSW(p17); |
el13k3s | 0:ca83aafb7dcb | 61 | |
el13k3s | 0:ca83aafb7dcb | 62 | /** |
el13k3s | 0:ca83aafb7dcb | 63 | @namespace radarDist |
el13k3s | 0:ca83aafb7dcb | 64 | @brief slide switch toggling radar and distance displays |
el13k3s | 0:ca83aafb7dcb | 65 | */ |
el13k3s | 0:ca83aafb7dcb | 66 | InterruptIn radarDist(p18); |
el13k3s | 0:ca83aafb7dcb | 67 | |
el13k3s | 0:ca83aafb7dcb | 68 | /** |
el13k3s | 0:ca83aafb7dcb | 69 | @namespace POT |
el13k3s | 0:ca83aafb7dcb | 70 | @brief potentiometer to change backlight brightness on LCD screen |
el13k3s | 0:ca83aafb7dcb | 71 | */ |
el13k3s | 0:ca83aafb7dcb | 72 | AnalogIn POT(p20); |
el13k3s | 0:ca83aafb7dcb | 73 | |
el13k3s | 0:ca83aafb7dcb | 74 | /** |
el13k3s | 0:ca83aafb7dcb | 75 | @namespace buzzer |
el13k3s | 0:ca83aafb7dcb | 76 | @brief Piezo buzzer for audio alerts (distance below 50cm / 20inch threshold AND countdown to sensor update) |
el13k3s | 0:ca83aafb7dcb | 77 | */ |
el13k3s | 0:ca83aafb7dcb | 78 | PwmOut buzzer(p21); |
el13k3s | 0:ca83aafb7dcb | 79 | |
el13k3s | 0:ca83aafb7dcb | 80 | |
el13k3s | 0:ca83aafb7dcb | 81 | |
el13k3s | 0:ca83aafb7dcb | 82 | /// function to display the checkerboard pattern |
el13k3s | 0:ca83aafb7dcb | 83 | void checkerboard(); |
el13k3s | 0:ca83aafb7dcb | 84 | |
el13k3s | 0:ca83aafb7dcb | 85 | /// function for LED and Piezo alerts in CM |
el13k3s | 0:ca83aafb7dcb | 86 | void proximityCm(); |
el13k3s | 0:ca83aafb7dcb | 87 | |
el13k3s | 0:ca83aafb7dcb | 88 | /// function for LED and Piezo alerts in INCHES |
el13k3s | 0:ca83aafb7dcb | 89 | void proximityIn(); |
el13k3s | 0:ca83aafb7dcb | 90 | |
el13k3s | 0:ca83aafb7dcb | 91 | /// function to define states of screenInvert button |
el13k3s | 0:ca83aafb7dcb | 92 | void initDisplay(); |
el13k3s | 0:ca83aafb7dcb | 93 | |
el13k3s | 0:ca83aafb7dcb | 94 | /// function to define states of unitsSW button |
el13k3s | 0:ca83aafb7dcb | 95 | void initMeasureIn(); |
el13k3s | 0:ca83aafb7dcb | 96 | |
el13k3s | 0:ca83aafb7dcb | 97 | /// function for potentiometer to change screen brightness |
el13k3s | 0:ca83aafb7dcb | 98 | void brightness(); |
el13k3s | 0:ca83aafb7dcb | 99 | |
el13k3s | 0:ca83aafb7dcb | 100 | /// function to display readings/radar in black-on-white mode |
el13k3s | 0:ca83aafb7dcb | 101 | void normal(); |
el13k3s | 0:ca83aafb7dcb | 102 | |
el13k3s | 0:ca83aafb7dcb | 103 | /// function to display readings/radar in white-on-black mode |
el13k3s | 0:ca83aafb7dcb | 104 | void invert(); |
el13k3s | 0:ca83aafb7dcb | 105 | |
el13k3s | 0:ca83aafb7dcb | 106 | /// function to measure distance in cm |
el13k3s | 0:ca83aafb7dcb | 107 | void centimetre(); |
el13k3s | 0:ca83aafb7dcb | 108 | |
el13k3s | 0:ca83aafb7dcb | 109 | /// function to measure distance in inches |
el13k3s | 0:ca83aafb7dcb | 110 | void inches(); |
el13k3s | 0:ca83aafb7dcb | 111 | |
el13k3s | 0:ca83aafb7dcb | 112 | /// function for radar display |
el13k3s | 0:ca83aafb7dcb | 113 | void radar(); |
el13k3s | 0:ca83aafb7dcb | 114 | |
el13k3s | 0:ca83aafb7dcb | 115 | |
el13k3s | 0:ca83aafb7dcb | 116 | |
el13k3s | 0:ca83aafb7dcb | 117 | /// buffer to store data sent to the screen |
el13k3s | 0:ca83aafb7dcb | 118 | char buffer[14]; |
el13k3s | 0:ca83aafb7dcb | 119 | |
el13k3s | 0:ca83aafb7dcb | 120 | /// Change units to measure distance in, modified in units() ISR |
el13k3s | 0:ca83aafb7dcb | 121 | int unit = 0; /*!< 'unit' toggled in units() ISR */ |
el13k3s | 0:ca83aafb7dcb | 122 | |
el13k3s | 0:ca83aafb7dcb | 123 | /// ISR for toggling between CM and INCH readings |
el13k3s | 0:ca83aafb7dcb | 124 | void units() { |
el13k3s | 0:ca83aafb7dcb | 125 | |
el13k3s | 0:ca83aafb7dcb | 126 | unit++; |
el13k3s | 0:ca83aafb7dcb | 127 | if (unit > 1) { // check whether unit modes stays within bounds |
el13k3s | 0:ca83aafb7dcb | 128 | unit = 0; |
el13k3s | 0:ca83aafb7dcb | 129 | } |
el13k3s | 0:ca83aafb7dcb | 130 | |
el13k3s | 0:ca83aafb7dcb | 131 | } |
el13k3s | 0:ca83aafb7dcb | 132 | |
el13k3s | 0:ca83aafb7dcb | 133 | |
el13k3s | 0:ca83aafb7dcb | 134 | |
el13k3s | 0:ca83aafb7dcb | 135 | /// pixel display style, modified in pixels() ISR |
el13k3s | 0:ca83aafb7dcb | 136 | int pixel = 0; /*!< 'pixel' set in pixels() ISR */ |
el13k3s | 0:ca83aafb7dcb | 137 | |
el13k3s | 0:ca83aafb7dcb | 138 | /// ISR for toggling between black-on-white and white-on-black display |
el13k3s | 0:ca83aafb7dcb | 139 | void pixels() { |
el13k3s | 0:ca83aafb7dcb | 140 | |
el13k3s | 0:ca83aafb7dcb | 141 | pixel++; |
el13k3s | 0:ca83aafb7dcb | 142 | if (pixel > 1) { // check whether display modes stays within bounds |
el13k3s | 0:ca83aafb7dcb | 143 | pixel = 0; |
el13k3s | 0:ca83aafb7dcb | 144 | } |
el13k3s | 0:ca83aafb7dcb | 145 | } |
el13k3s | 0:ca83aafb7dcb | 146 | |
el13k3s | 0:ca83aafb7dcb | 147 | |
el13k3s | 0:ca83aafb7dcb | 148 | |
el13k3s | 0:ca83aafb7dcb | 149 | int main() { |
el13k3s | 0:ca83aafb7dcb | 150 | |
el13k3s | 0:ca83aafb7dcb | 151 | /// Power down Ethernet interface to save ~ 175mW |
el13k3s | 0:ca83aafb7dcb | 152 | PHY_PowerDown(); |
el13k3s | 0:ca83aafb7dcb | 153 | |
el13k3s | 0:ca83aafb7dcb | 154 | /// Power down magic USB interface chip to save ~ 150mW |
el13k3s | 0:ca83aafb7dcb | 155 | int result = semihost_powerdown(); |
el13k3s | 0:ca83aafb7dcb | 156 | |
el13k3s | 0:ca83aafb7dcb | 157 | /// Disable clock on unused peripherals |
el13k3s | 0:ca83aafb7dcb | 158 | Peripheral_PowerDown(0x2000); /// CAN controller 1 |
el13k3s | 0:ca83aafb7dcb | 159 | Peripheral_PowerDown(0x4000); /// CAN controller 2 |
el13k3s | 0:ca83aafb7dcb | 160 | |
el13k3s | 0:ca83aafb7dcb | 161 | /// initialize the screen |
el13k3s | 0:ca83aafb7dcb | 162 | lcd.init(); |
el13k3s | 0:ca83aafb7dcb | 163 | |
el13k3s | 0:ca83aafb7dcb | 164 | /// call pixels() on rising edge when button pressed |
el13k3s | 0:ca83aafb7dcb | 165 | screenInvert.mode(PullUp); |
el13k3s | 0:ca83aafb7dcb | 166 | screenInvert.rise(&pixels); |
el13k3s | 0:ca83aafb7dcb | 167 | |
el13k3s | 0:ca83aafb7dcb | 168 | /// call units() on rising edge when button pressed |
el13k3s | 0:ca83aafb7dcb | 169 | unitSW.mode(PullUp); |
el13k3s | 0:ca83aafb7dcb | 170 | unitSW.rise(&units); |
el13k3s | 0:ca83aafb7dcb | 171 | |
el13k3s | 0:ca83aafb7dcb | 172 | /// switch to radar display - not |
el13k3s | 0:ca83aafb7dcb | 173 | radarDist.rise(&radar); |
el13k3s | 0:ca83aafb7dcb | 174 | |
el13k3s | 0:ca83aafb7dcb | 175 | /// switch to distance reader in cm |
el13k3s | 0:ca83aafb7dcb | 176 | radarDist.fall(¢imetre); |
el13k3s | 0:ca83aafb7dcb | 177 | |
el13k3s | 0:ca83aafb7dcb | 178 | /// Device welcome messages - print strings of characters at defined coordinates |
el13k3s | 0:ca83aafb7dcb | 179 | lcd.printString("Radar/Distance",0,1); |
el13k3s | 0:ca83aafb7dcb | 180 | lcd.printString("Measuring",15,3); |
el13k3s | 0:ca83aafb7dcb | 181 | lcd.printString("tool",30,5); |
el13k3s | 0:ca83aafb7dcb | 182 | wait(2); /// hold message for 2 secs |
el13k3s | 0:ca83aafb7dcb | 183 | lcd.refresh(); /// clear screen |
el13k3s | 0:ca83aafb7dcb | 184 | |
el13k3s | 0:ca83aafb7dcb | 185 | lcd.printString("A project",15,1); |
el13k3s | 0:ca83aafb7dcb | 186 | lcd.printString("by",35,3); |
el13k3s | 0:ca83aafb7dcb | 187 | lcd.printString("Karina Sodipo",3,5); |
el13k3s | 0:ca83aafb7dcb | 188 | wait(2); |
el13k3s | 0:ca83aafb7dcb | 189 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 190 | |
el13k3s | 0:ca83aafb7dcb | 191 | lcd.printString("University",10,1); |
el13k3s | 0:ca83aafb7dcb | 192 | lcd.printString("of Leeds",15,3); |
el13k3s | 0:ca83aafb7dcb | 193 | lcd.printString("ELEC2645",15,5); |
el13k3s | 0:ca83aafb7dcb | 194 | wait(2); |
el13k3s | 0:ca83aafb7dcb | 195 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 196 | |
el13k3s | 0:ca83aafb7dcb | 197 | /// display a checkerboard pattern to illustrate transition from start-up to main device functionality |
el13k3s | 0:ca83aafb7dcb | 198 | checkerboard(); |
el13k3s | 0:ca83aafb7dcb | 199 | wait(2); |
el13k3s | 0:ca83aafb7dcb | 200 | lcd.clear(); /// clear the buffer |
el13k3s | 0:ca83aafb7dcb | 201 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 202 | |
el13k3s | 0:ca83aafb7dcb | 203 | while(1) { /// loop infinitely |
el13k3s | 0:ca83aafb7dcb | 204 | |
el13k3s | 0:ca83aafb7dcb | 205 | brightness(); |
el13k3s | 0:ca83aafb7dcb | 206 | |
el13k3s | 0:ca83aafb7dcb | 207 | initMeasureIn(); |
el13k3s | 0:ca83aafb7dcb | 208 | |
el13k3s | 0:ca83aafb7dcb | 209 | initDisplay(); |
el13k3s | 0:ca83aafb7dcb | 210 | |
el13k3s | 0:ca83aafb7dcb | 211 | } |
el13k3s | 0:ca83aafb7dcb | 212 | |
el13k3s | 0:ca83aafb7dcb | 213 | } |
el13k3s | 0:ca83aafb7dcb | 214 | |
el13k3s | 0:ca83aafb7dcb | 215 | |
el13k3s | 0:ca83aafb7dcb | 216 | |
el13k3s | 0:ca83aafb7dcb | 217 | /** |
el13k3s | 0:ca83aafb7dcb | 218 | @see - University of Leeds ELEC1620 Digital Electronics & Microcontrollers lecture slides |
el13k3s | 0:ca83aafb7dcb | 219 | */ |
el13k3s | 0:ca83aafb7dcb | 220 | /// function to display the checkerboard pattern |
el13k3s | 0:ca83aafb7dcb | 221 | void checkerboard() { |
el13k3s | 0:ca83aafb7dcb | 222 | for (int i = 0; i < 84; i+=2) { |
el13k3s | 0:ca83aafb7dcb | 223 | for (int j = 0; j < 48; j+=2) { |
el13k3s | 0:ca83aafb7dcb | 224 | lcd.setPixel(i,j); |
el13k3s | 0:ca83aafb7dcb | 225 | } |
el13k3s | 0:ca83aafb7dcb | 226 | } |
el13k3s | 0:ca83aafb7dcb | 227 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 228 | } |
el13k3s | 0:ca83aafb7dcb | 229 | |
el13k3s | 0:ca83aafb7dcb | 230 | |
el13k3s | 0:ca83aafb7dcb | 231 | |
el13k3s | 0:ca83aafb7dcb | 232 | /// function to indicate object proximity on LED and buzzer in CM |
el13k3s | 0:ca83aafb7dcb | 233 | void proximityCm() { |
el13k3s | 0:ca83aafb7dcb | 234 | |
el13k3s | 0:ca83aafb7dcb | 235 | int distance = sensor.getDistanceCm(); |
el13k3s | 0:ca83aafb7dcb | 236 | |
el13k3s | 0:ca83aafb7dcb | 237 | if (distance < 50) { |
el13k3s | 0:ca83aafb7dcb | 238 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 239 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 240 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 241 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 242 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 243 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 244 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 245 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 246 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 247 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 248 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 249 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 250 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 251 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 252 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 253 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 254 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 255 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 256 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 257 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 258 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 259 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 260 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 261 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 262 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 263 | } |
el13k3s | 0:ca83aafb7dcb | 264 | |
el13k3s | 0:ca83aafb7dcb | 265 | else { |
el13k3s | 0:ca83aafb7dcb | 266 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 267 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 268 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 269 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 270 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 271 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 272 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 273 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 274 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 275 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 276 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 277 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 278 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 279 | } |
el13k3s | 0:ca83aafb7dcb | 280 | |
el13k3s | 0:ca83aafb7dcb | 281 | } |
el13k3s | 0:ca83aafb7dcb | 282 | |
el13k3s | 0:ca83aafb7dcb | 283 | |
el13k3s | 0:ca83aafb7dcb | 284 | |
el13k3s | 0:ca83aafb7dcb | 285 | /// function to indicate object proximity on LED and buzzer in INCHES |
el13k3s | 0:ca83aafb7dcb | 286 | void proximityIn() { |
el13k3s | 0:ca83aafb7dcb | 287 | |
el13k3s | 0:ca83aafb7dcb | 288 | int distance = sensor.getDistanceInch(); |
el13k3s | 0:ca83aafb7dcb | 289 | |
el13k3s | 0:ca83aafb7dcb | 290 | if (distance < 20) { |
el13k3s | 0:ca83aafb7dcb | 291 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 292 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 293 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 294 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 295 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 296 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 297 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 298 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 299 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 300 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 301 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 302 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 303 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 304 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 305 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 306 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 307 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 308 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 309 | led = 1; |
el13k3s | 0:ca83aafb7dcb | 310 | buzzer = 0.5; |
el13k3s | 0:ca83aafb7dcb | 311 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 312 | led = 0; |
el13k3s | 0:ca83aafb7dcb | 313 | buzzer = 0; |
el13k3s | 0:ca83aafb7dcb | 314 | wait(0.25); |
el13k3s | 0:ca83aafb7dcb | 315 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 316 | } |
el13k3s | 0:ca83aafb7dcb | 317 | else { |
el13k3s | 0:ca83aafb7dcb | 318 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 319 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 320 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 321 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 322 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 323 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 324 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 325 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 326 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 327 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 328 | buzzer = 1; |
el13k3s | 0:ca83aafb7dcb | 329 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 330 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 331 | lcd.clear(); |
el13k3s | 0:ca83aafb7dcb | 332 | } |
el13k3s | 0:ca83aafb7dcb | 333 | |
el13k3s | 0:ca83aafb7dcb | 334 | } |
el13k3s | 0:ca83aafb7dcb | 335 | |
el13k3s | 0:ca83aafb7dcb | 336 | |
el13k3s | 0:ca83aafb7dcb | 337 | |
el13k3s | 0:ca83aafb7dcb | 338 | /// function to change units of readings: 0 - centimetres, 1 - inches |
el13k3s | 0:ca83aafb7dcb | 339 | void initMeasureIn() { |
el13k3s | 0:ca83aafb7dcb | 340 | |
el13k3s | 0:ca83aafb7dcb | 341 | if (unit == 0) { |
el13k3s | 0:ca83aafb7dcb | 342 | leds = 8; // switch LED4 on to indicate unit |
el13k3s | 0:ca83aafb7dcb | 343 | centimetre(); |
el13k3s | 0:ca83aafb7dcb | 344 | } |
el13k3s | 0:ca83aafb7dcb | 345 | |
el13k3s | 0:ca83aafb7dcb | 346 | if (unit == 1) { |
el13k3s | 0:ca83aafb7dcb | 347 | leds = 2; // switch LED2 on to indicate unit |
el13k3s | 0:ca83aafb7dcb | 348 | inches(); |
el13k3s | 0:ca83aafb7dcb | 349 | } |
el13k3s | 0:ca83aafb7dcb | 350 | |
el13k3s | 0:ca83aafb7dcb | 351 | } |
el13k3s | 0:ca83aafb7dcb | 352 | |
el13k3s | 0:ca83aafb7dcb | 353 | |
el13k3s | 0:ca83aafb7dcb | 354 | |
el13k3s | 0:ca83aafb7dcb | 355 | /// function to change display modes: 0 - normal display, 1 - inverted display |
el13k3s | 0:ca83aafb7dcb | 356 | void initDisplay() { |
el13k3s | 0:ca83aafb7dcb | 357 | |
el13k3s | 0:ca83aafb7dcb | 358 | if (pixel == 0) { |
el13k3s | 0:ca83aafb7dcb | 359 | leds = 4; // switch LED3 on to indicate display mode |
el13k3s | 0:ca83aafb7dcb | 360 | normal(); |
el13k3s | 0:ca83aafb7dcb | 361 | } |
el13k3s | 0:ca83aafb7dcb | 362 | |
el13k3s | 0:ca83aafb7dcb | 363 | if (pixel == 1) { |
el13k3s | 0:ca83aafb7dcb | 364 | leds = 1; // switch LED1 on to indicate display mode |
el13k3s | 0:ca83aafb7dcb | 365 | invert(); |
el13k3s | 0:ca83aafb7dcb | 366 | } |
el13k3s | 0:ca83aafb7dcb | 367 | |
el13k3s | 0:ca83aafb7dcb | 368 | } |
el13k3s | 0:ca83aafb7dcb | 369 | |
el13k3s | 0:ca83aafb7dcb | 370 | |
el13k3s | 0:ca83aafb7dcb | 371 | |
el13k3s | 0:ca83aafb7dcb | 372 | /// function to control screen backlight brightness |
el13k3s | 0:ca83aafb7dcb | 373 | void brightness() { |
el13k3s | 0:ca83aafb7dcb | 374 | lcd.setBrightness(POT); |
el13k3s | 0:ca83aafb7dcb | 375 | } |
el13k3s | 0:ca83aafb7dcb | 376 | |
el13k3s | 0:ca83aafb7dcb | 377 | |
el13k3s | 0:ca83aafb7dcb | 378 | |
el13k3s | 0:ca83aafb7dcb | 379 | /// function to set pixel display as black-on-white |
el13k3s | 0:ca83aafb7dcb | 380 | void normal() { |
el13k3s | 0:ca83aafb7dcb | 381 | lcd.normalMode(); |
el13k3s | 0:ca83aafb7dcb | 382 | } |
el13k3s | 0:ca83aafb7dcb | 383 | |
el13k3s | 0:ca83aafb7dcb | 384 | |
el13k3s | 0:ca83aafb7dcb | 385 | |
el13k3s | 0:ca83aafb7dcb | 386 | /// function to set pixel display as white-on-black |
el13k3s | 0:ca83aafb7dcb | 387 | void invert() { |
el13k3s | 0:ca83aafb7dcb | 388 | lcd.inverseMode(); |
el13k3s | 0:ca83aafb7dcb | 389 | } |
el13k3s | 0:ca83aafb7dcb | 390 | |
el13k3s | 0:ca83aafb7dcb | 391 | |
el13k3s | 0:ca83aafb7dcb | 392 | |
el13k3s | 0:ca83aafb7dcb | 393 | /// function to read distances in centimetres |
el13k3s | 0:ca83aafb7dcb | 394 | void centimetre() { |
el13k3s | 0:ca83aafb7dcb | 395 | |
el13k3s | 0:ca83aafb7dcb | 396 | int distance = sensor.getDistanceCm(); |
el13k3s | 0:ca83aafb7dcb | 397 | int length = sprintf(buffer,"D = %d cm",distance); |
el13k3s | 0:ca83aafb7dcb | 398 | |
el13k3s | 0:ca83aafb7dcb | 399 | /// Only allow data with length < or = 24 to be displayed |
el13k3s | 0:ca83aafb7dcb | 400 | if (length<= 14) |
el13k3s | 0:ca83aafb7dcb | 401 | lcd.printString(buffer,0,3); |
el13k3s | 0:ca83aafb7dcb | 402 | proximityCm(); |
el13k3s | 0:ca83aafb7dcb | 403 | /// short delay before next measurement |
el13k3s | 0:ca83aafb7dcb | 404 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 405 | |
el13k3s | 0:ca83aafb7dcb | 406 | } |
el13k3s | 0:ca83aafb7dcb | 407 | |
el13k3s | 0:ca83aafb7dcb | 408 | |
el13k3s | 0:ca83aafb7dcb | 409 | |
el13k3s | 0:ca83aafb7dcb | 410 | /// function to read distances in inches |
el13k3s | 0:ca83aafb7dcb | 411 | void inches() { |
el13k3s | 0:ca83aafb7dcb | 412 | |
el13k3s | 0:ca83aafb7dcb | 413 | int distance = sensor.getDistanceInch(); |
el13k3s | 0:ca83aafb7dcb | 414 | |
el13k3s | 0:ca83aafb7dcb | 415 | int length = sprintf(buffer,"D = %d inches",distance); |
el13k3s | 0:ca83aafb7dcb | 416 | |
el13k3s | 0:ca83aafb7dcb | 417 | if (length<= 14) |
el13k3s | 0:ca83aafb7dcb | 418 | lcd.printString(buffer,0,3); |
el13k3s | 0:ca83aafb7dcb | 419 | proximityIn(); |
el13k3s | 0:ca83aafb7dcb | 420 | /// short delay before next measurement |
el13k3s | 0:ca83aafb7dcb | 421 | wait(0.5); |
el13k3s | 0:ca83aafb7dcb | 422 | |
el13k3s | 0:ca83aafb7dcb | 423 | } |
el13k3s | 0:ca83aafb7dcb | 424 | |
el13k3s | 0:ca83aafb7dcb | 425 | |
el13k3s | 0:ca83aafb7dcb | 426 | |
el13k3s | 0:ca83aafb7dcb | 427 | /// function for radar display - not called because it returns an error on the mbed |
el13k3s | 0:ca83aafb7dcb | 428 | void radar() { |
el13k3s | 0:ca83aafb7dcb | 429 | |
el13k3s | 0:ca83aafb7dcb | 430 | lcd.clear(); |
el13k3s | 0:ca83aafb7dcb | 431 | |
el13k3s | 0:ca83aafb7dcb | 432 | int distance = sensor.getDistanceCm(); |
el13k3s | 0:ca83aafb7dcb | 433 | |
el13k3s | 0:ca83aafb7dcb | 434 | // loop through |
el13k3s | 0:ca83aafb7dcb | 435 | if (distance < 5) { |
el13k3s | 0:ca83aafb7dcb | 436 | lcd.setPixel(41,1); |
el13k3s | 0:ca83aafb7dcb | 437 | } |
el13k3s | 0:ca83aafb7dcb | 438 | else if (distance < 10) { |
el13k3s | 0:ca83aafb7dcb | 439 | lcd.setPixel(41,2); |
el13k3s | 0:ca83aafb7dcb | 440 | } |
el13k3s | 0:ca83aafb7dcb | 441 | else if (distance < 15) { |
el13k3s | 0:ca83aafb7dcb | 442 | lcd.setPixel(41,3); |
el13k3s | 0:ca83aafb7dcb | 443 | } |
el13k3s | 0:ca83aafb7dcb | 444 | else if (distance < 20) { |
el13k3s | 0:ca83aafb7dcb | 445 | lcd.setPixel(41,4); |
el13k3s | 0:ca83aafb7dcb | 446 | } |
el13k3s | 0:ca83aafb7dcb | 447 | else if (distance < 25) { |
el13k3s | 0:ca83aafb7dcb | 448 | lcd.setPixel(41,5); |
el13k3s | 0:ca83aafb7dcb | 449 | } |
el13k3s | 0:ca83aafb7dcb | 450 | else if (distance < 30) { |
el13k3s | 0:ca83aafb7dcb | 451 | lcd.setPixel(41,6); |
el13k3s | 0:ca83aafb7dcb | 452 | } |
el13k3s | 0:ca83aafb7dcb | 453 | else if (distance < 35) { |
el13k3s | 0:ca83aafb7dcb | 454 | lcd.setPixel(41,7); |
el13k3s | 0:ca83aafb7dcb | 455 | } |
el13k3s | 0:ca83aafb7dcb | 456 | else if (distance < 40) { |
el13k3s | 0:ca83aafb7dcb | 457 | lcd.setPixel(41,8); |
el13k3s | 0:ca83aafb7dcb | 458 | } |
el13k3s | 0:ca83aafb7dcb | 459 | else if (distance < 45) { |
el13k3s | 0:ca83aafb7dcb | 460 | lcd.setPixel(41,9); |
el13k3s | 0:ca83aafb7dcb | 461 | } |
el13k3s | 0:ca83aafb7dcb | 462 | else if (distance < 50) { |
el13k3s | 0:ca83aafb7dcb | 463 | lcd.setPixel(41,10); |
el13k3s | 0:ca83aafb7dcb | 464 | } |
el13k3s | 0:ca83aafb7dcb | 465 | else if (distance < 55) { |
el13k3s | 0:ca83aafb7dcb | 466 | lcd.setPixel(41,11); |
el13k3s | 0:ca83aafb7dcb | 467 | } |
el13k3s | 0:ca83aafb7dcb | 468 | else if (distance < 60) { |
el13k3s | 0:ca83aafb7dcb | 469 | lcd.setPixel(41,12); |
el13k3s | 0:ca83aafb7dcb | 470 | } |
el13k3s | 0:ca83aafb7dcb | 471 | else if (distance < 65) { |
el13k3s | 0:ca83aafb7dcb | 472 | lcd.setPixel(41,13); |
el13k3s | 0:ca83aafb7dcb | 473 | } |
el13k3s | 0:ca83aafb7dcb | 474 | else if (distance < 70) { |
el13k3s | 0:ca83aafb7dcb | 475 | lcd.setPixel(41,14); |
el13k3s | 0:ca83aafb7dcb | 476 | } |
el13k3s | 0:ca83aafb7dcb | 477 | else if (distance < 75) { |
el13k3s | 0:ca83aafb7dcb | 478 | lcd.setPixel(41,15); |
el13k3s | 0:ca83aafb7dcb | 479 | } |
el13k3s | 0:ca83aafb7dcb | 480 | else if (distance < 80) { |
el13k3s | 0:ca83aafb7dcb | 481 | lcd.setPixel(41,16); |
el13k3s | 0:ca83aafb7dcb | 482 | } |
el13k3s | 0:ca83aafb7dcb | 483 | else if (distance < 85) { |
el13k3s | 0:ca83aafb7dcb | 484 | lcd.setPixel(41,17); |
el13k3s | 0:ca83aafb7dcb | 485 | } |
el13k3s | 0:ca83aafb7dcb | 486 | else if (distance < 90) { |
el13k3s | 0:ca83aafb7dcb | 487 | lcd.setPixel(41,18); |
el13k3s | 0:ca83aafb7dcb | 488 | } |
el13k3s | 0:ca83aafb7dcb | 489 | else if (distance < 95) { |
el13k3s | 0:ca83aafb7dcb | 490 | lcd.setPixel(41,19); |
el13k3s | 0:ca83aafb7dcb | 491 | } |
el13k3s | 0:ca83aafb7dcb | 492 | else if (distance < 100) { |
el13k3s | 0:ca83aafb7dcb | 493 | lcd.setPixel(41,20); |
el13k3s | 0:ca83aafb7dcb | 494 | } |
el13k3s | 0:ca83aafb7dcb | 495 | else if (distance < 105) { |
el13k3s | 0:ca83aafb7dcb | 496 | lcd.setPixel(41,21); |
el13k3s | 0:ca83aafb7dcb | 497 | } |
el13k3s | 0:ca83aafb7dcb | 498 | else if (distance < 110) { |
el13k3s | 0:ca83aafb7dcb | 499 | lcd.setPixel(41,22); |
el13k3s | 0:ca83aafb7dcb | 500 | } |
el13k3s | 0:ca83aafb7dcb | 501 | else if (distance < 115) { |
el13k3s | 0:ca83aafb7dcb | 502 | lcd.setPixel(41,23); |
el13k3s | 0:ca83aafb7dcb | 503 | } |
el13k3s | 0:ca83aafb7dcb | 504 | else if (distance < 120) { |
el13k3s | 0:ca83aafb7dcb | 505 | lcd.setPixel(41,24); |
el13k3s | 0:ca83aafb7dcb | 506 | } |
el13k3s | 0:ca83aafb7dcb | 507 | else if (distance < 125) { |
el13k3s | 0:ca83aafb7dcb | 508 | lcd.setPixel(41,25); |
el13k3s | 0:ca83aafb7dcb | 509 | } |
el13k3s | 0:ca83aafb7dcb | 510 | else if (distance < 130) { |
el13k3s | 0:ca83aafb7dcb | 511 | lcd.setPixel(41,26); |
el13k3s | 0:ca83aafb7dcb | 512 | } |
el13k3s | 0:ca83aafb7dcb | 513 | else if (distance < 135) { |
el13k3s | 0:ca83aafb7dcb | 514 | lcd.setPixel(41,27); |
el13k3s | 0:ca83aafb7dcb | 515 | } |
el13k3s | 0:ca83aafb7dcb | 516 | else if (distance < 140) { |
el13k3s | 0:ca83aafb7dcb | 517 | lcd.setPixel(41,28); |
el13k3s | 0:ca83aafb7dcb | 518 | } |
el13k3s | 0:ca83aafb7dcb | 519 | else if (distance < 145) { |
el13k3s | 0:ca83aafb7dcb | 520 | lcd.setPixel(41,29); |
el13k3s | 0:ca83aafb7dcb | 521 | } |
el13k3s | 0:ca83aafb7dcb | 522 | else if (distance < 150) { |
el13k3s | 0:ca83aafb7dcb | 523 | lcd.setPixel(41,30); |
el13k3s | 0:ca83aafb7dcb | 524 | } |
el13k3s | 0:ca83aafb7dcb | 525 | else if (distance < 155) { |
el13k3s | 0:ca83aafb7dcb | 526 | lcd.setPixel(41,31); |
el13k3s | 0:ca83aafb7dcb | 527 | } |
el13k3s | 0:ca83aafb7dcb | 528 | else if (distance < 160) { |
el13k3s | 0:ca83aafb7dcb | 529 | lcd.setPixel(41,32); |
el13k3s | 0:ca83aafb7dcb | 530 | } |
el13k3s | 0:ca83aafb7dcb | 531 | else if (distance < 165) { |
el13k3s | 0:ca83aafb7dcb | 532 | lcd.setPixel(41,33); |
el13k3s | 0:ca83aafb7dcb | 533 | } |
el13k3s | 0:ca83aafb7dcb | 534 | else if (distance < 170) { |
el13k3s | 0:ca83aafb7dcb | 535 | lcd.setPixel(41,34); |
el13k3s | 0:ca83aafb7dcb | 536 | } |
el13k3s | 0:ca83aafb7dcb | 537 | else if (distance < 175) { |
el13k3s | 0:ca83aafb7dcb | 538 | lcd.setPixel(41,35); |
el13k3s | 0:ca83aafb7dcb | 539 | } |
el13k3s | 0:ca83aafb7dcb | 540 | else if (distance < 180) { |
el13k3s | 0:ca83aafb7dcb | 541 | lcd.setPixel(41,36); |
el13k3s | 0:ca83aafb7dcb | 542 | } |
el13k3s | 0:ca83aafb7dcb | 543 | else if (distance < 185) { |
el13k3s | 0:ca83aafb7dcb | 544 | lcd.setPixel(41,37); |
el13k3s | 0:ca83aafb7dcb | 545 | } |
el13k3s | 0:ca83aafb7dcb | 546 | else if (distance < 190) { |
el13k3s | 0:ca83aafb7dcb | 547 | lcd.setPixel(41,38); |
el13k3s | 0:ca83aafb7dcb | 548 | } |
el13k3s | 0:ca83aafb7dcb | 549 | else if (distance < 195) { |
el13k3s | 0:ca83aafb7dcb | 550 | lcd.setPixel(41,39); |
el13k3s | 0:ca83aafb7dcb | 551 | } |
el13k3s | 0:ca83aafb7dcb | 552 | else if (distance < 200) { |
el13k3s | 0:ca83aafb7dcb | 553 | lcd.setPixel(41,40); |
el13k3s | 0:ca83aafb7dcb | 554 | } |
el13k3s | 0:ca83aafb7dcb | 555 | else if (distance < 205) { |
el13k3s | 0:ca83aafb7dcb | 556 | lcd.setPixel(41,41); |
el13k3s | 0:ca83aafb7dcb | 557 | } |
el13k3s | 0:ca83aafb7dcb | 558 | else if (distance < 210) { |
el13k3s | 0:ca83aafb7dcb | 559 | lcd.setPixel(41,42); |
el13k3s | 0:ca83aafb7dcb | 560 | } |
el13k3s | 0:ca83aafb7dcb | 561 | else if (distance < 215) { |
el13k3s | 0:ca83aafb7dcb | 562 | lcd.setPixel(41,43); |
el13k3s | 0:ca83aafb7dcb | 563 | } |
el13k3s | 0:ca83aafb7dcb | 564 | else if (distance < 220) { |
el13k3s | 0:ca83aafb7dcb | 565 | lcd.setPixel(41,44); |
el13k3s | 0:ca83aafb7dcb | 566 | } |
el13k3s | 0:ca83aafb7dcb | 567 | else if (distance < 225) { |
el13k3s | 0:ca83aafb7dcb | 568 | lcd.setPixel(41,45); |
el13k3s | 0:ca83aafb7dcb | 569 | } |
el13k3s | 0:ca83aafb7dcb | 570 | else if (distance < 230) { |
el13k3s | 0:ca83aafb7dcb | 571 | lcd.setPixel(41,46); |
el13k3s | 0:ca83aafb7dcb | 572 | } |
el13k3s | 0:ca83aafb7dcb | 573 | else if (distance < 235) { |
el13k3s | 0:ca83aafb7dcb | 574 | lcd.setPixel(41,47); |
el13k3s | 0:ca83aafb7dcb | 575 | } |
el13k3s | 0:ca83aafb7dcb | 576 | else if (distance < 240) { |
el13k3s | 0:ca83aafb7dcb | 577 | lcd.setPixel(41,48); |
el13k3s | 0:ca83aafb7dcb | 578 | } |
el13k3s | 0:ca83aafb7dcb | 579 | else { |
el13k3s | 0:ca83aafb7dcb | 580 | lcd.setPixel(41,48); |
el13k3s | 0:ca83aafb7dcb | 581 | } |
el13k3s | 0:ca83aafb7dcb | 582 | wait(3); |
el13k3s | 0:ca83aafb7dcb | 583 | lcd.refresh(); |
el13k3s | 0:ca83aafb7dcb | 584 | } |