Maxbotix ultrasonic distance sensor library

Fork of MaxbotixDriver by Daniel Casner

Committer:
SomeRandomBloke
Date:
Fri Jan 17 14:49:13 2020 +0000
Revision:
3:c231deea4d36
Parent:
1:330989f98a6e
Child:
4:95f696f59d94
something

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DanielC 0:7e65f5077f5a 1 #include "sonar.h"
DanielC 0:7e65f5077f5a 2
DanielC 0:7e65f5077f5a 3 Sonar::Sonar(PinName input, Timer& t) :
DanielC 0:7e65f5077f5a 4 interrupt(input),
DanielC 0:7e65f5077f5a 5 time(t),
DanielC 0:7e65f5077f5a 6 pulseStartTime(0),
DanielC 0:7e65f5077f5a 7 range(0) {
SomeRandomBloke 3:c231deea4d36 8 interrupt.rise(callback(this,&Sonar::pulseStart));
SomeRandomBloke 3:c231deea4d36 9 interrupt.fall(callback(this,&Sonar::pulseStop));
DanielC 0:7e65f5077f5a 10 }
DanielC 0:7e65f5077f5a 11
DanielC 0:7e65f5077f5a 12 int Sonar::read() {
DanielC 0:7e65f5077f5a 13 return range;
DanielC 0:7e65f5077f5a 14 }
DanielC 0:7e65f5077f5a 15
SomeRandomBloke 1:330989f98a6e 16 int Sonar::readCm() {
SomeRandomBloke 1:330989f98a6e 17 return range / 58; // 58uS per CM
SomeRandomBloke 1:330989f98a6e 18 }
SomeRandomBloke 1:330989f98a6e 19
DanielC 0:7e65f5077f5a 20 Sonar::operator int() {
DanielC 0:7e65f5077f5a 21 return read();
DanielC 0:7e65f5077f5a 22 }
DanielC 0:7e65f5077f5a 23
DanielC 0:7e65f5077f5a 24 void Sonar::pulseStart() {
DanielC 0:7e65f5077f5a 25 pulseStartTime = time.read_us();
DanielC 0:7e65f5077f5a 26 }
DanielC 0:7e65f5077f5a 27
DanielC 0:7e65f5077f5a 28 void Sonar::pulseStop() {
DanielC 0:7e65f5077f5a 29 int endTime = time.read_us();
DanielC 0:7e65f5077f5a 30 if (endTime < pulseStartTime) return; // Escape if there's been a roll over
SomeRandomBloke 1:330989f98a6e 31 range = (endTime - pulseStartTime); // / 58; // 58uS per CM
DanielC 0:7e65f5077f5a 32 }