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:
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?

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