Eurobot 2013 IR testbench

Dependencies:   mbed-rtos mbed

Committer:
xiaxia686
Date:
Wed Nov 14 18:44:03 2012 +0000
Revision:
1:818904abef3d
Parent:
0:5ebe36076172
Working PWM;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
xiaxia686 1:818904abef3d 1 /* mbed PwmIn Library
xiaxia686 1:818904abef3d 2 * Copyright (c) 2008-2010, sford
xiaxia686 1:818904abef3d 3 *
xiaxia686 1:818904abef3d 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
xiaxia686 1:818904abef3d 5 * of this software and associated documentation files (the "Software"), to deal
xiaxia686 1:818904abef3d 6 * in the Software without restriction, including without limitation the rights
xiaxia686 1:818904abef3d 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
xiaxia686 1:818904abef3d 8 * copies of the Software, and to permit persons to whom the Software is
xiaxia686 1:818904abef3d 9 * furnished to do so, subject to the following conditions:
xiaxia686 1:818904abef3d 10 *
xiaxia686 1:818904abef3d 11 * The above copyright notice and this permission notice shall be included in
xiaxia686 1:818904abef3d 12 * all copies or substantial portions of the Software.
xiaxia686 1:818904abef3d 13 *
xiaxia686 1:818904abef3d 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
xiaxia686 1:818904abef3d 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
xiaxia686 1:818904abef3d 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
xiaxia686 1:818904abef3d 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
xiaxia686 1:818904abef3d 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
xiaxia686 1:818904abef3d 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
xiaxia686 1:818904abef3d 20 * THE SOFTWARE.
xiaxia686 1:818904abef3d 21 */
xiaxia686 1:818904abef3d 22
xiaxia686 1:818904abef3d 23 #include "PwmIn.h"
xiaxia686 1:818904abef3d 24 #include "globals.h"
xiaxia686 1:818904abef3d 25
xiaxia686 1:818904abef3d 26 PwmIn::PwmIn(PinName p) : _p(p) {
xiaxia686 1:818904abef3d 27 #ifdef PWM_INVERT
xiaxia686 1:818904abef3d 28 _p.rise(this, &PwmIn::fall);
xiaxia686 1:818904abef3d 29 _p.fall(this, &PwmIn::rise);
xiaxia686 1:818904abef3d 30 #else
xiaxia686 1:818904abef3d 31 _p.rise(this, &PwmIn::rise);
xiaxia686 1:818904abef3d 32 _p.fall(this, &PwmIn::fall);
xiaxia686 1:818904abef3d 33 #endif
xiaxia686 1:818904abef3d 34
xiaxia686 1:818904abef3d 35 _period = 0.0;
xiaxia686 1:818904abef3d 36 _pulsewidth = 0.0;
xiaxia686 1:818904abef3d 37 _t.start();
xiaxia686 1:818904abef3d 38
xiaxia686 1:818904abef3d 39 //init callabck function
xiaxia686 1:818904abef3d 40 callbackfunc = NULL;
xiaxia686 1:818904abef3d 41 callbackobj = NULL;
xiaxia686 1:818904abef3d 42 mcallbackfunc = NULL;
xiaxia686 1:818904abef3d 43
xiaxia686 1:818904abef3d 44 }
xiaxia686 1:818904abef3d 45
xiaxia686 1:818904abef3d 46 float PwmIn::period() {
xiaxia686 1:818904abef3d 47 return _period;
xiaxia686 1:818904abef3d 48 }
xiaxia686 1:818904abef3d 49
xiaxia686 1:818904abef3d 50 float PwmIn::pulsewidth() {
xiaxia686 1:818904abef3d 51 return _pulsewidth;
xiaxia686 1:818904abef3d 52 }
xiaxia686 1:818904abef3d 53
xiaxia686 1:818904abef3d 54 float PwmIn::dutycycle() {
xiaxia686 1:818904abef3d 55 return _pulsewidth / _period;
xiaxia686 1:818904abef3d 56 }
xiaxia686 1:818904abef3d 57
xiaxia686 1:818904abef3d 58 void PwmIn::rise() {
xiaxia686 1:818904abef3d 59 _period = _t.read();
xiaxia686 1:818904abef3d 60 _t.reset();
xiaxia686 1:818904abef3d 61
xiaxia686 1:818904abef3d 62
xiaxia686 1:818904abef3d 63
xiaxia686 1:818904abef3d 64
xiaxia686 1:818904abef3d 65 }
xiaxia686 1:818904abef3d 66
xiaxia686 1:818904abef3d 67 void PwmIn::fall() {
xiaxia686 1:818904abef3d 68 _pulsewidth = _t.read();
xiaxia686 1:818904abef3d 69
xiaxia686 1:818904abef3d 70 if (callbackfunc)
xiaxia686 1:818904abef3d 71 (*callbackfunc)(_pulsewidth / _period);
xiaxia686 1:818904abef3d 72
xiaxia686 1:818904abef3d 73 if (callbackobj && mcallbackfunc)
xiaxia686 1:818904abef3d 74 (callbackobj->*mcallbackfunc)(_pulsewidth / _period);
xiaxia686 1:818904abef3d 75
xiaxia686 1:818904abef3d 76 }