优化代码 #include <SoftwareSerial.h> #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #include <Nextion.h> #define DHTPIN 2 #define DHTTYPE DHT11 DHT_Unified dht(DHTPIN, DHTTYPE); SoftwareSerial mySerial(10, 11); NexText tempText(0, 2, "g0"); // 温度文本框 NexText humText(0, 3, "g1"); // 湿度文本框 void setup() { Serial.begin(9600); while (!Serial); mySerial.begin(9600); dht.begin(); NexInit(); } void loop() { // 读取温度和湿度 sensors_event_t event; dht.temperature().getEvent(&event); float temperature = event.temperature; dht.humidity().getEvent(&event); float humidity = event.relative_humidity; // 将温度和湿度数据通过串口发送 byte tempBytes[2], humBytes[2]; tempBytes[0] = (byte)(temperature / 256); // 位移运算符代替除法 tempBytes[1] = (byte)(temperature); humBytes[0] = (byte)(humidity / 256); humBytes[1] = (byte)(humidity); mySerial.write(tempBytes, 2); mySerial.write(humBytes, 2); // 在屏幕上显示温度和湿度 String tempStr = String(temperature, 1) + "C"; // 将浮点数转换为字符串并加上单位 String humStr = String(humidity, 1) + "%"; tempText.setText(tempStr.c_str()); // setText()函数需要传入const char*类型 humText.setText(humStr.c_str()); delay(2000); }
时间: 2024-03-23 18:42:30 浏览: 316
Adafruit_GFX_Library_Adafruit_GFX.h_
5星 · 资源好评率100%
在代码中,可以进行如下优化:
1. 在声明 Nextion 文本框对象时,可以直接传入组件名称,避免重复定义变量。例如:
```
NexText tempText(0, 2, "g0"); // 温度文本框
NexText humText(0, 3, "g1"); // 湿度文本框
```
2. 在将浮点数转换为字符串时,可以使用 `dtostrf()` 函数。该函数可以将浮点数转换为指定精度的字符串,并且可以避免使用 `String` 类型引起的内存问题。例如:
```
char tempStr[10], humStr[10];
dtostrf(temperature, 5, 1, tempStr);
dtostrf(humidity, 5, 1, humStr);
```
3. 在发送数据到串口时,可以一次性发送一个数组,避免多次调用 `write()` 函数。例如:
```
byte data[4];
data[0] = (byte)(temperature / 256); // 位移运算符代替除法
data[1] = (byte)(temperature);
data[2] = (byte)(humidity / 256);
data[3] = (byte)(humidity);
mySerial.write(data, 4);
```
4. 在设置文本框内容时,可以直接传入 `char*` 类型的指针,避免使用 `String` 类型。例如:
```
tempText.setText(tempStr);
humText.setText(humStr);
```
阅读全文