Енкодерът за ротация е устройство, което позволява неограничено завъртане. В потребителската електроника намира приложение в аудио системи, компютърна периферия и др.
Има два изхода А и 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