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 的安装位置,避免其受到其他热源的影响。

Arduino DS18B20 温度传感器读取教程:代码示例和解析

原文地址: https://www.cveoy.top/t/topic/lvMr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录