[아두이노#391] (로터리엔코더#5) 2004LCD에 아주 간단한 선택메뉴 구성해보기!(녹칸다/포로리야공대가자)
프로그래밍/로터리엔코더와 메뉴트리 2021. 12. 6. 22:56
(로터리엔코더#5) 2004LCD에 아주 간단한 선택메뉴 구성해보기!(녹칸다/포로리야공대가자)
녹칸다의 로터리엔코더(rotary encoder)와 타이머 인터럽트(timer interrupt)시리즈이다!
세탁기나 각종 전자제품에 많아 달려있는 로터리 엔코더를 아두이노에서 활용해보고자 하는 시리즈이다!
빙글빙글 돌려서 설정값을 바꾸거나 항목을 바꾸는 것이라고 생각하면 될 듯 하다!
가변저항과 유사하지만 가변저항은 돌리다보면 한계지점이 있고 로터리 엔코더는 무한히 회전할 수 있다!
그러다 보니 원수열 형태의 업/다운 카운트가 가능하다!
이번편에서는 2004LCD에 메뉴 선택을 로터리엔코더로 가능하도록 한다!
다만 방식에 있어서 아주 간단한 방식을 택하도록 한다!(간단하다는 것은 기능이 약하다는 것을 의미한다!)
아래와 같은 내용으로 스트리밍을 진행해보도록 한다!
(여기서 어렵다고 생각하는 포인트는 LCD화면의 항목이 항상 4개가 유지되어야 하므로 페이지 개념이 있어야한다는 것이다!)
(메뉴의 갯수가 6개면 1~4는 페이지1번, 5~6은 페이지 2번에 출력이 되어야 할 것이다!)
1.1차원배열 형태로 선택가능한 메뉴가 존재하고 로터리엔코더로 원하는 것을 선택하도록 해보자!(결과는 시리얼 모니터에)
2.LED를 4개 연결하고 (1)에서 만든 메뉴를 이용해서 개별적으로 점멸 가능하도록 하시오!
3.2차원배열 형태로 선택가능한 메뉴를 구성하고 로터리 엔코더로 원하는 것을 선택하도록 해보자!(이것도 결과는 시리얼모니터)
4.LED를 4개 연결하고 (3)에서 만든 메뉴를 이용해서 개별적으로 점멸 가능하도록 하시오!
(시간이 남으면 아무거나 더 해보기)
(실제로한거)
1.1차원형태로 구성된 메뉴가 있다! 로터리엔코더를 돌렸을때 해당되는 인덱스의 메뉴가 시리얼 모니터에 출력되도록 하시오!
2.2004LCD는 한화면이 4개의 line으로 구성이 되어있다! 메뉴가 7개일 경우 어떻게 하면 포커스를 이동시킬 수 있겠는가?
3.LED가 4개 연결되어있다! 1차원메뉴에는 각 LED를 켜거나 끄는 메뉴가 존재하고 해당 메뉴가 선택되었을때의 LED가 점멸되도록 하시오!
4.(3)예제에서 하위메뉴를 구성한다음 상위메뉴에 LED번호와 하위메뉴의 LED 점멸상태를 세트로해서 LED를 제어하시오!
5.(4)예제에서 전체 LED를 일괄적으로 제어하는 명령을 만들어보시오!
6.LED 4개를 제어하는 메뉴를 구성하되 함수를 호출해서 결과를 시리얼모니터에 출력해보시오!
7.타이머인터럽트를 추가해서 메뉴를 선택하면 어떤 특정한 함수가 타이머에 의해서 1초간격으로 작동되도록 하시오!
8.타이머인터럽트에 익명함수를 추가하되 메뉴에서 선택된 각각의 LED가 1초간격으로 점멸하도록 하시오! all leds를 선택하면 전체 led의 점멸 상태를 바꾸도록 하시오!
관련라이브러리(LiquidCrystal_I2C/1.1.2)
https://github.com/johnrickman/LiquidCrystal_I2C
관련라이브러리(mstimer2)
http://playground.arduino.cc/Main/MsTimer2