#include<dht11.h> #include<splash.h> #include<Wire.h> #include<Adafruit_GFX.h> #include<Adafruit_SSD1306.h> #define OLED_RESET -1 #define DHTPIN 7//4号作为温湿度传感器引脚 dht11 dht; Adafruit_SSD1306 display(128, 64, &Wire,OLED_RESET); void setup() { } void loop() { //补充测温程序 //补充PWM调速程序 //风扇测速 float timesum = 0; for(int i=0;i<10;i++) { //风扇每转一圈, 有两个高低电平,用pulseIN 函数测量 timesum=timesum+pulseIn(measurePin, HIGH); timesum=timesum+pulseIn(measurePin, LOW); float zhuan=timesum/5;//取平均值 vshow=60*1000000/zhuan; //单 位转换//显示 display.setTextColor(WHITE);//开像素点发光 display.clearDisplay();//清屏 display.setTextSize(2); //设置字体大小 display.setCursor(0,0)://设置显示位置 display.print("T");//显示变量的名称 display.print(t); //显示变量的值 display.display();//开显示 }
时间: 2023-10-24 11:07:45 浏览: 116
这段代码存在以下几个问题:
1. `setup()` 函数为空,应该在其中初始化传感器、风扇等设备,并设置 OLED 显示屏。
2. `measurePin` 变量未定义,应该先定义该变量并设置测量风扇转速的引脚。
3. 在 `for` 循环中没有测量温湿度传感器的值,并且变量 `t` 未定义。
4. OLED 显示屏的代码未完整,缺少设置字体大小、显示位置等设置。
以下是修改后的代码,已经加入了初始化函数和完整的 OLED 显示屏设置代码:
```C++
#include <dht11.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
#define DHTPIN 7
#define FAN_PIN 9
#define MEASURE_PIN 2
dht11 dht;
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
void setup() {
pinMode(FAN_PIN, OUTPUT);
pinMode(MEASURE_PIN, INPUT);
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
display.setCursor(0, 0);
}
void loop() {
// 读取温湿度传感器的值
int chk = dht.read(DHTPIN);
float t = dht.temperature;
float h = dht.humidity;
// 补充 PWM 调速程序
// 测量风扇转速
float timesum = 0;
for (int i = 0; i < 10; i++) {
timesum = timesum + pulseIn(MEASURE_PIN, HIGH);
timesum = timesum + pulseIn(MEASURE_PIN, LOW);
}
float zhuan = timesum / 5;
float vshow = 60 * 1000000 / zhuan;
// 显示温湿度和风扇转速
display.clearDisplay();
display.setCursor(0, 0);
display.print("Temp: ");
display.print(t);
display.println(" C");
display.print("Humidity: ");
display.print(h);
display.println(" %");
display.print("Fan speed: ");
display.print(vshow);
display.println(" RPM");
display.display();
delay(1000);
}
```
请注意,以上代码仅供参考,可能需要根据实际情况进行调整。同时,需要在代码中添加 PWM 调速程序。
阅读全文