diff --git a/examples/dialtoserial/dialtoserial.ino b/examples/dialtoserial/dialtoserial.ino index 6e1fd8c..9c4ae7e 100644 --- a/examples/dialtoserial/dialtoserial.ino +++ b/examples/dialtoserial/dialtoserial.ino @@ -7,6 +7,8 @@ #define PIN_PULSE D5 #define FW_NAME "esp-waehlscheibe" #define FW_VERSION "1.0.0" +#define MINMAP 0 +#define MAXMAP 500 HomieNode dialNode("dial", "dialnode"); RotaryDialer dialer = RotaryDialer(PIN_READY, PIN_PULSE); @@ -14,7 +16,8 @@ RotaryDialer dialer = RotaryDialer(PIN_READY, PIN_PULSE); bool meterHandler(const HomieRange& range, const String& value) { Homie.getLogger() << "meter " << ": " << value << endl; int iValue = value.toInt(); - if ((iValue >= 0) && (iValue <=100)) + // if ((iValue >= 0) && (iValue <=9000)) + if ((iValue >= 0) && (iValue <=30000)) { setMeter(value.toInt()); dialNode.setProperty("meter").send(value); @@ -27,7 +30,7 @@ bool meterHandler(const HomieRange& range, const String& value) { bool numberHandler(const HomieRange& range, const String& value) { Homie.getLogger() << "number " << ": " << value << endl; int iValue = value.toInt(); - if ((iValue >= 0) && (iValue <=100)) + if ((iValue >= 0) && (iValue <=10)) { setNumber(value.toInt()); dialNode.setProperty("number").send(value); @@ -37,6 +40,19 @@ bool numberHandler(const HomieRange& range, const String& value) { } } +bool rawHandler(const HomieRange& range, const String& value) { + Homie.getLogger() << "raw " << ": " << value << endl; + int iValue = value.toInt(); + if ((iValue >= 0) && (iValue <=1024)) + { + setRaw(value.toInt()); + dialNode.setProperty("raw").send(value); + return true; + } else { + return false; + } +} + void setup() { Serial.begin(115200); dialer.setup(); @@ -45,6 +61,7 @@ void setup() { dialNode.advertise("dialed"); dialNode.advertise("meter").settable(meterHandler); dialNode.advertise("number").settable(numberHandler); + dialNode.advertise("raw").settable(rawHandler); Homie.setLoopFunction(loopHandler); Homie.setup(); ArduinoOTA.setHostname(Homie.getConfiguration().deviceId); @@ -66,11 +83,87 @@ void loop() { } } +void setRaw(int pos){ + analogWrite(D1,pos); +} + void setMeter(int pos){ - analogWrite(D1,map(pos,0,100,9,462)); + // analogWrite(D1,map(pos,0,100,MINMAP,MAXMAP)); + // Range: 0 - 9000 + // Output: 0 - 495 + if (pos<1000) { + analogWrite(D1,map(pos,0,1000,0,75)); + return; + } + if (pos<2000) { + analogWrite(D1,map(pos,1000,2000,75,125)); + return; + } + if (pos<3000) { + analogWrite(D1,map(pos,2000,3000,125,175)); + return; + } + if (pos<4000) { + analogWrite(D1,map(pos,3000,4000,175,225)); + return; + } + if (pos<5000) { + analogWrite(D1,map(pos,4000,5000,225,270)); + return; + } + if (pos<6000) { + analogWrite(D1,map(pos,5000,6000,270,330)); + return; + } + if (pos<7000) { + analogWrite(D1,map(pos,6000,7000,330,380)); + return; + } + if (pos<8000) { + analogWrite(D1,map(pos,7000,8000,380,427)); + return; + } + if (pos<9000) { + analogWrite(D1,map(pos,8000,9000,427,495)); + return; + } + analogWrite(D1,495); } void setNumber(int pos){ - analogWrite(D1,map(pos,0,9,9,462)); + // analogWrite(D1,map(pos,0,9,MINMAP,MAXMAP)); + switch (pos){ + case 0: + analogWrite(D1,0); + break; + case 1: + analogWrite(D1,75); + break; + case 2: + analogWrite(D1,125); + break; + case 3: + analogWrite(D1,175); + break; + case 4: + analogWrite(D1,225); + break; + case 5: + analogWrite(D1,270); + break; + case 6: + analogWrite(D1,330); + break; + case 7: + analogWrite(D1,380); + break; + case 8: + analogWrite(D1,427); + break; + case 9: + analogWrite(D1,495); + break; + } + }