MCP23S17 Bufferd

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

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 4:acd6e59f8544 1 /**
ryood 4:acd6e59f8544 2 * =============================================================================
ryood 4:acd6e59f8544 3 * Rotary Encoder class (Version 0.0.1)
ryood 4:acd6e59f8544 4 * =============================================================================
ryood 4:acd6e59f8544 5 * Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems)
ryood 4:acd6e59f8544 6 *
ryood 4:acd6e59f8544 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
ryood 4:acd6e59f8544 8 * of this software and associated documentation files (the "Software"), to deal
ryood 4:acd6e59f8544 9 * in the Software without restriction, including without limitation the rights
ryood 4:acd6e59f8544 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ryood 4:acd6e59f8544 11 * copies of the Software, and to permit persons to whom the Software is
ryood 4:acd6e59f8544 12 * furnished to do so, subject to the following conditions:
ryood 4:acd6e59f8544 13 *
ryood 4:acd6e59f8544 14 * The above copyright notice and this permission notice shall be included in
ryood 4:acd6e59f8544 15 * all copies or substantial portions of the Software.
ryood 4:acd6e59f8544 16 *
ryood 4:acd6e59f8544 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ryood 4:acd6e59f8544 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ryood 4:acd6e59f8544 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ryood 4:acd6e59f8544 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ryood 4:acd6e59f8544 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ryood 4:acd6e59f8544 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ryood 4:acd6e59f8544 23 * THE SOFTWARE.
ryood 4:acd6e59f8544 24 * =============================================================================
ryood 4:acd6e59f8544 25 */
ryood 4:acd6e59f8544 26
ryood 4:acd6e59f8544 27 /*
ryood 4:acd6e59f8544 28 * 2016.11.5 Customized for MCP23S17 Buffered Input by ryood
ryood 4:acd6e59f8544 29 */
ryood 4:acd6e59f8544 30 #include "ExioBufferedRotaryEncoder.h"
ryood 4:acd6e59f8544 31
ryood 4:acd6e59f8544 32 /**
ryood 4:acd6e59f8544 33 * Create rotary encoder.
ryood 4:acd6e59f8544 34 * @param buffer
ryood 4:acd6e59f8544 35 * @param pin1
ryood 4:acd6e59f8544 36 * @param pin2
ryood 4:acd6e59f8544 37 * @param min Minimum value.
ryood 4:acd6e59f8544 38 * @param max Maximum value.
ryood 4:acd6e59f8544 39 * @param val Default value.
ryood 4:acd6e59f8544 40 */
ryood 4:acd6e59f8544 41 ExioBufferedRotaryEncoder::ExioBufferedRotaryEncoder(
ryood 4:acd6e59f8544 42 ExioInBuffer* buffer, int pin1, int pin2,
ryood 4:acd6e59f8544 43 int min, int max, int val)
ryood 4:acd6e59f8544 44 : min(min), max(max), val(val)
ryood 4:acd6e59f8544 45 {
ryood 4:acd6e59f8544 46 in1 = new ExioBufferedIn(buffer, pin1);
ryood 4:acd6e59f8544 47 in2 = new ExioBufferedIn(buffer, pin2);
ryood 4:acd6e59f8544 48 in1->mode(PullUp);
ryood 4:acd6e59f8544 49 in2->mode(PullUp);
ryood 4:acd6e59f8544 50 //ticker.attach_us(this, &ExioMcp23s17RotaryEncoder::func_ticker, 500);
ryood 4:acd6e59f8544 51 }
ryood 4:acd6e59f8544 52
ryood 4:acd6e59f8544 53 /**
ryood 4:acd6e59f8544 54 * Dispose.
ryood 4:acd6e59f8544 55 */
ryood 4:acd6e59f8544 56 ExioBufferedRotaryEncoder::~ExioBufferedRotaryEncoder() {
ryood 4:acd6e59f8544 57 delete in1;
ryood 4:acd6e59f8544 58 delete in2;
ryood 4:acd6e59f8544 59 }
ryood 4:acd6e59f8544 60
ryood 4:acd6e59f8544 61 /**
ryood 4:acd6e59f8544 62 * Internal tick function.
ryood 4:acd6e59f8544 63 */
ryood 4:acd6e59f8544 64 void ExioBufferedRotaryEncoder::func_ticker() {
ryood 4:acd6e59f8544 65 //static uint8_t code;
ryood 4:acd6e59f8544 66
ryood 4:acd6e59f8544 67 code = (code << 2) + (((in1->read() << 1) | (in2->read() << 0)) & 3);
ryood 4:acd6e59f8544 68 code &= 15;
ryood 4:acd6e59f8544 69 switch (code) {
ryood 4:acd6e59f8544 70 case 0x7:
ryood 4:acd6e59f8544 71 if (min < val) {
ryood 4:acd6e59f8544 72 val--;
ryood 4:acd6e59f8544 73 } else {
ryood 4:acd6e59f8544 74 val = min;
ryood 4:acd6e59f8544 75 }
ryood 4:acd6e59f8544 76 break;
ryood 4:acd6e59f8544 77 case 0xd:
ryood 4:acd6e59f8544 78 if (val < max) {
ryood 4:acd6e59f8544 79 val++;
ryood 4:acd6e59f8544 80 } else {
ryood 4:acd6e59f8544 81 val = max;
ryood 4:acd6e59f8544 82 }
ryood 4:acd6e59f8544 83 break;
ryood 4:acd6e59f8544 84 }
ryood 4:acd6e59f8544 85 }