본문 바로가기
프로그래밍/임베디드

[Rotary Encoder] 로터리 엔코더 사용방법 및 예제

by JR2 2021. 2. 20.
#include <mega328p.h>

// Declare your global variables here

void main(void)
{

    int temp = 0x01;  
    int lastPin = 0; 
    int n;
    
    DDRD.6 = 0;
    DDRD.7 = 0;
    DDRB = 0xFF;

    while (1)               
    {     
        n = PIND.6;  // 하강 Edge를 구현하는 부분.  
        if(lastPin == 0 && n == 1)  // 하강 Edge
        {
            if(PIND.7)
            {
                temp = temp << 1;
                if(temp == 0x100) temp = 0x01;
            }                          
            else
            {  
                temp = temp >> 1;
                if(temp == 0x00) temp = 0x80;
            }
        }                 
        PORTB = temp;
        lastPin = n;  // 하강 Edge를 구현하는 부분.
      }
}

 

Rotary Encoder Pin Map

 

Chip은 Atmega328을 사용하였고, Cheri Soft사에서 지원해준 보드를 사용하였다.

 

아무것도 연결하지 않아도 PIND 5,6 으로 제어가 가능하다.

 

댓글