diff --git a/examples/LikeOneButton/LikeOneButton.ino b/examples/LikeOneButton/LikeOneButton.ino
new file mode 100644
index 0000000..9a1ef99
--- /dev/null
+++ b/examples/LikeOneButton/LikeOneButton.ino
@@ -0,0 +1,68 @@
+// -----
+// SimplePollRotator.ino - Example for the RotaryEncoder library.
+// This class is implemented for use with the Arduino environment.
+//
+// Copyright (c) by Matthias Hertel, http://www.mathertel.de
+// This work is licensed under a BSD 3-Clause License. See http://www.mathertel.de/License.aspx
+// More information on: http://www.mathertel.de/Arduino
+// -----
+// 18.01.2014 created by Matthias Hertel
+// 04.02.2021 conditions and settings added for ESP8266
+// -----
+
+// This example checks the state of the rotary encoder in the loop() function.
+// The current position and direction is printed on output when changed.
+
+// Hardware setup:
+// Attach a rotary encoder with output pins to
+// * A2 and A3 on Arduino UNO.
+// * D5 and D6 on ESP8266 board (e.g. NodeMCU).
+// Swap the pins when direction is detected wrong.
+// The common contact should be attached to ground.
+
+#include <Arduino.h>
+#include <RotaryEncoder.h>
+
+#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO_EVERY)
+// Example for Arduino UNO with input signals on pin 2 and 3
+#define PIN_IN1 A2
+#define PIN_IN2 A3
+
+#elif defined(ESP8266)
+// Example for ESP8266 NodeMCU with input signals on pin D5 and D6
+#define PIN_IN1 D5
+#define PIN_IN2 D6
+
+#endif
+
+// Setup a RotaryEncoder with 4 steps per latch for the 2 signal input pins:
+// RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::FOUR3);
+
+// Setup a RotaryEncoder with 2 steps per latch for the 2 signal input pins:
+RotaryEncoder encoder(PIN_IN1, PIN_IN2, RotaryEncoder::LatchMode::TWO03);
+
+void setup()
+{
+  Serial.begin(115200);
+  while (! Serial);
+  Serial.println("SimplePollRotator example for the RotaryEncoder library.");
+
+  encoder.attachTurnLeft([]() {
+     Serial.println("Encoder turn left");
+  });
+  encoder.attachTurnRight([]() {
+     Serial.println("Encoder turn right"); 
+   });
+} // setup()
+
+
+// Read the current position of the encoder and print out when changed.
+void loop()
+{
+
+  encoder.tick();
+
+} // loop ()
+
+// The End
+
diff --git a/src/RotaryEncoder.cpp b/src/RotaryEncoder.cpp
index 4985730..f689573 100644
--- a/src/RotaryEncoder.cpp
+++ b/src/RotaryEncoder.cpp
@@ -60,6 +60,36 @@ RotaryEncoder::RotaryEncoder(int pin1, int pin2, LatchMode mode)
   _positionExtPrev = 0;
 } // RotaryEncoder()
 
+// save function for rotate event
+void RotaryEncoder::attachTurnLeft(callbackFunction newFunction)
+{
+  _turnLeft = newFunction;
+} // attachClick
+
+
+// save function for rotate event
+void RotaryEncoder::attachTurnRight(callbackFunction newFunction)
+{
+  _turnRight = newFunction;
+} // attachClick
+
+
+// save function for parameterized rotate_left event
+void RotaryEncoder::attachTurnLeft(parameterizedCallbackFunction newFunction, void *parameter)
+{
+  _param_f_turnLeft = newFunction;
+  _turnLeftFuncParam = parameter;
+} // attachClick
+
+
+// save function for parameterized rotate_right event
+void RotaryEncoder::attachTurnRight(parameterizedCallbackFunction newFunction, void *parameter)
+{
+  _param_f_turnRight = newFunction;
+  _turnRightFuncParam = parameter;
+} // attachClick
+
+
 
 long RotaryEncoder::getPosition()
 {
@@ -146,6 +176,22 @@ void RotaryEncoder::tick(void)
       }
       break;
     } // switch
+    
+    switch( getDirection() ) {
+
+        case Direction::NOROTATION: 
+          break;
+
+        case Direction::CLOCKWISE:
+          if (_turnRight) _turnRight();
+          if (_param_f_turnRight) _param_f_turnRight(_turnRightFuncParam); 
+          break;
+
+        case Direction::COUNTERCLOCKWISE:
+          if (_turnLeft) _turnLeft();
+          if (_param_f_turnLeft) _param_f_turnLeft(_turnLeftFuncParam); 
+          break;    
+    }
   } // if
 } // tick()
 
diff --git a/src/RotaryEncoder.h b/src/RotaryEncoder.h
index 862f19f..cfe32a1 100644
--- a/src/RotaryEncoder.h
+++ b/src/RotaryEncoder.h
@@ -20,6 +20,11 @@
 
 #include "Arduino.h"
 
+extern "C" {
+typedef void (*callbackFunction)(void);
+typedef void (*parameterizedCallbackFunction)(void *);
+}
+
 class RotaryEncoder
 {
 public:
@@ -41,6 +46,14 @@ class RotaryEncoder
   // retrieve the current position
   long getPosition();
 
+  void attachTurnLeft(callbackFunction newFunction);
+
+  void attachTurnLeft(parameterizedCallbackFunction newFunction, void *parameter);
+
+  void attachTurnRight(callbackFunction newFunction);
+
+  void attachTurnRight(parameterizedCallbackFunction newFunction, void *parameter);
+
   // simple retrieve of the direction the knob was rotated last time. 0 = No rotation, 1 = Clockwise, -1 = Counter Clockwise
   Direction getDirection();
 
@@ -69,6 +82,14 @@ class RotaryEncoder
 
   unsigned long _positionExtTime;     // The time the last position change was detected.
   unsigned long _positionExtTimePrev; // The time the previous position change was detected.
+
+  callbackFunction _turnRight = NULL;
+  parameterizedCallbackFunction _param_f_turnRight = NULL;
+  void *_turnRightFuncParam = NULL;
+
+  callbackFunction _turnLeft = NULL;
+  parameterizedCallbackFunction _param_f_turnLeft = NULL;
+  void *_turnLeftFuncParam = NULL;
 };
 
 #endif