working version with calibration done

Fork of Eurobot2013 by Oskar Weigl

Committer:
xiaxia686
Date:
Sun Apr 07 16:30:49 2013 +0000
Revision:
10:2bd9f4e02b74
Working version with no serial communication to the main board. The IR sensors uses mode for identification;

Who changed what in which revision?

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