해당 게시물에서는 VS Code PlatformIO를 사용합니다. 참고바랍니다.
안녕하세요 데브구일입니다!
전에 포스팅했던 가변저항과 PWM을 응용해보도록 하겠습니다.
가변저항을 회전시키면 LED 밝기를 조절할 수 있도록 구현해볼건데요!
코드와 회로는 아래를 참고해주세요!
#include <Arduino.h> // PlatformIO IDE를 사용하시는게 아니라면 이 라인은 지워주세요!
#define POTENTIOMETER_PIN A0
#define LED_PIN 6 // LED핀 설정 (PWM핀[~] 사용)
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(POTENTIOMETER_PIN, INPUT); // pinMode INPUT 설정
}
void loop() {
int value = analogRead(POTENTIOMETER_PIN) / 4; // 0~1023 값으로 입력받고 4로 나누기
Serial.println(value); // value 시리얼 출력
analogWrite(LED_PIN, value); // value 값에 따라 PWM 출력
delay(10);
}
위 코드를 보게되면 먼저 가변저항의 값은 0~1023의 값이 나오게 됩니다.
PWM의 값은 0~255의 값을 가지게되므로 가변저항의 값을 4로 나누면 딱 맞겠지요?
코드를 업로드 하시고 시리얼을 연결하게 되면 0~255의 값이 출력되면서
값에 맞게 LED의 밝기가 조절되는 것을 확인하실 수 있습니다!
하지만 저희가 값을 다르게 원하는 경우가 있을 수 도 있습니다!
예를 들어 0~255가 아닌 50~200의 값 나오도록 하고자 한다면
아두이노에서 제공하는 유용한 함수가 있습니다!
바로 map()이라는 함수인데요.
아래와 같은 파라미터를 가지게 됩니다!
map(value, fromLow, fromHigh, toLow, toHigh)
예를 들어 map_value = map(value, 0, 1023, 0, 255)와 같이 사용하면 다음과 같습니다.
0~1023의 값을 가지게 되는 value 변수를 0~255와 같은 비율로 값을 반환(map_value)
이 함수를 가지고 저희도 한번 사용해보겠습니다
코드는 아래와 같이 작성했습니다!
#include <Arduino.h> // PlatformIO를 사용하시는게 아니라면 이 라인은 지워주세요!
#define POTENTIOMETER_PIN A0
#define LED_PIN 6 // LED핀 설정 (PWM핀[~] 사용)
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(POTENTIOMETER_PIN, INPUT); // pinMode INPUT 설정
}
void loop() {
int value = analogRead(POTENTIOMETER_PIN); // 0~1023 값으로 입력받기
int map_value = map(value, 0, 1023, 50, 200); // 0~1023 -> 50~200 값으로 변경
Serial.println(map_value); // map_value 시리얼 출력
analogWrite(LED_PIN, map_value); // map_value 값에 따라 PWM 출력
delay(10);
}
코드를 보시면 map()를 통해서 0~1023의 값을 50~200의 값으로 변경하도록 하였습니다.
변경된 값은 map_value 변수에 넣고, 시리얼과 PWM 출력을 해주었습니다.
이렇게 실행하시게 되면 가변 저항값을 최저로 내려도 최소 50의 값을 가지므로
LED가 완전이 꺼지지 않고 밝기만 줄어드는 것을 확인할 수 있습니다!
최대치도 200이므로 최대 밝기가 되는 것이 아니지요!
이런 방식 말고도 1~50을 50~1로 바꾸는 것도 가능하고 음수로도 가능합니다!
자세한 부분은 공식 레퍼런스 문서를 확인해주세요!
이번 포스팅은 여기서 마치도록하겠습니다!
감사합니다 :D
'Arduino' 카테고리의 다른 글
[PlatformIO] 아두이노 SimpleTimer 라이브러리 (0) | 2022.06.06 |
---|---|
[PlatformIO] 아두이노 인터럽트 사용하기 (0) | 2022.05.20 |
[PlatformIO] 아두이노 PWM 사용하기 analogWrite() (0) | 2022.05.17 |
[PlatformIO] 아두이노 가변저항 사용해보기 analogRead() (0) | 2022.05.16 |
[PlatformIO] 아두이노 시리얼 입력받기 Serial.available(), serialEvent() (0) | 2022.05.15 |