#define LED_PIN 6 // NeoPixel LED 핀 (아두이노 핀 번호)
#define NUM_PIXELS 8 // NeoPixel LED 수 (8개)
#define SENSOR_PIN A0 // 토양 수분 센서 핀 (아날로그 핀)
Adafruit_NeoPixel strip(NUM_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin(); // NeoPixel 초기화
strip.show(); // LED 초기 상태 (꺼짐)
pinMode(SENSOR_PIN, INPUT); // 수분 센서 핀 설정
Serial.begin(9600); // 시리얼 통신 시작
}
void loop() {
int sensorValue = analogRead(SENSOR_PIN); // 센서 값 읽기 (0 ~ 1023)
// 시리얼 모니터에 센서 값 출력
Serial.print("Soil Moisture Value: ");
Serial.println(sensorValue);
// 센서 값을 0 ~ 1023 범위에서 0 ~ 255 범위로 변환
int ledBrightness = map(sensorValue, 0, 1023, 0, 255);
// LED 개수에 맞게 켜지거나 꺼지는 LED 수 계산
int ledsOn = map(ledBrightness, 0, 255, 0, NUM_PIXELS);
// LED 상태 업데이트
for (int i = 0; i < NUM_PIXELS; i++) {
if (sensorValue > 700) { // 수분 부족 (센서 값이 300 미만)
// 수분이 부족하면 모든 LED가 분홍색(Pink)
strip.setPixelColor(i, strip.Color(255, 0, 255)); // 분홍색
} else if (sensorValue >= 400 && sensorValue <= 700) { // 수분 값에 따라 청색 점차적으로 켜짐
// 수분이 적당하면 LED가 청색으로 점진적으로 켜짐
int blueLevel = map(sensorValue, 400, 700, 0, 255);
if (i < ledsOn) {
strip.setPixelColor(i, strip.Color(0, 0, blueLevel)); // 청색
} else {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // 꺼짐
}
} else { // 수분 값이 적정 이상일 경우
// 수분이 충분하면 모든 LED가 꺼짐
strip.setPixelColor(i, strip.Color(0, 0, 0)); // 꺼짐
}
}
strip.show(); // LED 상태 갱신
delay(500); // 0.5초 대기 (센서 값이 변화할 때마다 천천히 업데이트)
}