Tested your example with Interrupts (InterruptRotator.ino). There is no need the call encoder.tick() in the main loop if the interrupts would work.
Changed your
attachInterrupt(PIN_IN1, checkPosition, CHANGE); attachInterrupt(PIN_IN2, checkPosition, CHANGE);
to
attachInterrupt(digitalPinToInterrupt(PIN_IN1), checkPosition, CHANGE); attachInterrupt(digitalPinToInterrupt(PIN_IN2), checkPosition, CHANGE);
and deleted your tick in the main loop.
Tested your example with Interrupts (InterruptRotator.ino). There is no need the call encoder.tick() in the main loop if the interrupts would work.
Changed your
attachInterrupt(PIN_IN1, checkPosition, CHANGE); attachInterrupt(PIN_IN2, checkPosition, CHANGE);
to
attachInterrupt(digitalPinToInterrupt(PIN_IN1), checkPosition, CHANGE); attachInterrupt(digitalPinToInterrupt(PIN_IN2), checkPosition, CHANGE);
and deleted your tick in the main loop.Tested on a Arduino Nano V3.