![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Resit Target Localisation Ciaran Kane 18689005
Dependencies: mbed
main.cpp@0:479e94f82332, 23 months ago (annotated)
- Committer:
- ciarankane123
- Date:
- Tue Aug 23 14:58:55 2022 +0000
- Revision:
- 0:479e94f82332
- Child:
- 2:57ae9d39b375
Added ultrasonic intialising
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ciarankane123 | 0:479e94f82332 | 1 | /**Ciaran Kane-18689005-- Low cost 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 | 0:479e94f82332 | 17 | |
ciarankane123 | 0:479e94f82332 | 18 | /**Voids for N5110 Menu Display*/ |
ciarankane123 | 0:479e94f82332 | 19 | void initialiseMbed(); |
ciarankane123 | 0:479e94f82332 | 20 | void menu(); |
ciarankane123 | 0:479e94f82332 | 21 | void targetLocate(); |
ciarankane123 | 0:479e94f82332 | 22 | void initUltrasonic(); |
ciarankane123 | 0:479e94f82332 | 23 | void dist(int distance); |
ciarankane123 | 0:479e94f82332 | 24 | |
ciarankane123 | 0:479e94f82332 | 25 | /**I/O definition*/ |
ciarankane123 | 0:479e94f82332 | 26 | InterruptIn bumperL_btn(PTB18); |
ciarankane123 | 0:479e94f82332 | 27 | InterruptIn bumperR_btn(PTB3); |
ciarankane123 | 0:479e94f82332 | 28 | InterruptIn BACK_btn(PTB19); |
ciarankane123 | 0:479e94f82332 | 29 | InterruptIn START_btn(PTC5); |
ciarankane123 | 0:479e94f82332 | 30 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
ciarankane123 | 0:479e94f82332 | 31 | Serial pc(USBTX, USBRX); |
ciarankane123 | 0:479e94f82332 | 32 | BusOut redleds(PTA1,PTA2,PTC2); |
ciarankane123 | 0:479e94f82332 | 33 | BusOut greenleds(PTC3,PTC4,PTD3); |
ciarankane123 | 0:479e94f82332 | 34 | PwmOut piezo(PTC10); |
ciarankane123 | 0:479e94f82332 | 35 | DigitalOut trigPin(PTD0); |
ciarankane123 | 0:479e94f82332 | 36 | DigitalIn echoPin(PTC12); |
ciarankane123 | 0:479e94f82332 | 37 | Joystick joystick(PTB10,PTB11,PTC16); |
ciarankane123 | 0:479e94f82332 | 38 | ultrasonic Sensor(PTD0, PTC12, .5, 1, &dist); |
ciarankane123 | 0:479e94f82332 | 39 | |
ciarankane123 | 0:479e94f82332 | 40 | |
ciarankane123 | 0:479e94f82332 | 41 | /** Design and thought process goes into more detail in the associated report written for this project. |
ciarankane123 | 0:479e94f82332 | 42 | But i will give a brief breakdown of what this simple code entails below: |
ciarankane123 | 0:479e94f82332 | 43 | |
ciarankane123 | 0:479e94f82332 | 44 | *Calling for initialisation of mbedded controller on startup whilst all LEDS's on |
ciarankane123 | 0:479e94f82332 | 45 | when inialisation is complete turn off red LED's |
ciarankane123 | 0:479e94f82332 | 46 | |
ciarankane123 | 0:479e94f82332 | 47 | *all for menu where you have an option to initialise the sensor or |
ciarankane123 | 0:479e94f82332 | 48 | locate targets whilst red LED's stay on until one is selected using the left and right bumper |
ciarankane123 | 0:479e94f82332 | 49 | then green LEDS on |
ciarankane123 | 0:479e94f82332 | 50 | |
ciarankane123 | 0:479e94f82332 | 51 | *If target locate is selected call for targetLocate void to show that a target is being located whilst green LEDS on |
ciarankane123 | 0:479e94f82332 | 52 | |
ciarankane123 | 0:479e94f82332 | 53 | *If sensor intialisation is selected then sound piezo buzzer for a period of 10 seconds until sensor is initialised |
ciarankane123 | 0:479e94f82332 | 54 | |
ciarankane123 | 0:479e94f82332 | 55 | *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 | 56 | |
ciarankane123 | 0:479e94f82332 | 57 | *After target is located call for results void to display distance from sensor |
ciarankane123 | 0:479e94f82332 | 58 | */ |
ciarankane123 | 0:479e94f82332 | 59 | //Main Program |
ciarankane123 | 0:479e94f82332 | 60 | int main() |
ciarankane123 | 0:479e94f82332 | 61 | { |
ciarankane123 | 0:479e94f82332 | 62 | lcd.init(); |
ciarankane123 | 0:479e94f82332 | 63 | lcd.setContrast(0.4); |
ciarankane123 | 0:479e94f82332 | 64 | lcd.setBrightness(0.5); |
ciarankane123 | 0:479e94f82332 | 65 | initialiseMbed(); |
ciarankane123 | 0:479e94f82332 | 66 | Sensor.startUpdates(); |
ciarankane123 | 0:479e94f82332 | 67 | // printf ("Ultrasonic Updates started"); |
ciarankane123 | 0:479e94f82332 | 68 | } |
ciarankane123 | 0:479e94f82332 | 69 | |
ciarankane123 | 0:479e94f82332 | 70 | void initialiseMbed() { |
ciarankane123 | 0:479e94f82332 | 71 | |
ciarankane123 | 0:479e94f82332 | 72 | greenleds= 1; |
ciarankane123 | 0:479e94f82332 | 73 | redleds=0; |
ciarankane123 | 0:479e94f82332 | 74 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 75 | lcd.printString("MBED",0,0); |
ciarankane123 | 0:479e94f82332 | 76 | lcd.printString("Controller",0,1); |
ciarankane123 | 0:479e94f82332 | 77 | lcd.printString("Initialising",0,2); |
ciarankane123 | 0:479e94f82332 | 78 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 79 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 80 | wait(1); |
ciarankane123 | 0:479e94f82332 | 81 | lcd.printString("Initialising.",0,2); |
ciarankane123 | 0:479e94f82332 | 82 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 83 | wait(1); |
ciarankane123 | 0:479e94f82332 | 84 | lcd.printString("Initialising..",0,2); |
ciarankane123 | 0:479e94f82332 | 85 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 86 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 87 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 88 | lcd.printString("Initialised",0,0); |
ciarankane123 | 0:479e94f82332 | 89 | lcd.printString("Press Start",0,1); |
ciarankane123 | 0:479e94f82332 | 90 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 91 | lcd.printString("Main Menu",0,3); |
ciarankane123 | 0:479e94f82332 | 92 | lcd.printString("",0,4); |
ciarankane123 | 0:479e94f82332 | 93 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 94 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 95 | greenleds=0; |
ciarankane123 | 0:479e94f82332 | 96 | redleds=1; |
ciarankane123 | 0:479e94f82332 | 97 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 98 | |
ciarankane123 | 0:479e94f82332 | 99 | while(1) |
ciarankane123 | 0:479e94f82332 | 100 | { |
ciarankane123 | 0:479e94f82332 | 101 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 102 | if (g_START_flag==1) { |
ciarankane123 | 0:479e94f82332 | 103 | menu(); |
ciarankane123 | 0:479e94f82332 | 104 | } |
ciarankane123 | 0:479e94f82332 | 105 | } |
ciarankane123 | 0:479e94f82332 | 106 | } |
ciarankane123 | 0:479e94f82332 | 107 | |
ciarankane123 | 0:479e94f82332 | 108 | |
ciarankane123 | 0:479e94f82332 | 109 | void menu() |
ciarankane123 | 0:479e94f82332 | 110 | { |
ciarankane123 | 0:479e94f82332 | 111 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 112 | lcd.printString("Main Menu",0,0); |
ciarankane123 | 0:479e94f82332 | 113 | lcd.printString("Target Localise",0,2); |
ciarankane123 | 0:479e94f82332 | 114 | lcd.printString("Sensor Initialise",0,4); |
ciarankane123 | 0:479e94f82332 | 115 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 116 | while(1) |
ciarankane123 | 0:479e94f82332 | 117 | { |
ciarankane123 | 0:479e94f82332 | 118 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 119 | if (g_bumperL_flag==1) { |
ciarankane123 | 0:479e94f82332 | 120 | initUltrasonic(); |
ciarankane123 | 0:479e94f82332 | 121 | } |
ciarankane123 | 0:479e94f82332 | 122 | else if(g_bumperR_flag==1) { |
ciarankane123 | 0:479e94f82332 | 123 | targetLocate(); |
ciarankane123 | 0:479e94f82332 | 124 | } |
ciarankane123 | 0:479e94f82332 | 125 | } |
ciarankane123 | 0:479e94f82332 | 126 | } |
ciarankane123 | 0:479e94f82332 | 127 | |
ciarankane123 | 0:479e94f82332 | 128 | |
ciarankane123 | 0:479e94f82332 | 129 | void initUltrasonic() |
ciarankane123 | 0:479e94f82332 | 130 | { |
ciarankane123 | 0:479e94f82332 | 131 | |
ciarankane123 | 0:479e94f82332 | 132 | greenleds= 1; |
ciarankane123 | 0:479e94f82332 | 133 | redleds=0; |
ciarankane123 | 0:479e94f82332 | 134 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 135 | lcd.printString("Ultrasonic",0,0); |
ciarankane123 | 0:479e94f82332 | 136 | lcd.printString("Sesnor",0,1); |
ciarankane123 | 0:479e94f82332 | 137 | lcd.printString("Initialising",0,2); |
ciarankane123 | 0:479e94f82332 | 138 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 139 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 140 | wait(1); |
ciarankane123 | 0:479e94f82332 | 141 | lcd.printString("Initialising.",0,2); |
ciarankane123 | 0:479e94f82332 | 142 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 143 | wait(1); |
ciarankane123 | 0:479e94f82332 | 144 | lcd.printString("Initialising..",0,2); |
ciarankane123 | 0:479e94f82332 | 145 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 146 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 147 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 148 | lcd.printString("Initialised",0,0); |
ciarankane123 | 0:479e94f82332 | 149 | lcd.printString("Press Start",0,1); |
ciarankane123 | 0:479e94f82332 | 150 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 151 | lcd.printString("Main Menu",0,3); |
ciarankane123 | 0:479e94f82332 | 152 | lcd.printString("",0,4); |
ciarankane123 | 0:479e94f82332 | 153 | lcd.printString("Ciaran Kane",0,5); |
ciarankane123 | 0:479e94f82332 | 154 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 155 | greenleds=0; |
ciarankane123 | 0:479e94f82332 | 156 | redleds=1; |
ciarankane123 | 0:479e94f82332 | 157 | wait(5.0); |
ciarankane123 | 0:479e94f82332 | 158 | |
ciarankane123 | 0:479e94f82332 | 159 | while(1) |
ciarankane123 | 0:479e94f82332 | 160 | { |
ciarankane123 | 0:479e94f82332 | 161 | wait(0.5); |
ciarankane123 | 0:479e94f82332 | 162 | if (g_START_flag==1) { |
ciarankane123 | 0:479e94f82332 | 163 | menu(); |
ciarankane123 | 0:479e94f82332 | 164 | } |
ciarankane123 | 0:479e94f82332 | 165 | } |
ciarankane123 | 0:479e94f82332 | 166 | } |
ciarankane123 | 0:479e94f82332 | 167 | void dist(int distance) |
ciarankane123 | 0:479e94f82332 | 168 | { |
ciarankane123 | 0:479e94f82332 | 169 | //printf("sense = %d\n", sense); |
ciarankane123 | 0:479e94f82332 | 170 | // printf("Distance changed to %dmm\r\n", distance); |
ciarankane123 | 0:479e94f82332 | 171 | |
ciarankane123 | 0:479e94f82332 | 172 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 173 | |
ciarankane123 | 0:479e94f82332 | 174 | char buffer[14]; |
ciarankane123 | 0:479e94f82332 | 175 | int length = sprintf(buffer,"%dmm", distance); |
ciarankane123 | 0:479e94f82332 | 176 | if (length <= 14) |
ciarankane123 | 0:479e94f82332 | 177 | |
ciarankane123 | 0:479e94f82332 | 178 | lcd.printString("set object to",0,0); |
ciarankane123 | 0:479e94f82332 | 179 | lcd.printString(" 200mm",0,1); |
ciarankane123 | 0:479e94f82332 | 180 | lcd.printString(buffer,24,3); |
ciarankane123 | 0:479e94f82332 | 181 | lcd.refresh(); |
ciarankane123 | 0:479e94f82332 | 182 | |
ciarankane123 | 0:479e94f82332 | 183 | } |
ciarankane123 | 0:479e94f82332 | 184 | |
ciarankane123 | 0:479e94f82332 | 185 | void targetLocate() |
ciarankane123 | 0:479e94f82332 | 186 | { |
ciarankane123 | 0:479e94f82332 | 187 | lcd.printString("Searching",0,1); |
ciarankane123 | 0:479e94f82332 | 188 | lcd.printString("For",0,2); |
ciarankane123 | 0:479e94f82332 | 189 | lcd.printString("Target",0,3); |
ciarankane123 | 0:479e94f82332 | 190 | lcd.clear(); |
ciarankane123 | 0:479e94f82332 | 191 | lcd.printString("Target",0,0); |
ciarankane123 | 0:479e94f82332 | 192 | lcd.printString("Found!",0,1); |
ciarankane123 | 0:479e94f82332 | 193 | } |