version 1.0
Dependencies: CMSIS_DSP_401 GPS MPU9150_DMP PID QuaternionMath Servo mbed
Fork of SolarOnFoils_MainModule_20150518 by
mRotaryEncoder.cpp@2:f6d058931b17, 2015-08-11 (annotated)
- Committer:
- Dannis_mbed
- Date:
- Tue Aug 11 08:38:55 2015 +0000
- Revision:
- 2:f6d058931b17
- Parent:
- 0:81b21910454e
Test version mainmodule
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Dannis_mbed | 0:81b21910454e | 1 | #include "mbed.h" |
Dannis_mbed | 0:81b21910454e | 2 | #include "mRotaryEncoder.h" |
Dannis_mbed | 0:81b21910454e | 3 | |
Dannis_mbed | 0:81b21910454e | 4 | |
Dannis_mbed | 0:81b21910454e | 5 | mRotaryEncoder::mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode, int debounceTime_us) { |
Dannis_mbed | 0:81b21910454e | 6 | m_pinA = new PinDetect(pinA); // interrrupts on pinA |
Dannis_mbed | 0:81b21910454e | 7 | m_pinB = new DigitalIn(pinB); // only digitalIn for pinB |
Dannis_mbed | 0:81b21910454e | 8 | |
Dannis_mbed | 0:81b21910454e | 9 | //set pins with internal PullUP-default |
Dannis_mbed | 0:81b21910454e | 10 | m_pinA->mode(pullMode); |
Dannis_mbed | 0:81b21910454e | 11 | m_pinB->mode(pullMode); |
Dannis_mbed | 0:81b21910454e | 12 | |
Dannis_mbed | 0:81b21910454e | 13 | // attach interrrupts on pinA |
Dannis_mbed | 0:81b21910454e | 14 | m_pinA->attach_asserted(this, &mRotaryEncoder::rise); |
Dannis_mbed | 0:81b21910454e | 15 | m_pinA->attach_deasserted(this, &mRotaryEncoder::fall); |
Dannis_mbed | 0:81b21910454e | 16 | |
Dannis_mbed | 0:81b21910454e | 17 | //start sampling pinA |
Dannis_mbed | 0:81b21910454e | 18 | m_pinA->setSampleFrequency(debounceTime_us); // Start timers an Defaults debounce time. |
Dannis_mbed | 0:81b21910454e | 19 | |
Dannis_mbed | 0:81b21910454e | 20 | // Switch on pinSW |
Dannis_mbed | 0:81b21910454e | 21 | m_pinSW = new PinDetect(pinSW); // interrupt on press switch |
Dannis_mbed | 0:81b21910454e | 22 | m_pinSW->mode(pullMode); |
Dannis_mbed | 0:81b21910454e | 23 | |
Dannis_mbed | 0:81b21910454e | 24 | m_pinSW->setSampleFrequency(debounceTime_us); // Start timers an Defaults debounce time. |
Dannis_mbed | 0:81b21910454e | 25 | |
Dannis_mbed | 0:81b21910454e | 26 | |
Dannis_mbed | 0:81b21910454e | 27 | m_position = 0; |
Dannis_mbed | 0:81b21910454e | 28 | |
Dannis_mbed | 0:81b21910454e | 29 | m_debounceTime_us = debounceTime_us; |
Dannis_mbed | 0:81b21910454e | 30 | } |
Dannis_mbed | 0:81b21910454e | 31 | |
Dannis_mbed | 0:81b21910454e | 32 | mRotaryEncoder::~mRotaryEncoder() { |
Dannis_mbed | 0:81b21910454e | 33 | delete m_pinA; |
Dannis_mbed | 0:81b21910454e | 34 | delete m_pinB; |
Dannis_mbed | 0:81b21910454e | 35 | delete m_pinSW; |
Dannis_mbed | 0:81b21910454e | 36 | } |
Dannis_mbed | 0:81b21910454e | 37 | |
Dannis_mbed | 0:81b21910454e | 38 | int mRotaryEncoder::Get(void) { |
Dannis_mbed | 0:81b21910454e | 39 | return m_position; |
Dannis_mbed | 0:81b21910454e | 40 | } |
Dannis_mbed | 0:81b21910454e | 41 | |
Dannis_mbed | 0:81b21910454e | 42 | |
Dannis_mbed | 0:81b21910454e | 43 | |
Dannis_mbed | 0:81b21910454e | 44 | void mRotaryEncoder::Set(int value) { |
Dannis_mbed | 0:81b21910454e | 45 | m_position = value; |
Dannis_mbed | 0:81b21910454e | 46 | } |
Dannis_mbed | 0:81b21910454e | 47 | |
Dannis_mbed | 0:81b21910454e | 48 | |
Dannis_mbed | 0:81b21910454e | 49 | void mRotaryEncoder::fall(void) { |
Dannis_mbed | 0:81b21910454e | 50 | // debouncing does PinDetect for us |
Dannis_mbed | 0:81b21910454e | 51 | //pinA still low? |
Dannis_mbed | 0:81b21910454e | 52 | if (*m_pinA == 0) { |
Dannis_mbed | 0:81b21910454e | 53 | if (*m_pinB == 1) { |
Dannis_mbed | 0:81b21910454e | 54 | m_position++; |
Dannis_mbed | 0:81b21910454e | 55 | rotCWIsr.call(); |
Dannis_mbed | 0:81b21910454e | 56 | } else { |
Dannis_mbed | 0:81b21910454e | 57 | m_position--; |
Dannis_mbed | 0:81b21910454e | 58 | rotCCWIsr.call(); |
Dannis_mbed | 0:81b21910454e | 59 | } |
Dannis_mbed | 0:81b21910454e | 60 | } |
Dannis_mbed | 0:81b21910454e | 61 | rotIsr.call(); // call the isr for rotation |
Dannis_mbed | 0:81b21910454e | 62 | } |
Dannis_mbed | 0:81b21910454e | 63 | |
Dannis_mbed | 0:81b21910454e | 64 | void mRotaryEncoder::rise(void) { |
Dannis_mbed | 0:81b21910454e | 65 | //PinDetect does debouncing |
Dannis_mbed | 0:81b21910454e | 66 | //pinA still high? |
Dannis_mbed | 0:81b21910454e | 67 | if (*m_pinA == 1) { |
Dannis_mbed | 0:81b21910454e | 68 | if (*m_pinB == 1) { |
Dannis_mbed | 0:81b21910454e | 69 | m_position--; |
Dannis_mbed | 0:81b21910454e | 70 | rotCCWIsr.call(); |
Dannis_mbed | 0:81b21910454e | 71 | } else { |
Dannis_mbed | 0:81b21910454e | 72 | m_position++; |
Dannis_mbed | 0:81b21910454e | 73 | rotCWIsr.call(); |
Dannis_mbed | 0:81b21910454e | 74 | } |
Dannis_mbed | 0:81b21910454e | 75 | } |
Dannis_mbed | 0:81b21910454e | 76 | rotIsr.call(); // call the isr for rotation |
Dannis_mbed | 0:81b21910454e | 77 | } |
Dannis_mbed | 0:81b21910454e | 78 |