Arduino DS18B20 温度传感器读取教程:代码示例和解析
DS18B20 是一种数字温度传感器,可以通过单总线接口读取温度。下面是 Arduino 代码示例,可以用于读取 DS18B20 的温度值:
#include <OneWire.h>
OneWire ds(2); //使用 Arduino 的 2 号引脚连接 DS18B20 传感器
void setup() {
Serial.begin(9600);
}
void loop() {
byte data[12];
byte addr[8];
if (!ds.search(addr)) {
ds.reset_search(); //重新搜索设备
delay(250);
return;
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println('CRC is not valid!');
return;
}
if (addr[0] != 0x28) {
Serial.println('Device is not a DS18B20 family device.');
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44); //开始温度转换
delay(1000); //等待转换完成
ds.reset();
ds.select(addr);
ds.write(0xBE); //读取温度数据
for (int i = 0; i < 9; i++) {
data[i] = ds.read();
}
int16_t raw = (data[1] << 8) | data[0];
byte cfg = (data[4] & 0x60);
if (cfg == 0x00) {
raw = raw & ~7;
} else if (cfg == 0x20) {
raw = raw & ~3;
} else if (cfg == 0x40) {
raw = raw & ~1;
}
float celsius = (float)raw / 16.0;
Serial.print('Temperature: ');
Serial.print(celsius);
Serial.println(' °C');
delay(1000);
}
在这个示例中,使用 OneWire 库来控制总线通信。首先搜索总线上的设备,然后选择 DS18B20 并发送开始温度转换的指令。等待转换完成后,再发送读取温度数据的指令,并将读取的数据进行计算得出温度值。最后将温度值通过串口打印出来。
需要注意的是,在使用 DS18B20 时,需要为其供电,并将数据线连接到单总线总线上。此外,还需要注意 DS18B20 的安装位置,避免其受到其他热源的影响。
原文地址: https://www.cveoy.top/t/topic/lvMr 著作权归作者所有。请勿转载和采集!