Rotary encoder library. Add: void setInterval(timestamp_t t) for Nucleo F401RE

Dependents:   BSM02

Fork of RotaryEncoder by Shinichiro Nakamura

Committer:
ryood
Date:
Sat Sep 22 23:45:16 2018 +0000
Revision:
6:cfc8f362bce6
Parent:
5:60c44df48016
Corresponds to Callback class

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);
ryood 5:60c44df48016 42 //ticker.attach_us(this, &RotaryEncoder::func_ticker, 500);
ryood 5:60c44df48016 43 setInterval(500);
shintamainjp 0:6537b3b709b6 44 }
shintamainjp 0:6537b3b709b6 45
shintamainjp 0:6537b3b709b6 46 /**
shintamainjp 0:6537b3b709b6 47 * Dispose.
shintamainjp 0:6537b3b709b6 48 */
shintamainjp 0:6537b3b709b6 49 RotaryEncoder::~RotaryEncoder() {
shintamainjp 0:6537b3b709b6 50 }
shintamainjp 0:6537b3b709b6 51
shintamainjp 0:6537b3b709b6 52 /**
shintamainjp 0:6537b3b709b6 53 * Internal tick function.
shintamainjp 0:6537b3b709b6 54 */
shintamainjp 0:6537b3b709b6 55 void RotaryEncoder::func_ticker() {
ryood 3:6736c3bf48c9 56 //static uint8_t code;
shintamainjp 0:6537b3b709b6 57
shintamainjp 0:6537b3b709b6 58 code = (code << 2) + (((pin1.read() << 1) | (pin2.read() << 0)) & 3);
shintamainjp 0:6537b3b709b6 59 code &= 15;
shintamainjp 1:8000eddbf4aa 60 switch (code) {
shintamainjp 0:6537b3b709b6 61 case 0x7:
shintamainjp 0:6537b3b709b6 62 if (min < val) {
shintamainjp 0:6537b3b709b6 63 val--;
shintamainjp 0:6537b3b709b6 64 } else {
shintamainjp 0:6537b3b709b6 65 val = min;
shintamainjp 0:6537b3b709b6 66 }
shintamainjp 0:6537b3b709b6 67 break;
shintamainjp 0:6537b3b709b6 68 case 0xd:
shintamainjp 0:6537b3b709b6 69 if (val < max) {
shintamainjp 0:6537b3b709b6 70 val++;
shintamainjp 0:6537b3b709b6 71 } else {
shintamainjp 0:6537b3b709b6 72 val = max;
shintamainjp 0:6537b3b709b6 73 }
shintamainjp 0:6537b3b709b6 74 break;
shintamainjp 0:6537b3b709b6 75 }
shintamainjp 0:6537b3b709b6 76 }