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

Committer:
tobyspark
Date:
Wed Jul 09 10:04:20 2014 +0000
Revision:
78:7517f0060611
Parent:
8:d46cc49f0f37
Commit + Publish to help mbed.org debug compiler issues I have been encountering.

Who changed what in which revision?

UserRevisionLine numberNew 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 }