蓝桥杯官方ds18b20程序
时间: 2023-05-13 13:03:40 浏览: 238
蓝桥杯官方ds18b20程序是一个用于读取温度传感器DS18B20的程序。该程序采用基于OneWire协议的方式与传感器进行通讯,并利用校验位计算确保通讯可靠性。
程序的基本流程如下:
1. 初始化OneWire总线,搜索DS18B20设备;
2. 从DS18B20获取温度数据,包括整数部分和小数部分;
3. 将整数部分和小数部分组合成完整的温度值;
4. 将温度值输出到显示屏。
在程序中,通过先发送初始化命令,然后向总线上发送搜索命令,程序便可以搜索到所有接在OneWire总线上的DS18B20设备。
接着程序读取DS18B20的ROM码,确保通讯的准确性,并从DS18B20获取其所测量的温度数据。获取温度数据的方法为一步式或两步式,即发出转换命令和读取命令同时进行;或是分开进行,先发出转换命令,隔一段时间再读取数据。为了减小通讯的误差,数据读取过程中还需要进行CRC校验。
最后,程序将获取到的整数部分和小数部分通过一定的计算方法合并成完整的温度值,并将其显示在屏幕上。
总之,蓝桥杯官方ds18b20程序是一个通用的、可靠的DS18B20温度传感器读取程序,可用于各种物联网应用,具有良好的适用性和实用性。
相关问题
蓝桥杯ds18b20显示小数
要在蓝桥杯使用ds18b20显示小数,您需要使用以下步骤:
1. 在您的Code::Blocks工作环境中添加一个DS18B20库文件。
2. 编写一个程序,读取DS18B20的温度数据,并将其转换为浮点数。
3. 显示温度值的小数部分。为此,您需要将温度值分为整数部分和小数部分,并将小数部分显示出来。
以下是一个示例程序:
// 导入ds18b20库文件
#include <OneWire.h>
#include <DallasTemperature.h>
// 初始化ds18b20引脚
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
// 启动ds18b20传感器
sensors.begin();
}
void loop() {
// 读取ds18b20温度数据
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
// 显示ds18b20温度
Serial.print("Temperature: ");
Serial.print(tempC);
Serial.write('\n');
// 分开整数部分和小数部分
int ipart = (int)tempC;
float fpart = tempC - (float)ipart;
// 显示小数部分
Serial.print("Decimal Part: ");
Serial.print(fpart);
Serial.write('\n');
// 延时一段时间
delay(1000);
}
请注意,此代码仅用于示例和基础示例。如果您需要用于生产,则需要进行更多测试和优化。同时,代码中ds18b20引脚需要做出相应更改。
怎么让蓝桥杯LED和DS18B20同时工作
要让蓝桥杯LED和DS18B20同时工作,可以使用Arduino或其他微控制器来控制它们。
1. 连接电路:将蓝桥杯LED和DS18B20分别连接到Arduino板上。连接方式见下图。
<img src="https://cdn.jsdelivr.net/gh/stevenli91748/CDN/images/20210920224243.png" width="600px">
2. 编写代码:使用Arduino IDE编写代码,控制LED和读取DS18B20的温度值。示例代码如下:
```c
#include <OneWire.h> //引入OneWire库
#define PIN_DS18B20 2 //DS18B20连接到2号引脚
OneWire ds(PIN_DS18B20); //创建OneWire对象
byte addr[8]; //存放DS18B20地址
byte i;
int LED_PIN = 13; //LED连接到13号引脚
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(9600); //打开串口
if (!ds.search(addr)) { //搜索DS18B20地址
Serial.println("No more addresses.");
ds.reset_search();
delay(250);
return;
}
Serial.print("DS18B20 Address: ");
for (i = 0; i < 8; i++) {
Serial.print(addr[i], HEX);
}
Serial.println();
ds.reset();
ds.select(addr);
ds.write(0x44); //开始温度转换
}
void loop() {
float temperature;
ds.reset(); //重置总线
ds.select(addr); //选中DS18B20
ds.write(0xBE); //发送读取命令
for (i = 0; i < 9; i++) {
byte data = ds.read(); //读取数据
Serial.print(data, HEX);
Serial.print(" ");
}
Serial.println();
int16_t rawTemperature = (data[1] << 8) | data[0];
temperature = (float)rawTemperature / 16.0; //计算温度值
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
if (temperature > 25) {
digitalWrite(LED_PIN, HIGH); //LED亮起来
} else {
digitalWrite(LED_PIN, LOW); //LED熄灭
}
delay(1000); //延时1秒
}
```
3. 上传代码:将代码上传到Arduino板上。
4. 运行程序:开启串口监视器,可以看到DS18B20的温度值和LED的状态。如果温度高于25°C,LED会亮起来;否则LED会熄灭。
阅读全文