Rotary encoder library.

Dependents:   RotaryEncoder_TestProgram ST7735_Pong accuBlast_display

Committer:
shintamainjp
Date:
Sun Dec 19 05:11:09 2010 +0000
Revision:
1:8000eddbf4aa
Parent:
0:6537b3b709b6

        

Who changed what in which revision?

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