Mike Spadaru / physcom
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ping.h Source File

ping.h

00001 /* mbed Ping Library
00002  * Copyright (c) 2007-2010 rosienej
00003  *
00004  * Permission is hereby granted, free of charge, to any person obtaining a copy
00005  * of this software and associated documentation files (the "Software"), to deal
00006  * in the Software without restriction, including without limitation the rights
00007  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00008  * copies of the Software, and to permit persons to whom the Software is
00009  * furnished to do so, subject to the following conditions:
00010  *
00011  * The above copyright notice and this permission notice shall be included in
00012  * all copies or substantial portions of the Software.
00013  *
00014  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00015  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00016  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00017  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00018  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00019  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00020  * THE SOFTWARE.
00021  */
00022     
00023 #ifndef PHYSCOM_PING_H
00024 #define PHYSCOM_PING_H
00025 
00026 #include "mbed.h"
00027 
00028 namespace physcom {
00029 
00030 /** Ping  class, based on an InterruptIn pin, and a timer
00031  *  works with the parallax Ping))) sensor (www.parallax.com)
00032  *
00033  * Example:
00034  * @code
00035  * // Continuously send pings and read the sensor
00036  * #include "mbed.h"
00037  * #include "physcom.h"
00038  *
00039  * using namespace physcom;
00040  * 
00041  * Ping Pinger(p21);
00042  * 
00043  * int main() {
00044  *     int range;
00045  
00046  *     while(1) {
00047  *  
00048  *        Pinger.Send();    
00049  *        wait_ms(30);
00050  *        range = Pinger.Read_cm();
00051  *     }
00052  * }
00053  * @endcode
00054  */
00055 class Ping {
00056   public:
00057    /** Create a Ping object connected to the specified InterruptIn pin
00058     *
00059     * @param PING_PIN Mbed Pin connected to the ultrasound sensor. Can be any
00060     * Digital Input Pin. Example: p21   
00061     */
00062     Ping(PinName PING_PIN);
00063     
00064      /** Sends a ping in order to measure the distance to an object that is in 
00065       * front of the ultrasound sensor. This distance can be read using the 
00066       * Read_cm function.
00067       */
00068     void Send(void);
00069     
00070      /** Set the speed of sound, default 33 cm/ms 
00071       *
00072       * @param Speed of sound in centimeters per milliseconds
00073       */
00074     void Set_Speed_of_Sound(int SoS_ms);
00075     
00076     /** Read the result in centimeters
00077       *
00078       * @param none
00079       * @returns distance in centimeters
00080       */
00081     int Read_cm(void);
00082     
00083   protected:
00084     
00085     InterruptIn     _event;
00086     DigitalInOut    _cmd;
00087     Timer           _timer;
00088 
00089     bool _Valid;
00090     bool _Busy;
00091     int  _Time;
00092     int  _SPEED_OF_SOUND_CM; /* in milliseconds */
00093     
00094     void _Starts(void);
00095     void _Stops(void);
00096     
00097   };
00098   
00099 } // Namespace physcom
00100   
00101   #endif
00102