const int analogPin = A0; // 類比輸入腳位 (分壓點)
const float Vin = 5.0; // Arduino 提供的輸入電壓 (5V)
const float R1 = 10000.0; // 已知電阻值 (10kΩ)
void setup() {
Serial.begin(9600); // 開啟序列監視器
Serial.println("未知電阻測量程式啟動...");
}
void loop() {
int analogValue = analogRead(analogPin); // 讀取類比輸入值
float Vout = (analogValue / 1023.0) * Vin; // 計算分壓點電壓
// 防止計算中分母為 0 的錯誤
if (Vin - Vout == 0) {
Serial.println("錯誤:分壓點接近 5V,未知電阻可能過大或接線問題");
delay(1000); // 延遲 1 秒後重新測量
return; // 跳過本次迴圈
}
// 計算未知電阻 Rx
float Rx = (R1 * Vout) / (Vin - Vout);
// 輸出分壓點電壓 Vout
Serial.print("分壓點電壓 Vout: ");
Serial.print(Vout, 2); // 顯示到小數點後兩位
Serial.println(" V");
// 輸出未知電阻 Rx,根據範圍自動添加單位
Serial.print("未知電阻 Rx: ");
if (Rx < 1000) {
Serial.print(Rx, 2); // 小於 1kΩ 時顯示 Ω
Serial.println(" Ω");
} else {
Serial.print(Rx / 1000.0, 2); // 超過 1kΩ 時轉換為 kΩ
Serial.println(" kΩ");
}
delay(1000); // 每秒測量一次
}