///////////////////////////////////////////////////////////////////////////////////
// /*
// 光感小夜燈
// 基本元件: 光敏電阻感測器
// 功能 : 天黑請開燈(digitalRead())
// */
// // 光敏電阻接腳
// const int LDR_Pin = 15;
// const int led_Pin = 25;
// void setup() {
// Serial.begin(115200);
// // 光敏電阻設為輸入模式
// pinMode(LDR_Pin, INPUT);
// // LED設為輸出模式並關燈
// pinMode(led_Pin, OUTPUT);
// digitalWrite(led_Pin, LOW);
// }
// void loop() {
// // 讀取數位亮度
// int value = digitalRead(LDR_Pin);
// Serial.println(value);
// // 亮燈
// if(value == 1){
// digitalWrite(led_Pin, HIGH);
// }else{
// digitalWrite(led_Pin, LOW);
// }
// delay(1000);
// }
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
/*
智能補光燈
基本元件: 光敏電阻感測器
功能 : 依環境亮度進行補光(analogRead())
*/
// 光敏電阻接腳
const int LDR_Pin = 2;
// LED接腳
const int led_Pin[12] = {4, 5, 18, 19, 21, 22, 23, 13, 12, 14, 27, 26};
void setup() {
// 開啟序列埠通訊
Serial.begin(115200);
// 光敏電阻設為輸入模式
pinMode(LDR_Pin, INPUT);
// LED設為輸出模式並關燈
for(int i=0; i<sizeof(led_Pin)/sizeof(int); i++){
pinMode(led_Pin[i], OUTPUT);
digitalWrite(led_Pin[i], LOW);
}
}
void loop() {
// 讀取類比亮度,分辨率為12位元(0-4095)
int value = analogRead(LDR_Pin);
Serial.printf("類比亮度 : %d\n", value);
// 計算 2^n = 環境亮度,點亮 n 顆燈(ESP32類比數位轉換器的分辨率為12位元(0-4095))
// value = log(value-31)/log(2);
// 將環境亮度32~4063對應至0~12(欲點亮LED的數目)
value = map(value, 32, 4063, 0, 12);
Serial.printf("換算亮燈數 : %d\n", value);
// 亮燈
for(int i=0; i<value; i++){
digitalWrite(led_Pin[i], HIGH);
}
for(int i=value; i<sizeof(led_Pin)/sizeof(int); i++){
digitalWrite(led_Pin[i], LOW);
}
delay(100);
}
///////////////////////////////////////////////////////////////////////////////////