Xbeat beta code as published by Andre Moehl ( http://mbed.org/users/hoppel/ ) With a slightly modified serial port definition
button.cpp@0:badcd0d61c7b, 2011-02-04 (annotated)
- Committer:
- n0p
- Date:
- Fri Feb 04 08:31:00 2011 +0000
- Revision:
- 0:badcd0d61c7b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
n0p | 0:badcd0d61c7b | 1 | /* |
n0p | 0:badcd0d61c7b | 2 | * |
n0p | 0:badcd0d61c7b | 3 | * This program is free software; you can redistribute it and/or modify |
n0p | 0:badcd0d61c7b | 4 | * it under the terms of the GNU General Public License as published by |
n0p | 0:badcd0d61c7b | 5 | * the Free Software Foundation; either version 3 of the License, or |
n0p | 0:badcd0d61c7b | 6 | * (at your option) any later version. |
n0p | 0:badcd0d61c7b | 7 | * |
n0p | 0:badcd0d61c7b | 8 | * This program is distributed in the hope that it will be useful, |
n0p | 0:badcd0d61c7b | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
n0p | 0:badcd0d61c7b | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
n0p | 0:badcd0d61c7b | 11 | * GNU General Public License for more details. |
n0p | 0:badcd0d61c7b | 12 | * |
n0p | 0:badcd0d61c7b | 13 | * You should have received a copy of the GNU General Public License |
n0p | 0:badcd0d61c7b | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
n0p | 0:badcd0d61c7b | 15 | * |
n0p | 0:badcd0d61c7b | 16 | * @file button.cpp |
n0p | 0:badcd0d61c7b | 17 | * @author Andre Moehl |
n0p | 0:badcd0d61c7b | 18 | * @date 01/2011 |
n0p | 0:badcd0d61c7b | 19 | * @brief Button Class definition |
n0p | 0:badcd0d61c7b | 20 | */ |
n0p | 0:badcd0d61c7b | 21 | |
n0p | 0:badcd0d61c7b | 22 | /*--- Includes ------------------------*/ |
n0p | 0:badcd0d61c7b | 23 | #include "button.h" |
n0p | 0:badcd0d61c7b | 24 | |
n0p | 0:badcd0d61c7b | 25 | /*--- Functions -----------------------*/ |
n0p | 0:badcd0d61c7b | 26 | //Contructor |
n0p | 0:badcd0d61c7b | 27 | Button::Button(PinName pin, const char *name): DigitalIn(pin,name) |
n0p | 0:badcd0d61c7b | 28 | { |
n0p | 0:badcd0d61c7b | 29 | _counter = 0; |
n0p | 0:badcd0d61c7b | 30 | _samples = 10; |
n0p | 0:badcd0d61c7b | 31 | set_debounce_us(1000); |
n0p | 0:badcd0d61c7b | 32 | } |
n0p | 0:badcd0d61c7b | 33 | |
n0p | 0:badcd0d61c7b | 34 | // sets Sample for debounce |
n0p | 0:badcd0d61c7b | 35 | void Button::set_samples(int i) |
n0p | 0:badcd0d61c7b | 36 | { |
n0p | 0:badcd0d61c7b | 37 | _samples = i; |
n0p | 0:badcd0d61c7b | 38 | } |
n0p | 0:badcd0d61c7b | 39 | |
n0p | 0:badcd0d61c7b | 40 | // set debounce time |
n0p | 0:badcd0d61c7b | 41 | void Button::set_debounce_us(int i) |
n0p | 0:badcd0d61c7b | 42 | { |
n0p | 0:badcd0d61c7b | 43 | _ticker.attach_us(this, &Button::_callback, i); |
n0p | 0:badcd0d61c7b | 44 | } |
n0p | 0:badcd0d61c7b | 45 | |
n0p | 0:badcd0d61c7b | 46 | // return the final state |
n0p | 0:badcd0d61c7b | 47 | int Button::read() |
n0p | 0:badcd0d61c7b | 48 | { |
n0p | 0:badcd0d61c7b | 49 | return _shadow; |
n0p | 0:badcd0d61c7b | 50 | } |
n0p | 0:badcd0d61c7b | 51 | |
n0p | 0:badcd0d61c7b | 52 | //overwrite fuction from derived "DigitalIn" |
n0p | 0:badcd0d61c7b | 53 | Button::operator int() |
n0p | 0:badcd0d61c7b | 54 | { |
n0p | 0:badcd0d61c7b | 55 | return read(); |
n0p | 0:badcd0d61c7b | 56 | } |
n0p | 0:badcd0d61c7b | 57 | |
n0p | 0:badcd0d61c7b | 58 | |
n0p | 0:badcd0d61c7b | 59 | // counts the oscillations of the button |
n0p | 0:badcd0d61c7b | 60 | void Button::_callback(void) |
n0p | 0:badcd0d61c7b | 61 | { |
n0p | 0:badcd0d61c7b | 62 | if (DigitalIn::read()) |
n0p | 0:badcd0d61c7b | 63 | { |
n0p | 0:badcd0d61c7b | 64 | if (_counter < _samples) _counter++; |
n0p | 0:badcd0d61c7b | 65 | if (_counter == _samples) _shadow = 1; |
n0p | 0:badcd0d61c7b | 66 | } |
n0p | 0:badcd0d61c7b | 67 | else { |
n0p | 0:badcd0d61c7b | 68 | if (_counter > 0) _counter--; |
n0p | 0:badcd0d61c7b | 69 | if (_counter == 0) _shadow = 0; |
n0p | 0:badcd0d61c7b | 70 | } |
n0p | 0:badcd0d61c7b | 71 | } |
n0p | 0:badcd0d61c7b | 72 | |
n0p | 0:badcd0d61c7b | 73 |