
Енкодерът за ротация е устройство, което позволява неограничено завъртане. В потребителската електроника намира приложение в аудио системи, компютърна периферия и др.
Има два изхода А и B, които могат да са в състояние 1 или 0. Това означава че по изхода на енкодера се различават общо 4 състояния.
Изходът на енкодера се разчита чрез т.нар. грей код.

Например ако А и В са преминали от 01 на 11, това означава че енкодерът е завъртян една позиция по часовниковата стрелка.
Пример
Ардуино брои завъртанията на енкодера и извежда информация в Serial Monitor. Средният пин се свързва към пин GND на Arduino, пин А към А0, а пин B към А1. Ако пин А и В се разменят, показанието ще намалява по часовниковата стрелка и ще се увеличава в противоположната посока.
/*
Описание:
* Получава информиция от енкодер за това дали е завъртян,
в каква посока и колко пъти
Свързване:
* Pin A -> A0
* GND -> GND
* Pin B -> A1
* Tihomir Trifonov (09-2011)
* email:tisho@inbox.com
* с подкрепата на Robotev.com
*/
#define ENC_A 14 // А0
#define ENC_B 15 // А1
#define ENC_PORT PINC
void setup()
{
pinMode(ENC_A, INPUT); //задава А0 като вход
digitalWrite(ENC_A, HIGH); //вдига PullUp
pinMode(ENC_B, INPUT); //задава А1 като вход
digitalWrite(ENC_B, HIGH); //вдига PullUp
Serial.begin (115200); //серийна комуникация
//със скорост 115200
}
void loop()
{
static uint8_t counter = 0; //брояч
int8_t tmpdata;
tmpdata = read_encoder();// прочита състоянието на енкодера
if( tmpdata ) {
Serial.print("Counter value: ");
Serial.println(counter, DEC); //извежда брояча
counter += tmpdata; // добавя -1,0 или 1
}
}
int8_t read_encoder()// връща -1, 0 или 1
{
// масив с възможни състояния
static int8_t enc_states[] = {0,-1,1,0,1,0,0,-1,-1,0,0,1,0,1,-1,0};
static uint8_t old_AB = 0;// съхранява предходното състояние
old_AB <<= 2;
old_AB |= ( ENC_PORT & 0x03 ); // прочита новото състояние на А и B
// връща -1,0 или 1 в зависимост от старото и новото им състояние
return ( enc_states[( old_AB & 0x0f )]);
}
|

Примерът е взет от: http://www.circuitsathome.com/mcu/reading-rotary-encoder-on-arduino