The codebase to run the *spark d-fuser controller www.sparkav.co.uk/dvimixer
Dependencies: SPK-TVOne DMX DmxArtNet NetServicesMin OSC PinDetect mRotaryEncoder iniparser mbed spk_oled_ssd1305 filter
spk_mRotaryEncoder.h@8:d46cc49f0f37, 2012-08-02 (annotated)
- Committer:
- tobyspark
- Date:
- Thu Aug 02 13:30:39 2012 +0000
- Revision:
- 8:d46cc49f0f37
- Parent:
- 0:87aab40d5806
MIT License as per MBED guideline
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tobyspark | 0:87aab40d5806 | 1 | // *SPARK D-FUSER |
tobyspark | 8:d46cc49f0f37 | 2 | // A project by Toby Harris |
tobyspark | 8:d46cc49f0f37 | 3 | // Copyright *spark audio-visual 2012 |
tobyspark | 0:87aab40d5806 | 4 | // |
tobyspark | 0:87aab40d5806 | 5 | // spkRotaryEncoder extends mRotaryEncoder to return the change on pot state since last queried |
tobyspark | 0:87aab40d5806 | 6 | // This allows the encoder to be polled when the host program is ready, and return info suitable for driving a TVOne style menu |
tobyspark | 0:87aab40d5806 | 7 | // Importantly to driving such a menu, it will ignore any further rotation after the switch is pressed. |
tobyspark | 0:87aab40d5806 | 8 | |
tobyspark | 0:87aab40d5806 | 9 | #include "mRotaryEncoder.h" |
tobyspark | 0:87aab40d5806 | 10 | |
tobyspark | 0:87aab40d5806 | 11 | class SPKRotaryEncoder : public mRotaryEncoder { |
tobyspark | 0:87aab40d5806 | 12 | |
tobyspark | 0:87aab40d5806 | 13 | public: |
tobyspark | 0:87aab40d5806 | 14 | bool hasPressed(); |
tobyspark | 0:87aab40d5806 | 15 | int getChange(); |
tobyspark | 0:87aab40d5806 | 16 | int getPos(); // This would be a Get() override, but its not virtual. We use this instead to correct for positions-per-detent |
tobyspark | 0:87aab40d5806 | 17 | SPKRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000); |
tobyspark | 0:87aab40d5806 | 18 | |
tobyspark | 0:87aab40d5806 | 19 | private: |
tobyspark | 0:87aab40d5806 | 20 | void onPress(); |
tobyspark | 0:87aab40d5806 | 21 | bool m_hasPressed; |
tobyspark | 0:87aab40d5806 | 22 | int m_positionOld; |
tobyspark | 0:87aab40d5806 | 23 | int m_positionOnPress; |
tobyspark | 0:87aab40d5806 | 24 | |
tobyspark | 0:87aab40d5806 | 25 | }; |
tobyspark | 0:87aab40d5806 | 26 | |
tobyspark | 0:87aab40d5806 | 27 | SPKRotaryEncoder::SPKRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode, int debounceTime_us) : mRotaryEncoder(pinA, pinB, pinSW, pullMode, debounceTime_us) |
tobyspark | 0:87aab40d5806 | 28 | { |
tobyspark | 0:87aab40d5806 | 29 | attachSW(this,&SPKRotaryEncoder::onPress); |
tobyspark | 0:87aab40d5806 | 30 | } |
tobyspark | 0:87aab40d5806 | 31 | |
tobyspark | 0:87aab40d5806 | 32 | bool SPKRotaryEncoder::hasPressed() |
tobyspark | 0:87aab40d5806 | 33 | { |
tobyspark | 0:87aab40d5806 | 34 | bool hasPressed = m_hasPressed; |
tobyspark | 0:87aab40d5806 | 35 | m_hasPressed = false; |
tobyspark | 0:87aab40d5806 | 36 | |
tobyspark | 0:87aab40d5806 | 37 | return hasPressed; |
tobyspark | 0:87aab40d5806 | 38 | } |
tobyspark | 0:87aab40d5806 | 39 | |
tobyspark | 0:87aab40d5806 | 40 | int SPKRotaryEncoder::getChange() |
tobyspark | 0:87aab40d5806 | 41 | { |
tobyspark | 0:87aab40d5806 | 42 | int positionEnc = this->getPos(); |
tobyspark | 0:87aab40d5806 | 43 | |
tobyspark | 0:87aab40d5806 | 44 | int positionToUse = m_hasPressed ? m_positionOnPress : positionEnc; |
tobyspark | 0:87aab40d5806 | 45 | int change = positionToUse - m_positionOld; |
tobyspark | 0:87aab40d5806 | 46 | |
tobyspark | 0:87aab40d5806 | 47 | m_positionOld = positionEnc; |
tobyspark | 0:87aab40d5806 | 48 | |
tobyspark | 0:87aab40d5806 | 49 | return change; |
tobyspark | 0:87aab40d5806 | 50 | } |
tobyspark | 0:87aab40d5806 | 51 | |
tobyspark | 0:87aab40d5806 | 52 | int SPKRotaryEncoder::getPos() |
tobyspark | 0:87aab40d5806 | 53 | { |
tobyspark | 0:87aab40d5806 | 54 | int positionEnc = this->Get(); |
tobyspark | 0:87aab40d5806 | 55 | int positionsPerDetent = 2; |
tobyspark | 0:87aab40d5806 | 56 | |
tobyspark | 0:87aab40d5806 | 57 | return positionEnc / positionsPerDetent; |
tobyspark | 0:87aab40d5806 | 58 | } |
tobyspark | 0:87aab40d5806 | 59 | |
tobyspark | 0:87aab40d5806 | 60 | void SPKRotaryEncoder::onPress() |
tobyspark | 0:87aab40d5806 | 61 | { |
tobyspark | 0:87aab40d5806 | 62 | m_positionOnPress = this->getPos(); |
tobyspark | 0:87aab40d5806 | 63 | m_hasPressed = true; |
tobyspark | 0:87aab40d5806 | 64 | } |