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@0:87aab40d5806, 2012-03-10 (annotated)
- Committer:
- tobyspark
- Date:
- Sat Mar 10 19:26:44 2012 +0000
- Revision:
- 0:87aab40d5806
- Child:
- 8:d46cc49f0f37
v15 - PCB a la toby; OLED a la toby
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tobyspark | 0:87aab40d5806 | 1 | // *SPARK D-FUSER |
tobyspark | 0:87aab40d5806 | 2 | // A project by *spark audio-visual |
tobyspark | 0:87aab40d5806 | 3 | // |
tobyspark | 0:87aab40d5806 | 4 | // spkRotaryEncoder extends mRotaryEncoder to return the change on pot state since last queried |
tobyspark | 0:87aab40d5806 | 5 | // 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 | 6 | // Importantly to driving such a menu, it will ignore any further rotation after the switch is pressed. |
tobyspark | 0:87aab40d5806 | 7 | |
tobyspark | 0:87aab40d5806 | 8 | #include "mRotaryEncoder.h" |
tobyspark | 0:87aab40d5806 | 9 | |
tobyspark | 0:87aab40d5806 | 10 | class SPKRotaryEncoder : public mRotaryEncoder { |
tobyspark | 0:87aab40d5806 | 11 | |
tobyspark | 0:87aab40d5806 | 12 | public: |
tobyspark | 0:87aab40d5806 | 13 | bool hasPressed(); |
tobyspark | 0:87aab40d5806 | 14 | int getChange(); |
tobyspark | 0:87aab40d5806 | 15 | 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 | 16 | SPKRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode=PullUp, int debounceTime_us=1000); |
tobyspark | 0:87aab40d5806 | 17 | |
tobyspark | 0:87aab40d5806 | 18 | private: |
tobyspark | 0:87aab40d5806 | 19 | void onPress(); |
tobyspark | 0:87aab40d5806 | 20 | bool m_hasPressed; |
tobyspark | 0:87aab40d5806 | 21 | int m_positionOld; |
tobyspark | 0:87aab40d5806 | 22 | int m_positionOnPress; |
tobyspark | 0:87aab40d5806 | 23 | |
tobyspark | 0:87aab40d5806 | 24 | }; |
tobyspark | 0:87aab40d5806 | 25 | |
tobyspark | 0:87aab40d5806 | 26 | SPKRotaryEncoder::SPKRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode, int debounceTime_us) : mRotaryEncoder(pinA, pinB, pinSW, pullMode, debounceTime_us) |
tobyspark | 0:87aab40d5806 | 27 | { |
tobyspark | 0:87aab40d5806 | 28 | attachSW(this,&SPKRotaryEncoder::onPress); |
tobyspark | 0:87aab40d5806 | 29 | } |
tobyspark | 0:87aab40d5806 | 30 | |
tobyspark | 0:87aab40d5806 | 31 | bool SPKRotaryEncoder::hasPressed() |
tobyspark | 0:87aab40d5806 | 32 | { |
tobyspark | 0:87aab40d5806 | 33 | bool hasPressed = m_hasPressed; |
tobyspark | 0:87aab40d5806 | 34 | m_hasPressed = false; |
tobyspark | 0:87aab40d5806 | 35 | |
tobyspark | 0:87aab40d5806 | 36 | return hasPressed; |
tobyspark | 0:87aab40d5806 | 37 | } |
tobyspark | 0:87aab40d5806 | 38 | |
tobyspark | 0:87aab40d5806 | 39 | int SPKRotaryEncoder::getChange() |
tobyspark | 0:87aab40d5806 | 40 | { |
tobyspark | 0:87aab40d5806 | 41 | int positionEnc = this->getPos(); |
tobyspark | 0:87aab40d5806 | 42 | |
tobyspark | 0:87aab40d5806 | 43 | int positionToUse = m_hasPressed ? m_positionOnPress : positionEnc; |
tobyspark | 0:87aab40d5806 | 44 | int change = positionToUse - m_positionOld; |
tobyspark | 0:87aab40d5806 | 45 | |
tobyspark | 0:87aab40d5806 | 46 | m_positionOld = positionEnc; |
tobyspark | 0:87aab40d5806 | 47 | |
tobyspark | 0:87aab40d5806 | 48 | return change; |
tobyspark | 0:87aab40d5806 | 49 | } |
tobyspark | 0:87aab40d5806 | 50 | |
tobyspark | 0:87aab40d5806 | 51 | int SPKRotaryEncoder::getPos() |
tobyspark | 0:87aab40d5806 | 52 | { |
tobyspark | 0:87aab40d5806 | 53 | int positionEnc = this->Get(); |
tobyspark | 0:87aab40d5806 | 54 | int positionsPerDetent = 2; |
tobyspark | 0:87aab40d5806 | 55 | |
tobyspark | 0:87aab40d5806 | 56 | return positionEnc / positionsPerDetent; |
tobyspark | 0:87aab40d5806 | 57 | } |
tobyspark | 0:87aab40d5806 | 58 | |
tobyspark | 0:87aab40d5806 | 59 | void SPKRotaryEncoder::onPress() |
tobyspark | 0:87aab40d5806 | 60 | { |
tobyspark | 0:87aab40d5806 | 61 | m_positionOnPress = this->getPos(); |
tobyspark | 0:87aab40d5806 | 62 | m_hasPressed = true; |
tobyspark | 0:87aab40d5806 | 63 | } |