2532

Dependencies:   QEI WS2812 PixelArray DFPlayerMini MODSERIAL PCA9685_ pca9685

Committer:
dimavb
Date:
Wed Jun 26 18:06:30 2019 +0000
Revision:
6:4b007c7f0b7a
Parent:
0:474fb16588bf
activation trigger

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dimavb 0:474fb16588bf 1 /*
dimavb 0:474fb16588bf 2 Copyright (c) 2010 Andy Kirkham
dimavb 0:474fb16588bf 3
dimavb 0:474fb16588bf 4 Permission is hereby granted, free of charge, to any person obtaining a copy
dimavb 0:474fb16588bf 5 of this software and associated documentation files (the "Software"), to deal
dimavb 0:474fb16588bf 6 in the Software without restriction, including without limitation the rights
dimavb 0:474fb16588bf 7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
dimavb 0:474fb16588bf 8 copies of the Software, and to permit persons to whom the Software is
dimavb 0:474fb16588bf 9 furnished to do so, subject to the following conditions:
dimavb 0:474fb16588bf 10
dimavb 0:474fb16588bf 11 The above copyright notice and this permission notice shall be included in
dimavb 0:474fb16588bf 12 all copies or substantial portions of the Software.
dimavb 0:474fb16588bf 13
dimavb 0:474fb16588bf 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
dimavb 0:474fb16588bf 15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
dimavb 0:474fb16588bf 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
dimavb 0:474fb16588bf 17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
dimavb 0:474fb16588bf 18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
dimavb 0:474fb16588bf 19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
dimavb 0:474fb16588bf 20 THE SOFTWARE.
dimavb 0:474fb16588bf 21 */
dimavb 0:474fb16588bf 22
dimavb 0:474fb16588bf 23 #ifndef DEBOUNCEIN_H
dimavb 0:474fb16588bf 24 #define DEBOUNCEIN_H
dimavb 0:474fb16588bf 25
dimavb 0:474fb16588bf 26 #include "mbed.h"
dimavb 0:474fb16588bf 27
dimavb 0:474fb16588bf 28 /** DebounceIn adds mechanical switch debouncing to DigitialIn.
dimavb 0:474fb16588bf 29 *
dimavb 0:474fb16588bf 30 * Example:
dimavb 0:474fb16588bf 31 * @code
dimavb 0:474fb16588bf 32 * #include "mbed.h"
dimavb 0:474fb16588bf 33 * #include "DebounceIn.h"
dimavb 0:474fb16588bf 34 *
dimavb 0:474fb16588bf 35 * DebounceIn d(p5);
dimavb 0:474fb16588bf 36 * DigitialOut led1(LED1);
dimavb 0:474fb16588bf 37 * DigitialOut led2(LED2);
dimavb 0:474fb16588bf 38 *
dimavb 0:474fb16588bf 39 * int main() {
dimavb 0:474fb16588bf 40 * while(1) {
dimavb 0:474fb16588bf 41 * led1 = d;
dimavb 0:474fb16588bf 42 * led2 = d.read();
dimavb 0:474fb16588bf 43 * }
dimavb 0:474fb16588bf 44 * }
dimavb 0:474fb16588bf 45 * @endcode
dimavb 0:474fb16588bf 46 *
dimavb 0:474fb16588bf 47 * @see set_debounce_us() To change the sampling frequency.
dimavb 0:474fb16588bf 48 * @see set_samples() To alter the number of samples.
dimavb 0:474fb16588bf 49 *
dimavb 0:474fb16588bf 50 * Users of this library may also be interested in PinDetect library:-
dimavb 0:474fb16588bf 51 * @see http://mbed.org/users/AjK/libraries/PinDetect/latest
dimavb 0:474fb16588bf 52 *
dimavb 0:474fb16588bf 53 * This example shows one input displayed by two outputs. The input
dimavb 0:474fb16588bf 54 * is debounced by the default 10ms.
dimavb 0:474fb16588bf 55 */
dimavb 0:474fb16588bf 56
dimavb 0:474fb16588bf 57 class DebounceIn : public DigitalIn {
dimavb 0:474fb16588bf 58 public:
dimavb 0:474fb16588bf 59
dimavb 0:474fb16588bf 60 /** set_debounce_us
dimavb 0:474fb16588bf 61 *
dimavb 0:474fb16588bf 62 * Sets the debounce sample period time in microseconds, default is 1000 (1ms)
dimavb 0:474fb16588bf 63 *
dimavb 0:474fb16588bf 64 * @param int i The debounce sample period time to set.
dimavb 0:474fb16588bf 65 */
dimavb 0:474fb16588bf 66 void set_debounce_us(int i)
dimavb 0:474fb16588bf 67 {
dimavb 0:474fb16588bf 68 _ticker.attach_us(this, &DebounceIn::_callback, i);
dimavb 0:474fb16588bf 69 //ticker.attach(callback(this, &Sonar::background_read), 0.01f)
dimavb 0:474fb16588bf 70 }
dimavb 0:474fb16588bf 71
dimavb 0:474fb16588bf 72 /** set_samples
dimavb 0:474fb16588bf 73 *
dimavb 0:474fb16588bf 74 * Defines the number of samples before switching the shadow
dimavb 0:474fb16588bf 75 * definition of the pin.
dimavb 0:474fb16588bf 76 *
dimavb 0:474fb16588bf 77 * @param int i The number of samples.
dimavb 0:474fb16588bf 78 */
dimavb 0:474fb16588bf 79 void set_samples(int i) { _samples = i; }
dimavb 0:474fb16588bf 80
dimavb 0:474fb16588bf 81 /** read
dimavb 0:474fb16588bf 82 *
dimavb 0:474fb16588bf 83 * Read the value of the debounced pin.
dimavb 0:474fb16588bf 84 */
dimavb 0:474fb16588bf 85 int read(void) { return _shadow; }
dimavb 0:474fb16588bf 86 int trig(void) { _trig2 = _trig; _trig = 0; return _trig2; }
dimavb 0:474fb16588bf 87 int ntrig(void) { _ntrig2 = _ntrig; _ntrig = 0; return _ntrig2; }
dimavb 0:474fb16588bf 88
dimavb 0:474fb16588bf 89 #ifdef MBED_OPERATORS
dimavb 0:474fb16588bf 90 /** operator int()
dimavb 0:474fb16588bf 91 *
dimavb 0:474fb16588bf 92 * Read the value of the debounced pin.
dimavb 0:474fb16588bf 93 */
dimavb 0:474fb16588bf 94 operator int() { return read(); }
dimavb 0:474fb16588bf 95 #endif
dimavb 0:474fb16588bf 96
dimavb 0:474fb16588bf 97 /** Constructor
dimavb 0:474fb16588bf 98 *
dimavb 0:474fb16588bf 99 * @param PinName pin The pin to assign as an input.
dimavb 0:474fb16588bf 100 */
dimavb 0:474fb16588bf 101 DebounceIn(PinName pin) : DigitalIn(pin,PullUp) { _counter = 0; _samples = 5; set_debounce_us(8100); };
dimavb 0:474fb16588bf 102
dimavb 0:474fb16588bf 103 protected:
dimavb 0:474fb16588bf 104 void _callback(void) {
dimavb 0:474fb16588bf 105 if (DigitalIn::read()) {
dimavb 0:474fb16588bf 106 if (_counter < _samples) _counter++;
dimavb 0:474fb16588bf 107 if (_counter == _samples)
dimavb 0:474fb16588bf 108 {
dimavb 0:474fb16588bf 109 _ntrig = 0; // comment if you don`t want to miss signal
dimavb 0:474fb16588bf 110 _nlock = 0;
dimavb 0:474fb16588bf 111 _shadow = 1;
dimavb 0:474fb16588bf 112 if (!_lock) {_trig = 1; _lock = 1;}
dimavb 0:474fb16588bf 113 }
dimavb 0:474fb16588bf 114 }
dimavb 0:474fb16588bf 115 else {
dimavb 0:474fb16588bf 116 if (_counter > 0) _counter--;
dimavb 0:474fb16588bf 117 if (_counter == 0)
dimavb 0:474fb16588bf 118 {
dimavb 0:474fb16588bf 119 _shadow = 0;
dimavb 0:474fb16588bf 120 _trig = 0; // comment if you don`t want to miss signal
dimavb 0:474fb16588bf 121 _lock = 0;
dimavb 0:474fb16588bf 122 if (!_nlock) {_ntrig = 1; _nlock = 1;}
dimavb 0:474fb16588bf 123 }
dimavb 0:474fb16588bf 124 }
dimavb 0:474fb16588bf 125 }
dimavb 0:474fb16588bf 126
dimavb 0:474fb16588bf 127 Ticker _ticker;
dimavb 0:474fb16588bf 128 int _lock;
dimavb 0:474fb16588bf 129 int _nlock;
dimavb 0:474fb16588bf 130
dimavb 0:474fb16588bf 131 int _ntrig;
dimavb 0:474fb16588bf 132 int _ntrig2;
dimavb 0:474fb16588bf 133
dimavb 0:474fb16588bf 134 int _trig;
dimavb 0:474fb16588bf 135 int _trig2;
dimavb 0:474fb16588bf 136
dimavb 0:474fb16588bf 137 int _shadow;
dimavb 0:474fb16588bf 138 int _counter;
dimavb 0:474fb16588bf 139 int _samples;
dimavb 0:474fb16588bf 140 };
dimavb 0:474fb16588bf 141
dimavb 0:474fb16588bf 142 #endif
dimavb 0:474fb16588bf 143