2026年8月16日 星期日

MAX485_DS18B20 溫度檢知器屋外發射端程式碼:

 

//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);
}

沒有留言:

張貼留言