카테고리 없음
AIOT - 아두이노(4) - 가변저항과 LED
저선장
2023. 9. 27. 11:10
이번엔 가변저항을 통해 LED의 밝기를 조절하는 프로그램을 만들어보겠습니다.
// 가변 저항값에 따른 LED 밝기 조절하기
#define LED_RED 5
#define LED_GREEN 6
#define LED_BLUE 11
void setup() {
Serial.begin(9600);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
int vrValue = analogRead(A0); // 가변저항 값 받아오기
int rgb = ((double)vrValue / 1023.0) * 255; //가변저항 값을 rgb 값인 0~255로 변환
Serial.println(rgb);
// rgb의 밝기를 가변저항으로 조절
int redValue = rgb;
int greenValue = rgb;
int blueValue = rgb;
analogWrite(LED_RED, redValue);
analogWrite(LED_GREEN, greenValue);
analogWrite(LED_BLUE, blueValue);
}
위 코드를 사용하면 가변저항에 따라 LED의 밝기를 조절 할 수 있습니다.
가변저항으로 LED 밝기 조절하는 코드는 생각보다 너무 쉬워서 밝기 조절이 아닌 무지개색(빨주노초파남보)가 출력되는 코드를 만들어봤습니다.
// 가변 저항값에 따른 LED 무지개색 출력
#define LED_RED 5
#define LED_GREEN 6
#define LED_BLUE 11
void setup() {
Serial.begin(9600);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
}
void loop() {
int vrValue = analogRead(A0);
// 무지개색 출력 방법
// 255/0/0(start)-> 255/255/0 -> 0/255/0 -> 0/255/255 -> 0/0/255 -> 255/0/255
// 총 5가지 구간이 있으므로 편의상 200 * 5의 1000으로 설정
int rgb = ((double)vrValue / 1023.0) * 1000;
Serial.println(rgb);
// 색상 값 초기화
int redValue = 0;
int greenValue = 0;
int blueValue = 0;
// 1구간(빨 -> 노)
if (rgb < 201){
redValue = 200;
greenValue = rgb;
blueValue = 0;
}
// 2구간(노 -> 초)
else if (rgb < 401){
redValue = 400 - rgb;
greenValue = 200;
blueValue = 0;
}
// 3구간(초 -> 파)
else if (rgb < 601){
redValue = 0;
greenValue = 200;
blueValue = rgb - 400;
}
// 4구간(파 -> 남)
else if (rgb < 801){
redValue = 0;
greenValue = 800 - rgb;
blueValue = 200;
}
// 5구간(남 -> 보)
else{
redValue = rgb - 800;
greenValue = 0;
blueValue = 200;
}
analogWrite(LED_RED, redValue);
analogWrite(LED_GREEN, greenValue);
analogWrite(LED_BLUE, blueValue);
}
무지개색을 출력하는 방법으로 5개의 구간을 설정해 rgb값 변수를 설정해줬습니다.