Rotary Encoder Module Arduino Compatible
ARD2-2240
$4.95
QTY | Price |
---|---|
1 | $4.95 |
Description
The Rotary Encoder Module is an incremental electro-mechanical device that converts the angular position of a shaft to digital code. It features a rotational displacement encoder which outputs a series of pulses whenever the switch is rotated. This module provides an indication of how much the knob has been rotated and the direction of rotation. You could also use it to control devices like digital potentiometers. This Rotary Encoder Module is today's electronic alternative to the potentiometer. It is used in a wide range of applications.
Test Code
int redPin = 2;
int yellowPin = 3;
int greenPin = 4;
int aPin = 6;
int bPin = 7;
int buttonPin = 5;
int state = 0;
int longPeriod = 5000; // Time at green or red
int shortPeriod = 700; // Time period when changing
int targetCount = shortPeriod;
int count = 0;
void setup() {
pinMode(aPin, INPUT);
pinMode(bPin, INPUT);
pinMode(buttonPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(yellowPin, OUTPUT);
pinMode(greenPin, OUTPUT);
}
void loop() {
count++;
if (digitalRead(buttonPin)) {
setLights(HIGH, HIGH, HIGH);
}
else {
int change = getEncoderTurn();
int newPeriod = longPeriod + (change * 1000);
if (newPeriod >= 1000 && newPeriod <= 10000) {
longPeriod = newPeriod;
}
if (count > targetCount) {
setState();
count = 0;
}
}
delay(1);
}
int getEncoderTurn () {
// Return -1, 0, or +1
static int oldA = LOW;
static int oldB = LOW;
int result = 0;
int newA = digitalRead(aPin);
int newB = digitalRead(bPin);
if (newA != oldA || newB != oldB) {
//Something has changed
if (oldA == LOW && newA == HIGH) {
result = - (oldB * 2 - 1);
}
}
oldA = newA;
oldB = newB;
return result;
}
int setState() {
if (state == 0) {
setLights(HIGH, LOW, LOW);
targetCount = longPeriod;
state = 1;
}
else if (state == 1) {
setLights(HIGH, HIGH, LOW);
targetCount = shortPeriod;
state = 2;
}
else if (state == 2) {
setLights(LOW, LOW, HIGH);
targetCount = longPeriod;
state = 3;
}
else if (state == 3) {
setLights(LOW, HIGH, LOW);
targetCount = shortPeriod;
state = 0;
}
}
void setLights(int red, int yellow, int green) {
digitalWrite(redPin, red);
digitalWrite(yellowPin, yellow);
digitalWrite(greenPin, green);
}
Features
- Converts the angular position or motion of a shaft or axle to an analog or digital code
- Perfect for stepper & servo motor control
- Applications include industrial controls, robotics, computer input devices, controlled stress rheometers, and rotating radar platforms
Specifications
Board Colour
Black
Material
PCB
Resources
You Might Also Like
All prices are in Australian Dollars and include GST. GST will be removed from your order if you are ordering from outside Australia.
Products may differ from pictured.
All trademarks and trade names are the properties of their respective owners. Wiltronics disclaims any proprietary interest in trademarks and trade names other than its own.