Ultrasonic Range Finder Sensors Library. May be used for SRF05 and all others sensors of the same kind (50ms period, 10us pulse)

Dependents:   FRC_2018 TestVMA 0hackton_08_06_18 lib_FRC_2019 ... more

Committer:
haarkon
Date:
Tue Jun 05 07:27:37 2018 +0000
Revision:
6:158dfeb5c24d
Parent:
3:4d9c742b860b
OK version (without warning);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
haarkon 0:bc016581f12b 1 /* mbed VMA306 Ultrasonic Rangefiner Library
haarkon 0:bc016581f12b 2 */
haarkon 0:bc016581f12b 3
haarkon 0:bc016581f12b 4 #include "VMA306.h"
haarkon 0:bc016581f12b 5
haarkon 3:4d9c742b860b 6 VMA306::VMA306(PinName trigG, PinName echoG, PinName trigB, PinName echoB, PinName trigD, PinName echoD)
haarkon 3:4d9c742b860b 7 : _trig1(trigG), _echo1(echoG), _trig2(trigB), _echo2(echoB), _trig3(trigD), _echo3(echoD)
haarkon 3:4d9c742b860b 8 {
haarkon 3:4d9c742b860b 9
haarkon 0:bc016581f12b 10 // Attach interrupts
haarkon 3:4d9c742b860b 11 _ticker.attach(callback(this, &VMA306::_startRanging), 0.05);
haarkon 3:4d9c742b860b 12
haarkon 3:4d9c742b860b 13 _echo1.rise(callback(this, &VMA306::_rise1));
haarkon 3:4d9c742b860b 14 _echo1.fall(callback(this, &VMA306::_fall1));
haarkon 3:4d9c742b860b 15 _echo1.enable_irq();
haarkon 3:4d9c742b860b 16 _echo2.rise(callback(this, &VMA306::_rise2));
haarkon 3:4d9c742b860b 17 _echo2.fall(callback(this, &VMA306::_fall2));
haarkon 3:4d9c742b860b 18 _echo2.enable_irq();
haarkon 3:4d9c742b860b 19 _echo3.rise(callback(this, &VMA306::_rise3));
haarkon 3:4d9c742b860b 20 _echo3.fall(callback(this, &VMA306::_fall3));
haarkon 3:4d9c742b860b 21 _echo3.enable_irq();
haarkon 3:4d9c742b860b 22 _timer.start();
haarkon 0:bc016581f12b 23 }
haarkon 3:4d9c742b860b 24
haarkon 3:4d9c742b860b 25 void VMA306::_startRanging()
haarkon 3:4d9c742b860b 26 {
haarkon 3:4d9c742b860b 27 static int step = 1;
haarkon 3:4d9c742b860b 28
haarkon 3:4d9c742b860b 29 switch(step) {
haarkon 3:4d9c742b860b 30 case 1:
haarkon 3:4d9c742b860b 31 _trig1 = 1;
haarkon 3:4d9c742b860b 32 wait_us(20);
haarkon 3:4d9c742b860b 33 _trig1 = 0;
haarkon 3:4d9c742b860b 34 step = 2;
haarkon 3:4d9c742b860b 35 break;
haarkon 3:4d9c742b860b 36
haarkon 3:4d9c742b860b 37 case 2:
haarkon 3:4d9c742b860b 38 _trig2 = 1;
haarkon 3:4d9c742b860b 39 wait_us(20);
haarkon 3:4d9c742b860b 40 _trig2 = 0;
haarkon 3:4d9c742b860b 41 step = 3;
haarkon 3:4d9c742b860b 42 break;
haarkon 3:4d9c742b860b 43
haarkon 3:4d9c742b860b 44 case 3:
haarkon 3:4d9c742b860b 45 _trig3 = 1;
haarkon 3:4d9c742b860b 46 wait_us(20);
haarkon 3:4d9c742b860b 47 _trig3 = 0;
haarkon 3:4d9c742b860b 48 step = 1;
haarkon 3:4d9c742b860b 49 break;
haarkon 3:4d9c742b860b 50 }
haarkon 0:bc016581f12b 51 }
haarkon 0:bc016581f12b 52
haarkon 0:bc016581f12b 53 // Clear and start the timer at the begining of the echo pulse
haarkon 3:4d9c742b860b 54 void VMA306::_rise1(void)
haarkon 3:4d9c742b860b 55 {
haarkon 3:4d9c742b860b 56 _startValue1 = _timer.read_us();
haarkon 0:bc016581f12b 57 }
haarkon 0:bc016581f12b 58
haarkon 0:bc016581f12b 59 // Stop and read the timer at the end of the pulse
haarkon 3:4d9c742b860b 60 void VMA306::_fall1(void)
haarkon 3:4d9c742b860b 61 {
haarkon 3:4d9c742b860b 62 _dist1 = (double)(_timer.read_us() - _startValue1)/58.0;
haarkon 3:4d9c742b860b 63 _VMA306Flag1 = 1;
haarkon 3:4d9c742b860b 64 }
haarkon 3:4d9c742b860b 65
haarkon 3:4d9c742b860b 66 // Clear and start the timer at the begining of the echo pulse
haarkon 3:4d9c742b860b 67 void VMA306::_rise2(void)
haarkon 3:4d9c742b860b 68 {
haarkon 3:4d9c742b860b 69 _startValue2 = _timer.read_us();
haarkon 3:4d9c742b860b 70 }
haarkon 3:4d9c742b860b 71
haarkon 3:4d9c742b860b 72 // Stop and read the timer at the end of the pulse
haarkon 3:4d9c742b860b 73 void VMA306::_fall2(void)
haarkon 3:4d9c742b860b 74 {
haarkon 3:4d9c742b860b 75 _dist2 = (double)(_timer.read_us() - _startValue2)/58.0;
haarkon 3:4d9c742b860b 76 _VMA306Flag2 = 1;
haarkon 3:4d9c742b860b 77 }
haarkon 3:4d9c742b860b 78
haarkon 3:4d9c742b860b 79 // Clear and start the timer at the begining of the echo pulse
haarkon 3:4d9c742b860b 80 void VMA306::_rise3(void)
haarkon 3:4d9c742b860b 81 {
haarkon 3:4d9c742b860b 82 _startValue3 = _timer.read_us();
haarkon 3:4d9c742b860b 83 }
haarkon 3:4d9c742b860b 84
haarkon 3:4d9c742b860b 85 // Stop and read the timer at the end of the pulse
haarkon 3:4d9c742b860b 86 void VMA306::_fall3(void)
haarkon 3:4d9c742b860b 87 {
haarkon 3:4d9c742b860b 88 _dist3 = (double)(_timer.read_us() - _startValue3)/58.0;
haarkon 3:4d9c742b860b 89 _VMA306Flag3 = 1;
haarkon 0:bc016581f12b 90 }
haarkon 0:bc016581f12b 91
haarkon 3:4d9c742b860b 92 int VMA306::isUSGReady (void)
haarkon 3:4d9c742b860b 93 {
haarkon 3:4d9c742b860b 94 return (_VMA306Flag1);
haarkon 3:4d9c742b860b 95 }
haarkon 0:bc016581f12b 96
haarkon 3:4d9c742b860b 97 int VMA306::isUSBReady (void)
haarkon 3:4d9c742b860b 98 {
haarkon 3:4d9c742b860b 99 return (_VMA306Flag2);
haarkon 3:4d9c742b860b 100 }
haarkon 3:4d9c742b860b 101
haarkon 3:4d9c742b860b 102 int VMA306::isUSDReady (void)
haarkon 3:4d9c742b860b 103 {
haarkon 3:4d9c742b860b 104 return (_VMA306Flag3);
haarkon 0:bc016581f12b 105 }
haarkon 0:bc016581f12b 106
haarkon 3:4d9c742b860b 107 float VMA306::readUSG(void)
haarkon 3:4d9c742b860b 108 {
haarkon 3:4d9c742b860b 109 _VMA306Flag1 = 0;
haarkon 3:4d9c742b860b 110 return (_dist1);
haarkon 0:bc016581f12b 111 }
haarkon 0:bc016581f12b 112
haarkon 3:4d9c742b860b 113 float VMA306::readUSB(void)
haarkon 3:4d9c742b860b 114 {
haarkon 3:4d9c742b860b 115 _VMA306Flag2 = 0;
haarkon 3:4d9c742b860b 116 return (_dist2);
haarkon 0:bc016581f12b 117 }
haarkon 3:4d9c742b860b 118
haarkon 3:4d9c742b860b 119 float VMA306::readUSD(void)
haarkon 3:4d9c742b860b 120 {
haarkon 3:4d9c742b860b 121 _VMA306Flag3 = 0;
haarkon 3:4d9c742b860b 122 return (_dist3);
haarkon 3:4d9c742b860b 123 }