Ceci est une ancienne révision du document !
➡ https://github.com/mathertel/RotaryEncoder
// ----- // InterruptRotator.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 style license. See http://www.mathertel.de/License.aspx // More information on: http://www.mathertel.de/Arduino // ----- // 18.01.2014 created by Matthias Hertel // ----- // This example checks the state of the rotary encoder in the loop() function. // The current position is printed on output when changed. // Hardware setup: // Attach a rotary encoder with output pins to A2 and A3. // The common contact should be attached to ground. #include <RotaryEncoder.h> // Setup a RoraryEncoder for pins A2 and A3: RotaryEncoder encoder(A2, A3); void setup() { Serial.begin(57600); Serial.println("SimplePollRotator example for the RotaryEncoder library."); // You may have to modify the next 2 lines if using other pins than A2 and A3 PCICR |= (1 << PCIE1); // This enables Pin Change Interrupt 1 that covers the Analog input pins or Port C. PCMSK1 |= (1 << PCINT10) | (1 << PCINT11); // This enables the interrupt for pin 2 and 3 of Port C. } // setup() // The Interrupt Service Routine for Pin Change Interrupt 1 // This routine will only be called on any signal change on A2 and A3: exactly where we need to check. ISR(PCINT1_vect) { encoder.tick(); // just call tick() to check the state. } // Read the current position of the encoder and print out when changed. void loop() { static int pos = 0; int newPos = encoder.getPosition(); if (pos != newPos) { Serial.print(newPos); Serial.println(); pos = newPos; // Just to show, that long lasting procedures don't break the rotary encoder: // When newPos is 66 the ouput will freeze, but the turned positions will be recognized even when not polled. // The interrupt still works. // The output is correct 6.6 seconds later. if (newPos == 66) delay(6600); } // if } // loop () // The End
➡ https://github.com/PaulStoffregen/Encoder
/* Encoder Library - TwoKnobs Example * http://www.pjrc.com/teensy/td_libs_Encoder.html * * This example code is in the public domain. */ #include <Encoder.h> // Change these pin numbers to the pins connected to your encoder. // Best Performance: both pins have interrupt capability // Good Performance: only the first pin has interrupt capability // Low Performance: neither pin has interrupt capability Encoder knobLeft(5, 6); Encoder knobRight(7, 8); // avoid using pins with LEDs attached void setup() { Serial.begin(9600); Serial.println("TwoKnobs Encoder Test:"); } long positionLeft = -999; long positionRight = -999; void loop() { long newLeft, newRight; newLeft = knobLeft.read(); newRight = knobRight.read(); if (newLeft != positionLeft || newRight != positionRight) { Serial.print("Left = "); Serial.print(newLeft); Serial.print(", Right = "); Serial.print(newRight); Serial.println(); positionLeft = newLeft; positionRight = newRight; } // if a character is sent from the serial monitor, // reset both back to zero. if (Serial.available()) { Serial.read(); Serial.println("Reset both knobs to zero"); knobLeft.write(0); knobRight.write(0); } }
/* Arduino Rotary Encoder Tutorial * * by Dejan Nedelkovski, www.HowToMechatronics.com * */ #define outputA 6 #define outputB 7 int counter = 0; int aState; int aLastState; void setup() { pinMode (outputA,INPUT); pinMode (outputB,INPUT); Serial.begin (9600); // Reads the initial state of the outputA aLastState = digitalRead(outputA); } void loop() { aState = digitalRead(outputA); // Reads the "current" state of the outputA // If the previous and the current state of the outputA are different, that means a Pulse has occured if (aState != aLastState){ // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise if (digitalRead(outputB) != aState) { counter ++; } else { counter --; } Serial.print("Position: "); Serial.println(counter); } aLastState = aState; // Updates the previous state of the outputA with the current state }