4ピン用ピング

Dependents:   CatPot_SensorRight CatPotI2CSlavetest CatPotI2CSlavetest CatPot_SensorRight_F ... more

Fork of Ping by Joel Rosiene

Committer:
ryuna
Date:
Sat Dec 06 07:40:50 2014 +0000
Revision:
2:6be59631152a
Parent:
0:1e4b66122368
using catpot . rakuraku;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rosienej 0:1e4b66122368 1 #include "Ping.h"
rosienej 0:1e4b66122368 2
rosienej 0:1e4b66122368 3 #include "mbed.h"
rosienej 0:1e4b66122368 4
ryuna 2:6be59631152a 5 Ping::Ping(PinName Trig_PIN, PinName Echo_PIN)
ryuna 2:6be59631152a 6 : _event(Echo_PIN)
ryuna 2:6be59631152a 7 , _trig(Trig_PIN),_echo(Echo_PIN)
rosienej 0:1e4b66122368 8 , _timer()
rosienej 0:1e4b66122368 9 {
rosienej 0:1e4b66122368 10 _event.rise(this,&Ping::_Starts);
rosienej 0:1e4b66122368 11 _event.fall(this,&Ping::_Stops);
rosienej 0:1e4b66122368 12 _SPEED_OF_SOUND_CM = 33;
rosienej 0:1e4b66122368 13 }
rosienej 0:1e4b66122368 14
rosienej 0:1e4b66122368 15 void Ping::_Starts(void)
rosienej 0:1e4b66122368 16 {
rosienej 0:1e4b66122368 17 _Valid = false; // start the timere, and invalidate the current time.
rosienej 0:1e4b66122368 18 _Busy = true;
rosienej 0:1e4b66122368 19 _timer.start();
rosienej 0:1e4b66122368 20 _Time = _timer.read_us();
rosienej 0:1e4b66122368 21 }
rosienej 0:1e4b66122368 22
rosienej 0:1e4b66122368 23 void Ping::_Stops(void)
rosienej 0:1e4b66122368 24 {
rosienej 0:1e4b66122368 25 _Valid = true; // When it stops, update the time
rosienej 0:1e4b66122368 26 _Busy = false;
rosienej 0:1e4b66122368 27 _Time = _timer.read_us()-_Time;
rosienej 0:1e4b66122368 28 }
rosienej 0:1e4b66122368 29
rosienej 0:1e4b66122368 30 void Ping::Send()
rosienej 0:1e4b66122368 31 {
rosienej 0:1e4b66122368 32
ryuna 2:6be59631152a 33 _trig.write(0); // see the ping documentation http://www.parallax.com/Portals/0/Downloads/docs/prod/acc/28015-PING-v1.6.pdf
rosienej 0:1e4b66122368 34 wait_us(3);
ryuna 2:6be59631152a 35 _trig.write(1);
rosienej 0:1e4b66122368 36 wait_us(3);
ryuna 2:6be59631152a 37 _trig.write(0);
rosienej 0:1e4b66122368 38
rosienej 0:1e4b66122368 39 }
rosienej 0:1e4b66122368 40 void Ping::Set_Speed_of_Sound(int SoS_ms )
rosienej 0:1e4b66122368 41 {
rosienej 0:1e4b66122368 42 _SPEED_OF_SOUND_CM = SoS_ms;
rosienej 0:1e4b66122368 43 }
rosienej 0:1e4b66122368 44
rosienej 0:1e4b66122368 45 int Ping::Read_cm()
rosienej 0:1e4b66122368 46 // -1 means not valid.
rosienej 0:1e4b66122368 47 {
rosienej 0:1e4b66122368 48 if(_Valid && ~_Busy)
ryuna 2:6be59631152a 49 return ((_Time*_SPEED_OF_SOUND_CM)/1000/2);
rosienej 0:1e4b66122368 50 else
rosienej 0:1e4b66122368 51 return -1;
rosienej 0:1e4b66122368 52 }