a measuring device that uses ultrasonic distance sensor SRF02 to measure distance

Dependencies:   Beep N5110 PowerControl SRF02 beep mbed

Committer:
FaqihahRazak
Date:
Mon May 11 21:36:26 2015 +0000
Revision:
0:1ca8ba125793
Changes on the actions taken to a specific distance range; ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
FaqihahRazak 0:1ca8ba125793 1 #include "mbed.h"
FaqihahRazak 0:1ca8ba125793 2 #include "SRF02.h"
FaqihahRazak 0:1ca8ba125793 3 #include "N5110.h"
FaqihahRazak 0:1ca8ba125793 4 #include "Beep.h"
FaqihahRazak 0:1ca8ba125793 5 #include "PowerControl/PowerControl.h"
FaqihahRazak 0:1ca8ba125793 6 #include "PowerControl/EthernetPowerControl.h"
FaqihahRazak 0:1ca8ba125793 7
FaqihahRazak 0:1ca8ba125793 8 #define USR_POWERDOWN (0x104)
FaqihahRazak 0:1ca8ba125793 9 int semihost_powerdown()
FaqihahRazak 0:1ca8ba125793 10 {
FaqihahRazak 0:1ca8ba125793 11
FaqihahRazak 0:1ca8ba125793 12 uint32_t arg;
FaqihahRazak 0:1ca8ba125793 13 return __semihost(USR_POWERDOWN, &arg);
FaqihahRazak 0:1ca8ba125793 14
FaqihahRazak 0:1ca8ba125793 15 }
FaqihahRazak 0:1ca8ba125793 16
FaqihahRazak 0:1ca8ba125793 17
FaqihahRazak 0:1ca8ba125793 18
FaqihahRazak 0:1ca8ba125793 19 //initialise pin
FaqihahRazak 0:1ca8ba125793 20 N5110 lcd(p7,p8,p9,p10,p11,p13,p26); //pins used for sensor
FaqihahRazak 0:1ca8ba125793 21 SRF02 sensor(p28, p27); //pins used for the range finder sensor
FaqihahRazak 0:1ca8ba125793 22 InterruptIn button(p16); // pins used for buttons to change mode
FaqihahRazak 0:1ca8ba125793 23 Beep buzzer(p21); //pins used for buzzeer
FaqihahRazak 0:1ca8ba125793 24 PwmOut red(p24); //pins for red LED
FaqihahRazak 0:1ca8ba125793 25 PwmOut green(p23); //pins for green LED
FaqihahRazak 0:1ca8ba125793 26
FaqihahRazak 0:1ca8ba125793 27 //variables
FaqihahRazak 0:1ca8ba125793 28 int buttonFlag=0;
FaqihahRazak 0:1ca8ba125793 29 int distance;
FaqihahRazak 0:1ca8ba125793 30 int mode2=0;
FaqihahRazak 0:1ca8ba125793 31
FaqihahRazak 0:1ca8ba125793 32
FaqihahRazak 0:1ca8ba125793 33 //functions to callback
FaqihahRazak 0:1ca8ba125793 34 void intro();
FaqihahRazak 0:1ca8ba125793 35 void getSensorValue();
FaqihahRazak 0:1ca8ba125793 36 void readMode1();
FaqihahRazak 0:1ca8ba125793 37 void rangeAction1();
FaqihahRazak 0:1ca8ba125793 38 void rangeAction2();
FaqihahRazak 0:1ca8ba125793 39 void rangeAction3();
FaqihahRazak 0:1ca8ba125793 40 void buttonPressed();
FaqihahRazak 0:1ca8ba125793 41 void readMode2();
FaqihahRazak 0:1ca8ba125793 42
FaqihahRazak 0:1ca8ba125793 43 int main()
FaqihahRazak 0:1ca8ba125793 44 {
FaqihahRazak 0:1ca8ba125793 45 PHY_PowerDown();
FaqihahRazak 0:1ca8ba125793 46 int result = semihost_powerdown();
FaqihahRazak 0:1ca8ba125793 47
FaqihahRazak 0:1ca8ba125793 48 lcd.init();
FaqihahRazak 0:1ca8ba125793 49 intro(); // to display the intro message
FaqihahRazak 0:1ca8ba125793 50 lcd.clear();
FaqihahRazak 0:1ca8ba125793 51
FaqihahRazak 0:1ca8ba125793 52 button.rise(&buttonPressed); // trigger event on rising edge
FaqihahRazak 0:1ca8ba125793 53 while(1) {
FaqihahRazak 0:1ca8ba125793 54
FaqihahRazak 0:1ca8ba125793 55 int distance = sensor.getDistanceCm();
FaqihahRazak 0:1ca8ba125793 56 char buffer[14];
FaqihahRazak 0:1ca8ba125793 57 int length = sprintf(buffer,"D= %d cm",distance);
FaqihahRazak 0:1ca8ba125793 58 if(length<=14)
FaqihahRazak 0:1ca8ba125793 59 lcd.printString(buffer,7,3);
FaqihahRazak 0:1ca8ba125793 60 readMode1();
FaqihahRazak 0:1ca8ba125793 61 wait(1);
FaqihahRazak 0:1ca8ba125793 62 lcd.clear();
FaqihahRazak 0:1ca8ba125793 63 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 64
FaqihahRazak 0:1ca8ba125793 65 if (buttonFlag) {
FaqihahRazak 0:1ca8ba125793 66
FaqihahRazak 0:1ca8ba125793 67 mode2 =~ mode2;
FaqihahRazak 0:1ca8ba125793 68 buttonFlag = 0;
FaqihahRazak 0:1ca8ba125793 69 }
FaqihahRazak 0:1ca8ba125793 70
FaqihahRazak 0:1ca8ba125793 71 if (mode2) {
FaqihahRazak 0:1ca8ba125793 72 getSensorValue();
FaqihahRazak 0:1ca8ba125793 73 readMode2();
FaqihahRazak 0:1ca8ba125793 74 lcd.clear();
FaqihahRazak 0:1ca8ba125793 75
FaqihahRazak 0:1ca8ba125793 76 }
FaqihahRazak 0:1ca8ba125793 77
FaqihahRazak 0:1ca8ba125793 78 }
FaqihahRazak 0:1ca8ba125793 79 }
FaqihahRazak 0:1ca8ba125793 80
FaqihahRazak 0:1ca8ba125793 81 //welcome message (name, id, project name)
FaqihahRazak 0:1ca8ba125793 82 void intro()
FaqihahRazak 0:1ca8ba125793 83 {
FaqihahRazak 0:1ca8ba125793 84
FaqihahRazak 0:1ca8ba125793 85 lcd.printString("Measure Up!",2,0);
FaqihahRazak 0:1ca8ba125793 86 lcd.printString("Nur Faqihah", 2,2);
FaqihahRazak 0:1ca8ba125793 87 lcd.printString("Abd Razak", 2,3);
FaqihahRazak 0:1ca8ba125793 88 lcd.printString("200907347", 2,4);
FaqihahRazak 0:1ca8ba125793 89 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 90 wait (3.0);
FaqihahRazak 0:1ca8ba125793 91 }
FaqihahRazak 0:1ca8ba125793 92
FaqihahRazak 0:1ca8ba125793 93 //to get distance reading from the sensor
FaqihahRazak 0:1ca8ba125793 94 void getSensorValue()
FaqihahRazak 0:1ca8ba125793 95 {
FaqihahRazak 0:1ca8ba125793 96 distance = sensor.getDistanceCm();
FaqihahRazak 0:1ca8ba125793 97 }
FaqihahRazak 0:1ca8ba125793 98
FaqihahRazak 0:1ca8ba125793 99
FaqihahRazak 0:1ca8ba125793 100 // actions for mode 1 based on the disatance range
FaqihahRazak 0:1ca8ba125793 101 void readMode1()
FaqihahRazak 0:1ca8ba125793 102 {
FaqihahRazak 0:1ca8ba125793 103 if (distance >= 235) {
FaqihahRazak 0:1ca8ba125793 104
FaqihahRazak 0:1ca8ba125793 105 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 106 rangeAction1();
FaqihahRazak 0:1ca8ba125793 107
FaqihahRazak 0:1ca8ba125793 108 } else if (distance >= 176 & distance <= 234) {
FaqihahRazak 0:1ca8ba125793 109 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 110 rangeAction1();
FaqihahRazak 0:1ca8ba125793 111
FaqihahRazak 0:1ca8ba125793 112 } else if (distance >= 150 & distance <= 175) {
FaqihahRazak 0:1ca8ba125793 113 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 114 rangeAction2();
FaqihahRazak 0:1ca8ba125793 115
FaqihahRazak 0:1ca8ba125793 116 } else if (distance >= 135 & distance <= 149) {
FaqihahRazak 0:1ca8ba125793 117 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 118 rangeAction2();
FaqihahRazak 0:1ca8ba125793 119
FaqihahRazak 0:1ca8ba125793 120 } else if (distance >= 105 & distance <= 134) {
FaqihahRazak 0:1ca8ba125793 121 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 122 rangeAction2();
FaqihahRazak 0:1ca8ba125793 123
FaqihahRazak 0:1ca8ba125793 124 } else if (distance >= 75 & distance <= 104) {
FaqihahRazak 0:1ca8ba125793 125 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 126 rangeAction3();
FaqihahRazak 0:1ca8ba125793 127
FaqihahRazak 0:1ca8ba125793 128 } else if (distance >= 46 & distance <= 74) {
FaqihahRazak 0:1ca8ba125793 129 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 130 //rangeAction3();
FaqihahRazak 0:1ca8ba125793 131
FaqihahRazak 0:1ca8ba125793 132 } else if (distance <= 45) {
FaqihahRazak 0:1ca8ba125793 133 red = 1;
FaqihahRazak 0:1ca8ba125793 134 buzzer.beep(1000, 60);
FaqihahRazak 0:1ca8ba125793 135 }
FaqihahRazak 0:1ca8ba125793 136 }
FaqihahRazak 0:1ca8ba125793 137
FaqihahRazak 0:1ca8ba125793 138
FaqihahRazak 0:1ca8ba125793 139 // actions for mode 2 based on the disatance range
FaqihahRazak 0:1ca8ba125793 140 void readMode2()
FaqihahRazak 0:1ca8ba125793 141 {
FaqihahRazak 0:1ca8ba125793 142 if (distance >= 235) {
FaqihahRazak 0:1ca8ba125793 143
FaqihahRazak 0:1ca8ba125793 144 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 145 lcd.printString("Too Long!",6,2);
FaqihahRazak 0:1ca8ba125793 146 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 147 rangeAction1();
FaqihahRazak 0:1ca8ba125793 148
FaqihahRazak 0:1ca8ba125793 149 } else if (distance >= 176 & distance <= 234) {
FaqihahRazak 0:1ca8ba125793 150
FaqihahRazak 0:1ca8ba125793 151 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 152 lcd.printString("Too Long!",6,2);
FaqihahRazak 0:1ca8ba125793 153 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 154 rangeAction1();
FaqihahRazak 0:1ca8ba125793 155
FaqihahRazak 0:1ca8ba125793 156 } else if (distance >= 150 & distance <= 175) {
FaqihahRazak 0:1ca8ba125793 157
FaqihahRazak 0:1ca8ba125793 158 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 159 lcd.printString("Okay!",2,2);
FaqihahRazak 0:1ca8ba125793 160 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 161 rangeAction2();
FaqihahRazak 0:1ca8ba125793 162
FaqihahRazak 0:1ca8ba125793 163 } else if (distance >= 135 & distance <= 149) {
FaqihahRazak 0:1ca8ba125793 164
FaqihahRazak 0:1ca8ba125793 165 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 166 lcd.printString("Okay!",2,2);
FaqihahRazak 0:1ca8ba125793 167 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 168 rangeAction2();
FaqihahRazak 0:1ca8ba125793 169
FaqihahRazak 0:1ca8ba125793 170 } else if (distance >= 105 & distance <= 134) {
FaqihahRazak 0:1ca8ba125793 171
FaqihahRazak 0:1ca8ba125793 172 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 173 lcd.printString("Okay!",2,2);
FaqihahRazak 0:1ca8ba125793 174 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 175 rangeAction2();
FaqihahRazak 0:1ca8ba125793 176
FaqihahRazak 0:1ca8ba125793 177 } else if (distance >= 75 & distance <= 104) {
FaqihahRazak 0:1ca8ba125793 178
FaqihahRazak 0:1ca8ba125793 179 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 180 lcd.printString("Okay!",2,2);
FaqihahRazak 0:1ca8ba125793 181 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 182 rangeAction2();
FaqihahRazak 0:1ca8ba125793 183
FaqihahRazak 0:1ca8ba125793 184 } else if (distance >= 46 & distance <= 74) {
FaqihahRazak 0:1ca8ba125793 185
FaqihahRazak 0:1ca8ba125793 186 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 187 lcd.printString("Too Short!",2,2);
FaqihahRazak 0:1ca8ba125793 188 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 189 rangeAction3();
FaqihahRazak 0:1ca8ba125793 190
FaqihahRazak 0:1ca8ba125793 191 } else if (distance <= 45) {
FaqihahRazak 0:1ca8ba125793 192
FaqihahRazak 0:1ca8ba125793 193 lcd.printString("Distance",4,1);
FaqihahRazak 0:1ca8ba125793 194 lcd.printString("Too Short!",2,2);
FaqihahRazak 0:1ca8ba125793 195 lcd.refresh();
FaqihahRazak 0:1ca8ba125793 196 red = 1;
FaqihahRazak 0:1ca8ba125793 197 buzzer.beep(1000, 60);
FaqihahRazak 0:1ca8ba125793 198 }
FaqihahRazak 0:1ca8ba125793 199 }
FaqihahRazak 0:1ca8ba125793 200
FaqihahRazak 0:1ca8ba125793 201 //Interrupt Service Routine
FaqihahRazak 0:1ca8ba125793 202 void buttonPressed()
FaqihahRazak 0:1ca8ba125793 203 {
FaqihahRazak 0:1ca8ba125793 204 buttonFlag = 1;
FaqihahRazak 0:1ca8ba125793 205 }
FaqihahRazak 0:1ca8ba125793 206
FaqihahRazak 0:1ca8ba125793 207 //Actions when range action 1 is achieved
FaqihahRazak 0:1ca8ba125793 208 void rangeAction1(){
FaqihahRazak 0:1ca8ba125793 209
FaqihahRazak 0:1ca8ba125793 210 red = 0;
FaqihahRazak 0:1ca8ba125793 211 green = 1;
FaqihahRazak 0:1ca8ba125793 212 buzzer.beep(1000,0.5);
FaqihahRazak 0:1ca8ba125793 213 wait(1);
FaqihahRazak 0:1ca8ba125793 214 buzzer.nobeep();
FaqihahRazak 0:1ca8ba125793 215
FaqihahRazak 0:1ca8ba125793 216 }
FaqihahRazak 0:1ca8ba125793 217
FaqihahRazak 0:1ca8ba125793 218 //Actions when range action 2 is achieved
FaqihahRazak 0:1ca8ba125793 219 void rangeAction2(){
FaqihahRazak 0:1ca8ba125793 220
FaqihahRazak 0:1ca8ba125793 221 red = 0;
FaqihahRazak 0:1ca8ba125793 222 green = 0;
FaqihahRazak 0:1ca8ba125793 223 buzzer.beep(1000,1);
FaqihahRazak 0:1ca8ba125793 224 wait(0.5);
FaqihahRazak 0:1ca8ba125793 225 buzzer.nobeep();
FaqihahRazak 0:1ca8ba125793 226
FaqihahRazak 0:1ca8ba125793 227 }
FaqihahRazak 0:1ca8ba125793 228
FaqihahRazak 0:1ca8ba125793 229 //Actions when range action 3 is achieved
FaqihahRazak 0:1ca8ba125793 230 void rangeAction3(){
FaqihahRazak 0:1ca8ba125793 231
FaqihahRazak 0:1ca8ba125793 232 red = 1;
FaqihahRazak 0:1ca8ba125793 233 green = 0;
FaqihahRazak 0:1ca8ba125793 234 buzzer.beep(1000,0.5);
FaqihahRazak 0:1ca8ba125793 235 wait(0.2);
FaqihahRazak 0:1ca8ba125793 236 buzzer.nobeep();
FaqihahRazak 0:1ca8ba125793 237
FaqihahRazak 0:1ca8ba125793 238 }
FaqihahRazak 0:1ca8ba125793 239
FaqihahRazak 0:1ca8ba125793 240
FaqihahRazak 0:1ca8ba125793 241
FaqihahRazak 0:1ca8ba125793 242
FaqihahRazak 0:1ca8ba125793 243
FaqihahRazak 0:1ca8ba125793 244
FaqihahRazak 0:1ca8ba125793 245
FaqihahRazak 0:1ca8ba125793 246
FaqihahRazak 0:1ca8ba125793 247