// CDS 센서의 값(8~1015)을 9개 구간으로 나누어 해당하는 LED만 켜기
// 범위: 8~1015 (총 1008), 9개 구간 → 각 구간 약 112
// 핀 설정
const int CDS_PIN = A0;
const int LED_START_PIN = 2;
const int LED_COUNT = 9;
const int LED_END_PIN = LED_START_PIN + LED_COUNT - 1; // D10
// CDS 9개 구간의 정확한 경계값
// 각 구간: (1015-8)/9 = 112 폭
const int CDS_THRESHOLD[8] = {
120, // LED1: 8~119 / LED2: 120~231
232, // LED2: 120~231 / LED3: 232~343
344, // LED3: 232~343 / LED4: 344~455
456, // LED4: 344~455 / LED5: 456~567
568, // LED5: 456~567 / LED6: 568~679
680, // LED6: 568~679 / LED7: 680~791
792, // LED7: 680~791 / LED8: 792~903
904 // LED8: 792~903 / LED9: 904~1015
};
void setup()
{
// LED 핀 설정
for (int i = LED_START_PIN; i <= LED_END_PIN; i++)
{
pinMode(i, OUTPUT);
digitalWrite(i, LOW);
}
// CDS 핀 설정 (입력)
pinMode(CDS_PIN, INPUT);
// 시리얼 통신 초기화 (디버깅용)
Serial.begin(9600);
Serial.println("CDS LED Indicator started!");
Serial.println("CDS Value Mapping (Actual Range: 8~1015):");
Serial.println("8~119: LED1(D2) | 120~231: LED2(D3) | 232~343: LED3(D4)");
Serial.println("344~455: LED4(D5) | 456~567: LED5(D6) | 568~679: LED6(D7)");
Serial.println("680~791: LED7(D8) | 792~903: LED8(D9) | 904~1015: LED9(D10)");
}
void loop()
{
// CDS 값 읽기
int cds_value = analogRead(CDS_PIN);
// 경계값과 비교하여 LED 인덱스 결정
int led_index = 0;
for (int i = 0; i < 8; i++)
{
if (cds_value >= CDS_THRESHOLD[i])
{
led_index = i + 1;
}
}
// 모든 LED 끄기
for (int i = LED_START_PIN; i <= LED_END_PIN; i++)
{
digitalWrite(i, LOW);
}
// 선택된 LED만 켜기
int active_pin = LED_START_PIN + led_index;
digitalWrite(active_pin, HIGH);
// 디버깅: 100ms마다 CDS 값과 점등된 LED 출력
static unsigned long last_print_time = 0;
if (millis() - last_print_time >= 100)
{
Serial.print("CDS: ");
Serial.print(cds_value);
Serial.print(" → LED ");
Serial.print(led_index + 1);
Serial.print(" (D");
Serial.print(active_pin);
Serial.println(")");
last_print_time = millis();
}
}
절대 이 배선도를 따라 전선을 연결하면 안됩니다.!
보드 망가집니다. ~
가상으로 움직임만 보여드려고 연결한 가짜 배선도입니다.