MCP23S17 Bufferd

Committer:
ryood
Date:
Fri Nov 04 23:16:41 2016 +0000
Revision:
6:cc3b65d44e9e
Parent:
4:acd6e59f8544
Add: Test ExioBufferedPinDetect

Who changed what in which revision?

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