![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Resit Target Localisation Ciaran Kane 18689005
Dependencies: mbed
main.cpp@7:acf82069b794, 23 months ago (annotated)
- Committer:
- ciarankane123
- Date:
- Thu Aug 25 13:50:39 2022 +0000
- Revision:
- 7:acf82069b794
- Parent:
- 6:466f54c00c50
Final Code;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ciarankane123 | 2:57ae9d39b375 | 1 | /**Ciaran Kane-18689005-- Target Localisation---- Awkknowledgements Dr Edmond Nurellari Joystick Library. Craig Evans N5110 Library. Mbed HCSR04 Liibrary . |
ciarankane123 | 0:479e94f82332 | 2 | enji Arai Piezo library. |
ciarankane123 | 0:479e94f82332 | 3 | |
ciarankane123 | 0:479e94f82332 | 4 | /**----Libraries*/ |
ciarankane123 | 0:479e94f82332 | 5 | #include "mbed.h" |
ciarankane123 | 0:479e94f82332 | 6 | #include "Joystick.h" |
ciarankane123 | 0:479e94f82332 | 7 | #include "N5110.h" |
ciarankane123 | 0:479e94f82332 | 8 | #include "ultrasonic.h" |
ciarankane123 | 0:479e94f82332 | 9 | #include "piezo_bz.h" |
ciarankane123 | 0:479e94f82332 | 10 | |
ciarankane123 | 0:479e94f82332 | 11 | /**Setting interrupts for buttons*/ |
ciarankane123 | 0:479e94f82332 | 12 | //There is only 4 butons due to my HCSR04 sensor being wired into two of the buttons channels |
ciarankane123 | 0:479e94f82332 | 13 | volatile int g_bumperL_flag = 0; |
ciarankane123 | 0:479e94f82332 | 14 | volatile int g_bumperR_flag = 0; |
ciarankane123 | 0:479e94f82332 | 15 | volatile int g_BACK_flag = 0; |
ciarankane123 | 0:479e94f82332 | 16 | volatile int g_START_flag = 0; |
ciarankane123 | 5:5351ab7d9132 | 17 | int Target; |
ciarankane123 | 0:479e94f82332 | 18 | |
ciarankane123 | 0:479e94f82332 | 19 | /**Voids for N5110 Menu Display*/ |
ciarankane123 | 0:479e94f82332 | 20 | void initialiseMbed(); |
ciarankane123 | 0:479e94f82332 | 21 | void menu(); |
ciarankane123 | 0:479e94f82332 | 22 | void targetLocate(); |
ciarankane123 | 0:479e94f82332 | 23 | void initUltrasonic(); |
ciarankane123 | 0:479e94f82332 | 24 | void dist(int distance); |
ciarankane123 | 2:57ae9d39b375 | 25 | void techSupport(); |
ciarankane123 | 5:5351ab7d9132 | 26 | void TargetDistance(); |
ciarankane123 | 5:5351ab7d9132 | 27 | |
ciarankane123 | 0:479e94f82332 | 28 | |
ciarankane123 | 0:479e94f82332 | 29 | /**I/O definition*/ |
ciarankane123 | 0:479e94f82332 | 30 | InterruptIn bumperL_btn(PTB18); |
ciarankane123 | 0:479e94f82332 | 31 | InterruptIn bumperR_btn(PTB3); |
ciarankane123 | 0:479e94f82332 | 32 | InterruptIn BACK_btn(PTB19); |
ciarankane123 | 0:479e94f82332 | 33 | InterruptIn START_btn(PTC5); |
ciarankane123 | 0:479e94f82332 | 34 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
ciarankane123 | 0:479e94f82332 | 35 | Serial pc(USBTX, USBRX); |
ciarankane123 | 0:479e94f82332 | 36 | BusOut redleds(PTA1,PTA2,PTC2); |
ciarankane123 | 0:479e94f82332 | 37 | BusOut greenleds(PTC3,PTC4,PTD3); |
ciarankane123 | 0:479e94f82332 | 38 | PwmOut piezo(PTC10); |
ciarankane123 | 0:479e94f82332 | 39 | DigitalOut trigPin(PTD0); |
ciarankane123 | 0:479e94f82332 | 40 | DigitalIn echoPin(PTC12); |
ciarankane123 | 0:479e94f82332 | 41 | Joystick joystick(PTB10,PTB11,PTC16); |
ciarankane123 | 0:479e94f82332 | 42 | ultrasonic Sensor(PTD0, PTC12, .5, 1, &dist); |
ciarankane123 | 0:479e94f82332 | 43 | |
ciarankane123 | 0:479e94f82332 | 44 | |
ciarankane123 | 0:479e94f82332 | 45 | /** Design and thought process goes into more detail in the associated report written for this project. |
ciarankane123 | 0:479e94f82332 | 46 | But i will give a brief breakdown of what this simple code entails below: |
ciarankane123 | 0:479e94f82332 | 47 | |
ciarankane123 | 0:479e94f82332 | 48 | *Calling for initialisation of mbedded controller on startup whilst all LEDS's on |
ciarankane123 | 0:479e94f82332 | 49 | when inialisation is complete turn off red LED's |
ciarankane123 | 0:479e94f82332 | 50 | |
ciarankane123 | 0:479e94f82332 | 51 | *all for menu where you have an option to initialise the sensor or |
ciarankane123 | 0:479e94f82332 | 52 | locate targets whilst red LED's stay on until one is selected using the left and right bumper |
ciarankane123 | 0:479e94f82332 | 53 | then green LEDS on |
ciarankane123 | 0:479e94f82332 | 54 | |
ciarankane123 | 0:479e94f82332 | 55 | *If target locate is selected call for targetLocate void to show that a target is being located whilst green LEDS on |
ciarankane123 | 0:479e94f82332 | 56 | |
ciarankane123 | 0:479e94f82332 | 57 | *If sensor intialisation is selected then sound piezo buzzer for a period of 10 seconds until sensor is initialised |
ciarankane123 | 0:479e94f82332 | 58 | |
ciarankane123 | 0:479e94f82332 | 59 | *If target is found call for Located void with string text and turn on redLEDS and sound buzzer for 5 seconds to indicate target |
ciarankane123 | 0:479e94f82332 | 60 | |
ciarankane123 | 0:479e94f82332 | 61 | *After target is located call for results void to display distance from sensor |
ciarankane123 | 0:479e94f82332 | 62 | */ |
ciarankane123 | 0:479e94f82332 | 63 | //Main Program |
ciarankane123 | 0:479e94f82332 | 64 | int main() |
ciarankane123 | 0:479e94f82332 | 65 | { |
ciarankane123 | 0:479e94f82332 | 66 | lcd.init(); |
ciarankane123 | 4:95b13ca0550e | 67 | // printf ("LCD intialise"); |
ciarankane123 | 0:479e94f82332 | 68 | lcd.setContrast(0.4); |
ciarankane123 | 4:95b13ca0550e | 69 | // printf ("LCD Contrast set"); |
ciarankane123 | 4:95b13ca0550e | 70 | // printf ("LCD Brightness Set"); |
ciarankane123 | 0:479e94f82332 | 71 | initialiseMbed(); |
ciarankane123 | 4:95b13ca0550e | 72 | // printf ("MBED K64f Initialise"); |
ciarankane123 | 0:479e94f82332 | 73 | Sensor.startUpdates(); |
ciarankane123 | 0:479e94f82332 | 74 | // printf ("Ultrasonic Updates started"); |
ciarankane123 | 0:479e94f82332 | 75 | } |
ciarankane123 | 0:479e94f82332 | 76 | |
ciarankane123 | 0:479e94f82332 | 77 | void initialiseMbed() { |
ciarankane123 | 5:5351ab7d9132 | 78 | //printf ( Initialise MBED) |
ciarankane123 | 0:479e94f82332 | 79 | greenleds= 1; |
ciarankane123 | 0:479e94f82332 | 80 | redleds=0; |
ciarankane123 | 5:5351ab7d9132 | 81 | //printf(green LED on) |
ciarankane123 | 5:5351ab7d9132 | 82 | //printf(red led off) |
ciarankane123 | 0:479e94f82332 | 83 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 84 | lcd.printString("MBED",0,0); |
ciarankane123 | 0:479e94f82332 | 85 | lcd.printString("Controller",0,1); |
ciarankane123 | 0:479e94f82332 | 86 | lcd.printString("Initialising",0,2); |
ciarankane123 | 0:479e94f82332 | 87 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 88 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 89 | wait(1); |
ciarankane123 | 0:479e94f82332 | 90 | lcd.printString("Initialising.",0,2); |
ciarankane123 | 0:479e94f82332 | 91 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 92 | wait(1); |
ciarankane123 | 0:479e94f82332 | 93 | lcd.printString("Initialising..",0,2); |
ciarankane123 | 0:479e94f82332 | 94 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 95 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 96 | lcd.clear(); |
ciarankane123 | 5:5351ab7d9132 | 97 | //printf (Intialised. Call for menu void) |
ciarankane123 | 0:479e94f82332 | 98 | lcd.printString("Initialised",0,0); |
ciarankane123 | 0:479e94f82332 | 99 | lcd.printString("Press Start",0,1); |
ciarankane123 | 0:479e94f82332 | 100 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 101 | lcd.printString("Main Menu",0,3); |
ciarankane123 | 0:479e94f82332 | 102 | lcd.printString("",0,4); |
ciarankane123 | 0:479e94f82332 | 103 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 104 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 105 | greenleds=0; |
ciarankane123 | 5:5351ab7d9132 | 106 | //printf (green led off) |
ciarankane123 | 0:479e94f82332 | 107 | redleds=1; |
ciarankane123 | 5:5351ab7d9132 | 108 | //printf (red led on) |
ciarankane123 | 0:479e94f82332 | 109 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 110 | |
ciarankane123 | 0:479e94f82332 | 111 | while(1) |
ciarankane123 | 0:479e94f82332 | 112 | { |
ciarankane123 | 0:479e94f82332 | 113 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 114 | if (g_START_flag==1) { |
ciarankane123 | 5:5351ab7d9132 | 115 | //printf (start flag) |
ciarankane123 | 0:479e94f82332 | 116 | menu(); |
ciarankane123 | 0:479e94f82332 | 117 | } |
ciarankane123 | 0:479e94f82332 | 118 | } |
ciarankane123 | 0:479e94f82332 | 119 | } |
ciarankane123 | 0:479e94f82332 | 120 | |
ciarankane123 | 0:479e94f82332 | 121 | |
ciarankane123 | 0:479e94f82332 | 122 | void menu() |
ciarankane123 | 0:479e94f82332 | 123 | { |
ciarankane123 | 0:479e94f82332 | 124 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 125 | lcd.printString("Main Menu",0,0); |
ciarankane123 | 6:466f54c00c50 | 126 | lcd.printString("Localise - Start",0,2); |
ciarankane123 | 2:57ae9d39b375 | 127 | lcd.printString("Sensor Initialise - LB",0,4); |
ciarankane123 | 2:57ae9d39b375 | 128 | lcd.printString("Technical Support - RB ",0,5); |
ciarankane123 | 0:479e94f82332 | 129 | while(1) |
ciarankane123 | 0:479e94f82332 | 130 | { |
ciarankane123 | 0:479e94f82332 | 131 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 132 | if (g_bumperL_flag==1) { |
ciarankane123 | 5:5351ab7d9132 | 133 | //printf (Left bumper flag) |
ciarankane123 | 0:479e94f82332 | 134 | initUltrasonic(); |
ciarankane123 | 0:479e94f82332 | 135 | } |
ciarankane123 | 2:57ae9d39b375 | 136 | else if(g_START_flag==1) { |
ciarankane123 | 5:5351ab7d9132 | 137 | //printf (Start flag) |
ciarankane123 | 0:479e94f82332 | 138 | targetLocate(); |
ciarankane123 | 0:479e94f82332 | 139 | } |
ciarankane123 | 2:57ae9d39b375 | 140 | else if(g_bumperR_flag==1) { |
ciarankane123 | 5:5351ab7d9132 | 141 | //printf (right bumper flag) |
ciarankane123 | 2:57ae9d39b375 | 142 | techSupport(); |
ciarankane123 | 2:57ae9d39b375 | 143 | } |
ciarankane123 | 0:479e94f82332 | 144 | } |
ciarankane123 | 0:479e94f82332 | 145 | } |
ciarankane123 | 0:479e94f82332 | 146 | |
ciarankane123 | 0:479e94f82332 | 147 | |
ciarankane123 | 0:479e94f82332 | 148 | void initUltrasonic() |
ciarankane123 | 0:479e94f82332 | 149 | { |
ciarankane123 | 0:479e94f82332 | 150 | |
ciarankane123 | 0:479e94f82332 | 151 | greenleds= 1; |
ciarankane123 | 5:5351ab7d9132 | 152 | //printf ( green led on) |
ciarankane123 | 0:479e94f82332 | 153 | redleds=0; |
ciarankane123 | 5:5351ab7d9132 | 154 | //printf(red led off) |
ciarankane123 | 0:479e94f82332 | 155 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 156 | lcd.printString("Ultrasonic",0,0); |
ciarankane123 | 0:479e94f82332 | 157 | lcd.printString("Sesnor",0,1); |
ciarankane123 | 0:479e94f82332 | 158 | lcd.printString("Initialising",0,2); |
ciarankane123 | 0:479e94f82332 | 159 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 160 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 161 | wait(1); |
ciarankane123 | 0:479e94f82332 | 162 | lcd.printString("Initialising.",0,2); |
ciarankane123 | 0:479e94f82332 | 163 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 164 | wait(1); |
ciarankane123 | 0:479e94f82332 | 165 | lcd.printString("Initialising..",0,2); |
ciarankane123 | 0:479e94f82332 | 166 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 167 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 168 | lcd.clear(); |
ciarankane123 | 5:5351ab7d9132 | 169 | //printf(Sensor initialised) |
ciarankane123 | 0:479e94f82332 | 170 | lcd.printString("Initialised",0,0); |
ciarankane123 | 0:479e94f82332 | 171 | lcd.printString("Press Start",0,1); |
ciarankane123 | 0:479e94f82332 | 172 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 173 | lcd.printString("Main Menu",0,3); |
ciarankane123 | 0:479e94f82332 | 174 | lcd.printString("",0,4); |
ciarankane123 | 0:479e94f82332 | 175 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 176 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 177 | greenleds=0; |
ciarankane123 | 5:5351ab7d9132 | 178 | //printf( green led off) |
ciarankane123 | 0:479e94f82332 | 179 | redleds=1; |
ciarankane123 | 5:5351ab7d9132 | 180 | //printf( red led on) |
ciarankane123 | 0:479e94f82332 | 181 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 182 | |
ciarankane123 | 0:479e94f82332 | 183 | while(1) |
ciarankane123 | 0:479e94f82332 | 184 | { |
ciarankane123 | 0:479e94f82332 | 185 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 186 | if (g_START_flag==1) { |
ciarankane123 | 5:5351ab7d9132 | 187 | //printf( start flag) |
ciarankane123 | 0:479e94f82332 | 188 | menu(); |
ciarankane123 | 0:479e94f82332 | 189 | } |
ciarankane123 | 0:479e94f82332 | 190 | } |
ciarankane123 | 0:479e94f82332 | 191 | } |
ciarankane123 | 0:479e94f82332 | 192 | void dist(int distance) |
ciarankane123 | 0:479e94f82332 | 193 | { |
ciarankane123 | 5:5351ab7d9132 | 194 | // printf("sense = %d\n", sense); |
ciarankane123 | 5:5351ab7d9132 | 195 | //printf("Distance changed to %dmm\r\n", distance); |
ciarankane123 | 0:479e94f82332 | 196 | |
ciarankane123 | 0:479e94f82332 | 197 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 198 | |
ciarankane123 | 5:5351ab7d9132 | 199 | char targetD[14]; |
ciarankane123 | 5:5351ab7d9132 | 200 | int length = sprintf(targetD,"%dmm", distance); |
ciarankane123 | 0:479e94f82332 | 201 | if (length <= 14) |
ciarankane123 | 0:479e94f82332 | 202 | |
ciarankane123 | 5:5351ab7d9132 | 203 | lcd.printString("Localising Target",0,0); |
ciarankane123 | 5:5351ab7d9132 | 204 | lcd.printString(targetD,24,3); |
ciarankane123 | 0:479e94f82332 | 205 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 206 | |
ciarankane123 | 0:479e94f82332 | 207 | } |
ciarankane123 | 0:479e94f82332 | 208 | |
ciarankane123 | 0:479e94f82332 | 209 | void targetLocate() |
ciarankane123 | 0:479e94f82332 | 210 | { |
ciarankane123 | 5:5351ab7d9132 | 211 | //printf( Target locating) |
ciarankane123 | 0:479e94f82332 | 212 | lcd.printString("Searching",0,1); |
ciarankane123 | 0:479e94f82332 | 213 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 214 | lcd.printString("Target",0,3); |
ciarankane123 | 5:5351ab7d9132 | 215 | TargetDistance(); |
ciarankane123 | 5:5351ab7d9132 | 216 | //printf( Target distance) |
ciarankane123 | 0:479e94f82332 | 217 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 218 | lcd.printString("Target",0,0); |
ciarankane123 | 0:479e94f82332 | 219 | lcd.printString("Found!",0,1); |
ciarankane123 | 2:57ae9d39b375 | 220 | } |
ciarankane123 | 5:5351ab7d9132 | 221 | |
ciarankane123 | 5:5351ab7d9132 | 222 | void TargetDistance() |
ciarankane123 | 5:5351ab7d9132 | 223 | { |
ciarankane123 | 5:5351ab7d9132 | 224 | //sense; |
ciarankane123 | 5:5351ab7d9132 | 225 | |
ciarankane123 | 5:5351ab7d9132 | 226 | Target= Sensor.getCurrentDistance(); |
ciarankane123 | 5:5351ab7d9132 | 227 | |
ciarankane123 | 5:5351ab7d9132 | 228 | //printf("distance at sense 1 = %d\r\n", Distance1); |
ciarankane123 | 5:5351ab7d9132 | 229 | |
ciarankane123 | 5:5351ab7d9132 | 230 | } |
ciarankane123 | 2:57ae9d39b375 | 231 | void techSupport() |
ciarankane123 | 2:57ae9d39b375 | 232 | { |
ciarankane123 | 5:5351ab7d9132 | 233 | //printf(Tech support screen) |
ciarankane123 | 3:bdfa2573642e | 234 | lcd.printString("Ciaran Kane",0,1); |
ciarankane123 | 3:bdfa2573642e | 235 | lcd.printString("Main engineer",0,2); |
ciarankane123 | 3:bdfa2573642e | 236 | lcd.printString("Ciaran.kane@se.com",0,3); |
ciarankane123 | 2:57ae9d39b375 | 237 | lcd.clear(); |
ciarankane123 | 3:bdfa2573642e | 238 | lcd.printString("Contact for queries",0,0); |
ciarankane123 | 3:bdfa2573642e | 239 | lcd.printString("+44 758604400",0,1); |
ciarankane123 | 2:57ae9d39b375 | 240 | } |
ciarankane123 | 2:57ae9d39b375 | 241 |