//MAX485_DS18B20 溫度檢知器屋外發射端程式碼:
#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
#define DE_RE 2 //DE & RE 合併線接 Arduino 第D2(數位Digital)腳
#define ONE_WIRE_BUS 3 //DS18B20黃線(H.C.C)
#define RO_PIN 7 // 屋外不接收,此腳可不接
#define DI_PIN 8 // 接屋外 MAX485 的 DI 腳
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
SoftwareSerial RS485Serial(RO_PIN, DI_PIN); // 屋外改用軟體序列埠
void setup() {
Serial.begin(9600); // 用於電腦除錯
RS485Serial.begin(9600); // 用於 RS485 傳輸
pinMode(DE_RE, OUTPUT);
digitalWrite(DE_RE, LOW); // 預設接收狀態
sensors.begin();
Serial.println("屋外發射端啟動...");
}
void loop() {
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
if (tempC != DEVICE_DISCONNECTED_C) {
// 輸出到電腦畫面(除錯用)
Serial.print("目前溫度: ");
Serial.println(tempC);
// 切換為發射模式
digitalWrite(DE_RE, HIGH);
delay(5); // 等待硬體穩定
// 傳送資料(注意:必須用 println 才會送出 \n 換行符)
RS485Serial.print("T:");
RS485Serial.print(tempC, 2);
RS485Serial.println(":C");
// 等待資料完全送出後,切回接收模式
delay(20);
digitalWrite(DE_RE, LOW);
} else {
Serial.println("⚠️ 錯誤:找不到 DS18B20 感測器!");
}
delay(2000);
}