This is a very simple guide, reviewing the steps required to get Blinky working on an Mbed OS platform.

Dependencies:   mbed Adafruit_GFX

Committer:
ParkChunMyong
Date:
Thu Jun 13 03:26:42 2019 +0000
Revision:
96:7465ab270e7a
Parent:
95:250afd53b710
first init

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ParkChunMyong 95:250afd53b710 1 #include "ultrasonic.h"
ParkChunMyong 95:250afd53b710 2
ParkChunMyong 95:250afd53b710 3 // generate a 10 us pulse to start HCSR04 ulrasonic sensor and
ParkChunMyong 95:250afd53b710 4 // enable IRQ for echo pin.
ParkChunMyong 95:250afd53b710 5 Ultrasonic::Ultrasonic(PinName trigPin, PinName echoPin, float timeout, bool mode, float time) :
ParkChunMyong 95:250afd53b710 6 _trig(trigPin), _echo(echoPin), _toVal(timeout), _pc(PA_2, PA_3), _repeat(mode), _repeatD(time){
ParkChunMyong 95:250afd53b710 7 _timer.reset();
ParkChunMyong 95:250afd53b710 8 _echo.rise(this, &Ultrasonic::_startT);
ParkChunMyong 95:250afd53b710 9 _echo.fall(this, &Ultrasonic::_endT);
ParkChunMyong 95:250afd53b710 10 _echo.mode(PullUp);
ParkChunMyong 95:250afd53b710 11 _echo.disable_irq();
ParkChunMyong 95:250afd53b710 12 _pc.baud(115200);
ParkChunMyong 95:250afd53b710 13 }
ParkChunMyong 95:250afd53b710 14
ParkChunMyong 95:250afd53b710 15
ParkChunMyong 95:250afd53b710 16 Ultrasonic::~Ultrasonic(){}
ParkChunMyong 95:250afd53b710 17
ParkChunMyong 95:250afd53b710 18 int Ultrasonic::getDistance(void) {
ParkChunMyong 95:250afd53b710 19 calculateDistance();
ParkChunMyong 95:250afd53b710 20 return _distance;
ParkChunMyong 95:250afd53b710 21 }
ParkChunMyong 95:250afd53b710 22
ParkChunMyong 95:250afd53b710 23 void Ultrasonic::calculateDistance(void) {
ParkChunMyong 95:250afd53b710 24 clearStatus();
ParkChunMyong 95:250afd53b710 25
ParkChunMyong 95:250afd53b710 26 trig();
ParkChunMyong 95:250afd53b710 27 getPulseDuration();
ParkChunMyong 95:250afd53b710 28
ParkChunMyong 95:250afd53b710 29 if (_pulseDuration >= 0) _distance = _pulseDuration / 29 / 2;
ParkChunMyong 95:250afd53b710 30 else _distance = -1;
ParkChunMyong 95:250afd53b710 31
ParkChunMyong 95:250afd53b710 32 }
ParkChunMyong 95:250afd53b710 33
ParkChunMyong 95:250afd53b710 34 void Ultrasonic::trig(void) {
ParkChunMyong 95:250afd53b710 35 _echo.enable_irq();
ParkChunMyong 95:250afd53b710 36 _trig = 1;
ParkChunMyong 95:250afd53b710 37 wait_us(10);
ParkChunMyong 95:250afd53b710 38 _trig = 0;
ParkChunMyong 95:250afd53b710 39 }
ParkChunMyong 95:250afd53b710 40
ParkChunMyong 95:250afd53b710 41 int Ultrasonic::getPulseDuration(void) {
ParkChunMyong 95:250afd53b710 42
ParkChunMyong 95:250afd53b710 43 while (!_break) {
ParkChunMyong 95:250afd53b710 44 _pc.printf("\r");
ParkChunMyong 95:250afd53b710 45 } // wait signal
ParkChunMyong 95:250afd53b710 46 // we need to change
ParkChunMyong 95:250afd53b710 47
ParkChunMyong 95:250afd53b710 48 _break = 0;
ParkChunMyong 95:250afd53b710 49 _echo.disable_irq();
ParkChunMyong 95:250afd53b710 50
ParkChunMyong 95:250afd53b710 51 if (_end >= 0) _pulseDuration = _end - _start;
ParkChunMyong 95:250afd53b710 52 else _pulseDuration = -1;
ParkChunMyong 95:250afd53b710 53
ParkChunMyong 95:250afd53b710 54 return _pulseDuration;
ParkChunMyong 95:250afd53b710 55 }
ParkChunMyong 95:250afd53b710 56
ParkChunMyong 95:250afd53b710 57 int Ultrasonic::getStatus(void) {
ParkChunMyong 95:250afd53b710 58 return _done;
ParkChunMyong 95:250afd53b710 59 }
ParkChunMyong 95:250afd53b710 60
ParkChunMyong 95:250afd53b710 61 void Ultrasonic::clearStatus(void) {
ParkChunMyong 95:250afd53b710 62 _done = 0;
ParkChunMyong 95:250afd53b710 63 _pulseDuration = 0;
ParkChunMyong 95:250afd53b710 64 _distance = 0;
ParkChunMyong 95:250afd53b710 65 _start = -1;
ParkChunMyong 95:250afd53b710 66 _end = -1;
ParkChunMyong 95:250afd53b710 67 _trig = 0;
ParkChunMyong 95:250afd53b710 68 }
ParkChunMyong 95:250afd53b710 69
ParkChunMyong 95:250afd53b710 70 void Ultrasonic::pauseMeasure(void) {
ParkChunMyong 95:250afd53b710 71 _done = 1;
ParkChunMyong 95:250afd53b710 72 }
ParkChunMyong 95:250afd53b710 73
ParkChunMyong 95:250afd53b710 74 void Ultrasonic::_startT(void) {
ParkChunMyong 95:250afd53b710 75 _timer.start();
ParkChunMyong 95:250afd53b710 76 _start = _timer.read_us();
ParkChunMyong 95:250afd53b710 77 _timeout.attach(callback(this, &Ultrasonic::_timeout_cb), _toVal);
ParkChunMyong 95:250afd53b710 78 }
ParkChunMyong 95:250afd53b710 79
ParkChunMyong 95:250afd53b710 80 void Ultrasonic::_endT(void) {
ParkChunMyong 95:250afd53b710 81 _timeout.detach();
ParkChunMyong 95:250afd53b710 82 _end = _timer.read_us();
ParkChunMyong 95:250afd53b710 83 _timer.stop();
ParkChunMyong 95:250afd53b710 84 _timer.reset();
ParkChunMyong 95:250afd53b710 85 _break = 1;
ParkChunMyong 95:250afd53b710 86 }
ParkChunMyong 95:250afd53b710 87
ParkChunMyong 95:250afd53b710 88 void Ultrasonic::_timeout_cb(void) {
ParkChunMyong 95:250afd53b710 89 _timer.stop();
ParkChunMyong 95:250afd53b710 90 _timer.reset();
ParkChunMyong 95:250afd53b710 91 _break = 1;
ParkChunMyong 95:250afd53b710 92 }
ParkChunMyong 95:250afd53b710 93
ParkChunMyong 95:250afd53b710 94 void Ultrasonic::setMode(bool mode){
ParkChunMyong 95:250afd53b710 95 _repeat = mode;
ParkChunMyong 95:250afd53b710 96 }
ParkChunMyong 95:250afd53b710 97
ParkChunMyong 95:250afd53b710 98 void Ultrasonic::printDistance(float interval){
ParkChunMyong 95:250afd53b710 99
ParkChunMyong 95:250afd53b710 100 int num = (int)(1/interval);
ParkChunMyong 95:250afd53b710 101
ParkChunMyong 95:250afd53b710 102 if(_repeat == true)
ParkChunMyong 95:250afd53b710 103 {
ParkChunMyong 95:250afd53b710 104 for(int i=0; i<num; i++)
ParkChunMyong 95:250afd53b710 105 {
ParkChunMyong 95:250afd53b710 106 _pc.printf("distance: %d\r\n", getDistance());
ParkChunMyong 95:250afd53b710 107 wait(interval/2);
ParkChunMyong 95:250afd53b710 108 }
ParkChunMyong 95:250afd53b710 109 }
ParkChunMyong 95:250afd53b710 110
ParkChunMyong 95:250afd53b710 111 else
ParkChunMyong 95:250afd53b710 112 _pc.printf("distance: %d\r\n", getDistance());
ParkChunMyong 95:250afd53b710 113
ParkChunMyong 95:250afd53b710 114 num = 0;
ParkChunMyong 95:250afd53b710 115 }