#include<Versatile_RotaryEncoder.h>// SET READING PINS ACCORDINGLY TO YOUR ENCODER TO BOARD CONNECTIONS// Set here your encoder reading pins (Ex.: EC11 with breakout board)#defineclkD5 // esp8266 gpio 14 ->D5 -- EC11-B如果旋转方向相反,与EC11-A对调接线#definedtD6 // esp8266 gpio 12 ->D6 -- EC11-A#defineswD7 // esp8266 gpio 13 ->D7 --EC11-M 编码器按压键// Functions prototyping to be handled on each Encoder EventvoidhandleRotate(int8_t rotation);voidhandlePressRotate(int8_t rotation);voidhandleHeldRotate(int8_t rotation);voidhandlePress();voidhandleDoublePress();voidhandlePressRelease();voidhandleLongPress();voidhandleLongPressRelease();voidhandlePressRotateRelease();voidhandleHeldRotateRelease();// Create a global pointer for the encoder object
Versatile_RotaryEncoder *versatile_encoder;voidsetup(){Serial.begin(9600);versatile_encoder = new Versatile_RotaryEncoder(clk, dt, sw);// Load to the encoder all nedded handle functions here (up to 9 functions)versatile_encoder->setHandleRotate(handleRotate);versatile_encoder->setHandlePressRotate(handlePressRotate);versatile_encoder->setHandleHeldRotate(handleHeldRotate);versatile_encoder->setHandlePress(handlePress);versatile_encoder->setHandleDoublePress(handleDoublePress);//versatile_encoder->setHandleDoublePress(nullptr); // Disables Double Pressversatile_encoder->setHandlePressRelease(handlePressRelease);versatile_encoder->setHandleLongPress(handleLongPress);versatile_encoder->setHandleLongPressRelease(handleLongPressRelease);versatile_encoder->setHandlePressRotateRelease(handlePressRotateRelease);versatile_encoder->setHandleHeldRotateRelease(handleHeldRotateRelease);Serial.println("Ready!");// set your own defualt values (optional)// versatile_encoder->setInvertedSwitch(true); // inverts the switch behaviour from HIGH to LOW to LOW to HIGH// versatile_encoder->setReadIntervalDuration(1); // set 2ms as long press duration (default is 1ms)// versatile_encoder->setShortPressDuration(35); // set 35ms as short press duration (default is 50ms)// versatile_encoder->setLongPressDuration(550); // set 550ms as long press duration (default is 1000ms)// versatile_encoder->setDoublePressDuration(350); // set 350ms as double press duration (default is 250ms)}voidloop(){// Do the encoder reading and processingif(versatile_encoder->ReadEncoder()){// Do something here whenever an encoder action is read}}// Implement your functions here accordingly to your needsvoidhandleRotate(int8_t rotation){Serial.print("#1 Rotated: ");if(rotation >0)Serial.println("Right");elseSerial.println("Left");}voidhandlePressRotate(int8_t rotation){Serial.print("#2 Pressed and rotated: ");if(rotation >0)Serial.println("Right");elseSerial.println("Left");}voidhandleHeldRotate(int8_t rotation){Serial.print("#3 Held and rotated: ");if(rotation >0)Serial.println("Right");elseSerial.println("Left");}voidhandlePress(){Serial.println("#4.1 Pressed");}voidhandleDoublePress(){Serial.println("#4.2 Double Pressed");}voidhandlePressRelease(){Serial.println("#5 Press released");}voidhandleLongPress(){Serial.println("#6 Long pressed");}voidhandleLongPressRelease(){Serial.println("#7 Long press released");}voidhandlePressRotateRelease(){Serial.println("#8 Press rotate released");}voidhandleHeldRotateRelease(){Serial.println("#9 Held rotate released");}