利用定时器4中断处理功能,实现每隔2s,读取实现将温湿度传感器的值上传到串口小助手
时间: 2024-03-05 07:50:14 浏览: 110
STM32温湿度传感器读取温湿度数据并显示到PC端串口助手
5星 · 资源好评率100%
好的,以下是可以实现你要求的代码:
```
#include <Wire.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
SoftwareSerial Serial1(10, 11); // RX, TX
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial1.begin(9600);
dht.begin();
TCCR4A = 0; // set entire TCCR4A register to 0
TCCR4B = 0; // same for TCCR4B
TCNT4 = 0; //initialize counter value to 0
// set compare match register for 2hz increments
OCR4A = 31249; // = 16000000 / (256 * 2) - 1 (must be <65536)
// turn on CTC mode
TCCR4B |= (1 << WGM12);
// Set CS12 and CS10 bits for 256 prescaler
TCCR4B |= (1 << CS12) | (0 << CS11) | (0 << CS10);
// enable timer compare interrupt
TIMSK4 |= (1 << OCIE4A);
}
void loop() {
// do nothing
}
ISR(TIMER4_COMPA_vect) {
float temp, humi;
humi = dht.readHumidity();
temp = dht.readTemperature();
if (!isnan(humi) && !isnan(temp)) {
Serial1.print("Temperature: ");
Serial1.print(temp);
Serial1.print(" C, Humidity: ");
Serial1.print(humi);
Serial1.println(" %");
} else {
Serial1.println("DHT11 read error");
}
}
```
代码中使用了定时器4中断处理功能,并将比较匹配寄存器设置为2Hz,即每隔2秒触发一次中断。在中断处理函数中读取温湿度传感器的值,并上传到串口小助手中。请注意,你需要将温湿度传感器的库文件(例如DHT11)添加到代码中。
阅读全文