[아두이노#388] (로터리엔코더#2) 타이머 인터럽트(MSTIMER2)를 이용해서 로터리엔코더(rotary encoder) 활용해보기!(녹칸다/포로리야공대가자)
프로그래밍/로터리엔코더와 메뉴트리 2021. 11. 30. 23:04
(로터리엔코더#2) 타이머 인터럽트(MSTIMER2)를 이용해서 로터리엔코더(rotary encoder) 활용해보기!
녹칸다의 로터리엔코더(rotary encoder)와 타이머 인터럽트(timer interrupt)시리즈이다!
세탁기나 각종 전자제품에 많아 달려있는 로터리 엔코더를 아두이노에서 활용해보고자 하는 시리즈이다!
빙글빙글 돌려서 설정값을 바꾸거나 항목을 바꾸는 것이라고 생각하면 될 듯 하다!
가변저항과 유사하지만 가변저항은 돌리다보면 한계지점이 있고 로터리 엔코더는 무한히 회전할 수 있다!
그러다 보니 원수열 형태의 업/다운 카운트가 가능하다!
이번편에서는 로터리엔코더의 회전방향을 감지하는 부분을 함수화하고 타이머 인터럽트를 이용해서 전체적으로 메인루프와 감지하는 부분을 분리해보도록 한다!
그렇게 하는 이유는 로터리 엔코더를 인식하는 부분이 메인루프에 있을 경우 메인 루프 내 시간이 걸리는 작업이 발생했을 경우 로터리 엔코더의 인식이 보장되지 않기 때문이다!
(아마도 녹칸다만 이런 생각을 하는것이라기 보다 보편적으로 이러한 전략을 사용하는 듯 하다!)
1편에서 구현한 예제에서 발생할 수 있는 문제점을 먼저 시각적으로 확인하고 타이머 인터럽트를 베이스로하는 기본코드를 구현해보도록 하자!
그리고 아래와 같은 예제를 다시 구현해보자!
1.아두이노에 LED가 4개 연결되어있을때 로터리 엔코더로 LED를 순차적으로 점멸시켜보자!
2.아두이노에 FND모듈(TM1637)을 연결하고 로터리 엔코더로 업/다운 카운트를 구현해보자!(버튼누르면 초기화)
3.아두이노에 1602LCD를 연결하고 로터리엔코더로 업/다운 카운트를 구현해보자!(버튼누르면 초기화)
4.아두이노에 부저를 연결하고 로터리엔코더로 부저의 비프음을 변화시켜보자!
5.아두이노에 온습도센서(DHT-11)과 FND모듈(TM1637)를 연결하고 측정한 온도값을 FND모듈에 출력한다! 이때 FND모듈을 1개더 연결하고 로터리 엔코더로 경고음을 발생시킬 온도의 임계값을 업/다운할 수 있도록하고 엔코더의 버튼을 눌렀을때 해당값이 입력이 되도록해보자! 온도가 임계값을 넘어서면 부저의 비프음이 발생하면 좋을 것 같다!
관련라이브러리(mstimer2)
http://playground.arduino.cc/Main/MsTimer2
관련라이브러리(TM1637/1.2.0)
https://github.com/avishorp/TM1637
관련라이브러리(LiquidCrystal_I2C/1.1.2)
https://github.com/johnrickman/LiquidCrystal_I2C