写一个温度传感器的程序
时间: 2023-04-04 14:03:56 浏览: 74
你好,以下是温度传感器的程序:
#include <OneWire.h>
#define ONE_WIRE_BUS 2 // 温度传感器连接的引脚
OneWire oneWire(ONE_WIRE_BUS); // 初始化 OneWire 对象
void setup() {
Serial.begin(9600); // 初始化串口通信
}
void loop() {
byte data[12];
byte addr[8];
if ( !oneWire.search(addr)) { // 搜索温度传感器
oneWire.reset_search();
delay(250);
return;
}
if (OneWire::crc8(addr, 7) != addr[7]) { // 校验地址
Serial.println("CRC is not valid!");
return;
}
if (addr[0] != 0x28) { // 判断是否为 DS18B20 温度传感器
Serial.println("Device is not a DS18B20 family device.");
return;
}
oneWire.reset(); // 重置总线
oneWire.select(addr); // 选择传感器
oneWire.write(0x44, 1); // 启动温度转换
byte present = oneWire.reset(); // 重置总线
oneWire.select(addr); // 选择传感器
oneWire.write(0xBE); // 发送读取命令
for (int i = 0; i < 9; i++) { // 读取温度数据
data[i] = oneWire.read();
}
int16_t raw = (data[1] << 8) | data[0];
if (addr[1] == 0x10) {
raw = (raw << 3) | ((data[7] & 0xE0) >> 5);
} else {
raw = (raw << 4) | ((data[7] & 0xF0) >> 4);
}
float celsius = (float)raw / 16.0; // 计算摄氏温度
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" °C");
delay(1000); // 延时 1 秒
}