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

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?

UserRevisionLine numberNew 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(&centimetre);
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 }