非单总线连接的多个ds18b20温度传感器测温单片机程序怎么写
时间: 2023-09-12 07:06:38 浏览: 103
单片机的18b20的程序,是一个传感器的程序在此基础修改即可
要连接多个DS18B20温度传感器,需要使用1-Wire总线协议。以下是连接多个DS18B20并测量温度的基本步骤:
1. 初始化1-Wire总线:将总线引脚设置为输出并拉低,然后等待至少480微秒。接下来将总线引脚设置为输入并等待DS18B20响应。
2. 发送ROM命令:向总线发送ROM命令,以便唤醒每个DS18B20并获得其唯一的64位ROM代码。这个代码将用于后续操作。
3. 发送功能命令:向总线发送功能命令,以便读取或写入DS18B20的寄存器。要测量温度,需要发送读取温度的命令。
4. 读取温度值:DS18B20将在总线上发送其温度数据。将读取总线上的数据并将其转换为实际温度值。
5. 重复以上步骤:对于每个DS18B20,重复以上步骤1到4。
以下是一个使用Arduino的示例程序,用于连接多个DS18B20并测量温度:
```C++
#include <OneWire.h>
// 定义1-Wire总线引脚
#define ONE_WIRE_BUS 2
// 创建1-Wire总线对象
OneWire oneWire(ONE_WIRE_BUS);
void setup() {
Serial.begin(9600);
}
void loop() {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
// 初始化1-Wire总线
if ( !oneWire.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
oneWire.reset_search();
delay(250);
return;
}
// 输出DS18B20的唯一ROM代码
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
// 判断DS18B20类型
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// 发送读取温度的命令
oneWire.reset();
oneWire.select(addr);
oneWire.write(0x44, 1);
// 等待温度转换完成
present = oneWire.reset();
oneWire.select(addr);
oneWire.write(0xBE);
// 读取温度值
Serial.print("Temperature = ");
byte lowByte = oneWire.read();
byte highByte = oneWire.read();
int16_t temp = (highByte << 8) | lowByte;
float celsius = (float)temp / 16.0;
Serial.print(celsius);
Serial.println(" Celsius");
}
```
在这个示例程序中,我们使用了OneWire库来实现1-Wire总线协议。在setup()函数中,我们初始化串口通信。在loop()函数中,我们使用oneWire.search()函数来搜索连接到1-Wire总线上的DS18B20设备。对于每个设备,我们输出其唯一的ROM代码,并发送读取温度的命令。最后,我们读取温度值并将其输出到串口。对于每个DS18B20设备,我们重复以上步骤。
阅读全文