改进代码 #include <DHT.h> #include <SoftwareSerial.h> #include <Arduino.h><stdio.h> #define TJC_RX 15 // Arduino的软串口RX接口 #define TJC_TX 14 // Arduino的软串口TX接口 #define TJC_BAUD 9600 // 串口波特率 //定义针脚 #define DHTPIN A0 //定义类型,DHT11或者其它 #define DHTTYPE DHT11 //进行初始设置 DHT dht(DHTPIN, DHTTYPE); int a; unsigned long nowtime; void setup() { // put your setup code here, to run once: //初始化串口 TJC.begin(9600); //因为串口屏开机会发送88 ff ff ff,所以要清空串口缓冲区 while (TJC.read() >= 0); //清空串口缓冲区 TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面 nowtime = millis(); //获取当前已经运行的时间 } void loop() { // 两次检测之间,要等几秒钟,这个传感器有点慢。 delay(1000); // 读温度或湿度要用250毫秒 float h = dht.readHumidity();//读湿度 float t = dht.readTemperature();//读温度,默认为摄氏度 Serial.print("Humidity: ");//湿度 Serial.println(h); Serial.print("Temperature: ");//温度 Serial.print(t); Serial.println(" ℃ "); char str[100]; if (millis() >= nowtime + 1000) { nowtime = millis(); //获取当前已经运行的时间 //用sprintf来格式化字符串,给t0的txt属性赋值 sprintf(str, "t0.txt=\"Temperature:\"\xff\xff\xff", a); //把字符串发送出去 TJC.print(str); }
时间: 2024-03-05 17:48:12 浏览: 126
以下是改进后的代码:
```cpp
#include <DHT.h>
#include <SoftwareSerial.h>
#define TJC_RX 15 // Arduino的软串口RX接口
#define TJC_TX 14 // Arduino的软串口TX接口
#define TJC_BAUD 9600 // 串口波特率
#define DHTPIN A0 //定义针脚
#define DHTTYPE DHT11 //定义类型,DHT11或者其它
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial TJC(TJC_RX, TJC_TX);
unsigned long lastTime = 0;
const unsigned long interval = 1000; // 1s 的时间间隔
void setup() {
Serial.begin(9600); //初始化串口
TJC.begin(TJC_BAUD); //初始化串口屏
while (TJC.read() >= 0); //清空串口缓冲区
TJC.print("page main\xff\xff\xff"); //发送命令让屏幕跳转到main页面
lastTime = millis(); //获取当前已经运行的时间
}
void loop() {
// 每隔 interval 毫秒执行一次
if (millis() - lastTime < interval) {
return;
}
lastTime = millis();
// 读温度或湿度要用250毫秒
float h = dht.readHumidity(); //读湿度
float t = dht.readTemperature(); //读温度,默认为摄氏度
Serial.print("Humidity: "); //湿度
Serial.println(h);
Serial.print("Temperature: "); //温度
Serial.print(t);
Serial.println(" ℃");
// 用 sprintf 来格式化字符串,给 t0 的 txt 属性赋值
char str[100];
sprintf(str, "t0.txt=\"Temperature: %.2f ℃\"\xff\xff\xff", t);
// 把字符串发送出去
TJC.print(str);
}
```
主要的改进如下:
1. 将串口的初始化放在 Serial.begin() 函数中,避免混淆。
2. 通过 lastTime 和 interval 变量来控制每隔一定时间执行一次温度读取和屏幕更新操作,避免了使用 delay() 函数造成的程序响应速度降低的问题。
3. 在温度字符串的格式化中,将温度值 t 直接嵌入到字符串中,避免了使用未定义的变量 a。
4. 去掉了无用的头文件包含,缩短了编译时间。
阅读全文