[아두이노#394] (로터리엔코더#8/끝) 선택된 함수노드의 기능을 MSTIMER2에 전달해서 반복작업 해보기!(녹칸다/포로리야공대가자)
(로터리엔코더#8/끝) 선택된 함수노드의 기능을 MSTIMER2에 전달해서 반복작업 해보기!
녹칸다의 로터리엔코더(rotary encoder)와 타이머 인터럽트(timer interrupt)시리즈이다!
세탁기나 각종 전자제품에 많아 달려있는 로터리 엔코더를 아두이노에서 활용해보고자 하는 시리즈이다!
빙글빙글 돌려서 설정값을 바꾸거나 항목을 바꾸는 것이라고 생각하면 될 듯 하다!
가변저항과 유사하지만 가변저항은 돌리다보면 한계지점이 있고 로터리 엔코더는 무한히 회전할 수 있다!
그러다 보니 원수열 형태의 업/다운 카운트가 가능하다!
이번편은 로터리엔코더 시리즈의 마지막편이다!
(#7)예제에서 구현한 함수노드의 기능을 타이머에게 넘겨주는 것을 목표로 한다!
녹칸다가 2004lcd에서 원하는 메뉴를 선택했을때 함수가 호출되면 어떤 기능을 한다는 것은 이해했을 것이다!
그러나 그 함수가 반복해야 한다면 어떻게 해야 하겠는가?
로터리 엔코더시리즈 중반부에 MSTIMER2가 잠깐 등장했었다!
MSTIMER2는 일정한 시간간격와 반복할 함수를 매개변수로 받게 되는데 유저가 로터리 엔코더로 선택한 메뉴가 가지고 있는 함수의 주소를 MSTIMER2에게 넘겨주고 타이머를 실행시키게 되면 해당 함수가 반복될 수 있도록 구성할 수 있다!
함수에게 함수를 인자로 넘겨주는 것이다!(콜백함수)
아래와 같은 예제를 만들어 보자!
(2004LCD와 로터리엔코더는 기본장착임)
1.선택한 메뉴에 가상으로 지정된 메시지를 일정한 간격으로 시리얼모니터에 출력하시오!
2.LED를 1개 연결한다음 시간을 초단위로 로터리엔코더를 돌려서 입력을 받는다! LED가 켜지게 되고 지정된 시간이 경과한후 자동으로 LED가 꺼지도록 구성하시오!
3.LED를 1개 연결한다음 꺼짐/1초마다 점멸/3초마다 점멸/5초마다 점멸이 되도록 메뉴를 구성하시오!
4.(1)예제에서 1초켜짐 2초꺼짐, 2초켜짐 3초꺼짐과 같이 비대칭 형태의 예제를 구성하시오!
5.(2)예제에 릴레이와 DC모터를 연결하고 일정시간 작동시키는 메뉴를 구성해보시오!
(시간이 남으면 아무거나 더 해보기)
관련라이브러리(LiquidCrystal_I2C/1.1.2)
https://github.com/johnrickman/LiquidCrystal_I2C
관련라이브러리(mstimer2)
http://playground.arduino.cc/Main/MsTimer2