아두이노 - 로터리 엔코더 LED | Arduino - Rotary Encoder LED
이 튜토리얼에서는 로터리 인코더의 출력값에 따라 LED의 밝기를 제어하기 위해 아두이노를 프로그래밍하는 방법을 배울 것입니다.
준비물
1 | × | Arduino Uno | Amazon | |
1 | × | USB 2.0 cable type A/B | 쿠팡 | Amazon | |
1 | × | Rotary Encoder | 쿠팡 | Amazon | |
1 | × | LED | Amazon | |
1 | × | 220 ohm resistor | Amazon | |
1 | × | Breadboard | 쿠팡 | Amazon | |
1 | × | Jumper Wires | Amazon | |
1 | × | (Optional) 9V Power Adapter for Arduino | Amazon | |
1 | × | (Recommended) Screw Terminal Block Shield for Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Breadboard Shield For Arduino Uno | 쿠팡 | Amazon | |
1 | × | (Recommended) Enclosure For Arduino Uno | Amazon |
공개: 이 섹션에서 제공된 링크 중 일부는 제휴 링크입니다. 이 링크를 통해 구매한 경우 추가 비용없이 수수료를 받을 수 있습니다. 지원해 주셔서 감사합니다.
LED 및 로터리 엔코더에 대하여
LED와 로터리 엔코더(핀아웃, 작동 원리, 프로그래밍 방법 등)에 대해 잘 모른다면, 다음 튜토리얼에서 배워보세요:
선연결
이 이미지는 Fritzing을 사용하여 만들어졌습니다. 이미지를 확대하려면 클릭하세요.
아두이노 코드
/*
* 이 Arduino 코드는 newbiely.kr 에서 개발되었습니다
* 이 Arduino 코드는 어떠한 제한 없이 공개 사용을 위해 제공됩니다.
* 상세한 지침 및 연결도에 대해서는 다음을 방문하세요:
* https://newbiely.kr/tutorials/arduino/arduino-rotary-encoder-led
*/
#include <Servo.h>
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
#define LED_PIN 9
#define DIRECTION_CW 0 // 시계 방향
#define DIRECTION_CCW 1 // 반시계 방향
int counter = 0;
int direction = DIRECTION_CW;
int CLK_state;
int prev_CLK_state;
int brightness = 125; // 중간 값
void setup() {
Serial.begin(9600);
// 엔코더 핀을 입력으로 설정
pinMode(CLK_PIN, INPUT);
pinMode(DT_PIN, INPUT);
// 로터리 엔코더의 CLK 핀의 초기 상태를 읽음
prev_CLK_state = digitalRead(CLK_PIN);
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 로터리 엔코더의 CLK 핀의 현재 상태를 읽음
CLK_state = digitalRead(CLK_PIN);
// CLK의 상태가 변경되었다면, 펄스가 발생한 것임
// 이중 카운트를 피하기 위해 상승 에지(LOW에서 HIGH로)에만 반응
if (CLK_state != prev_CLK_state && CLK_state == HIGH) {
// DT 상태가 HIGH인 경우
// 엔코더는 반시계 방향으로 회전하고 있음 => 카운터 감소
if (digitalRead(DT_PIN) == HIGH) {
direction = DIRECTION_CCW;
counter--;
brightness -= 10; // 이 값을 변경할 수 있음
} else {
// 엔코더는 시계 방향으로 회전하고 있음 => 카운터 증가
direction = DIRECTION_CW;
counter++;
brightness += 10; // 이 값을 변경할 수 있음
}
if (brightness < 0)
brightness = 0;
else if (brightness > 255)
brightness = 255;
// 카운터에 따라 LED의 밝기를 설정
analogWrite(LED_PIN, brightness);
Serial.print("COUNTER: ");
Serial.print(counter);
Serial.print(" | BRIGHTNESS: ");
Serial.println(brightness);
}
// 마지막 CLK 상태 저장
prev_CLK_state = CLK_state;
}
사용 방법
- 아두이노를 USB 케이블을 통해 PC에 연결합니다
- 아두이노 IDE를 열고, 올바른 보드 및 포트를 선택합니다
- 위의 코드를 복사하고 아두이노 IDE로 열기
- 아두이노 IDE에서 Upload 버튼을 클릭하여 코드를 아두이노에 업로드합니다
- 시리얼 모니터 열기
- 로터리 인코더를 회전시킵니다
- LED의 밝기를 확인합니다
- 시리얼 모니터에서 결과를 확인합니다
COM6
COUNTER: 1 | BRIGHTNESS: 135
COUNTER: 2 | BRIGHTNESS: 145
COUNTER: 3 | BRIGHTNESS: 155
COUNTER: 4 | BRIGHTNESS: 165
COUNTER: 5 | BRIGHTNESS: 175
COUNTER: 6 | BRIGHTNESS: 185
COUNTER: 7 | BRIGHTNESS: 195
Autoscroll
Clear output
9600 baud
Newline
코드 설명
소스 코드의 주석 줄에 있는 줄별 설명을 읽으세요!
동영상
비디오 제작은 시간이 많이 걸리는 작업입니다. 비디오 튜토리얼이 학습에 도움이 되었다면, YouTube 채널 을 구독하여 알려 주시기 바랍니다. 비디오에 대한 높은 수요가 있다면, 비디오를 만들기 위해 노력하겠습니다.