3、单片机向蓝牙发送温湿度数据(每3s刷新一次数据),蓝牙可以调节温度阈值,蓝牙发送字符‘0’表示阈值+2,发送字符‘1’表示阈值-2,温度超过所设阈值t,点亮LED灯,小于则灯熄灭。同样在OLED中显示自己的组名或组长名字,在显示温湿度。主函数代码如上。
时间: 2024-02-24 12:55:02 浏览: 90
温湿度两块单片机进行收集以及LED显示
根据您提供的要求,我稍微修改了一下上面的代码,加入了蓝牙模块和OLED模块的操作。以下是修改后的代码:
```c
#include "stm32f10x.h"
#include "usart.h"
#include "dht11.h"
#include "bluetooth.h"
#include "oled.h"
uint8_t temp, humi, threshold = 27;
char buffer[100];
void delay_ms(uint16_t ms)
{
while(ms--)
{
uint16_t i = 8000;
while(i--);
}
}
int main(void)
{
USART1_Config();
DHT11_Init();
Bluetooth_Init();
OLED_Init();
OLED_ShowString(0, 0, "Group: XXX"); //在OLED上显示组名或组长名字
while(1)
{
DHT11_Read_Data(&temp, &humi);
sprintf(buffer, "Temperature: %d C, Humidity: %d %%", temp, humi);
OLED_ShowString(0, 2, buffer); //在OLED上显示温湿度数据
if(temp > threshold) //当温度高于阈值时,控制LED灯亮
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);
}
else //否则关闭LED灯
{
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
}
if(Bluetooth_Available())
{
char c = Bluetooth_Read();
if(c == '0') //调节阈值,+2
{
threshold += 2;
sprintf(buffer, "Threshold: %d C", threshold);
OLED_ShowString(0, 4, buffer);
}
else if(c == '1') //调节阈值,-2
{
threshold -= 2;
sprintf(buffer, "Threshold: %d C", threshold);
OLED_ShowString(0, 4, buffer);
}
}
delay_ms(3000); //延时3秒后重新获取温湿度数据
}
}
```
代码中加入了蓝牙模块和OLED模块的初始化和操作函数:
1. `Bluetooth_Init()`、`Bluetooth_Available()`和`Bluetooth_Read()`:初始化蓝牙模块并读取蓝牙发送的数据;
2. `OLED_Init()`和`OLED_ShowString()`:初始化OLED模块并在屏幕上显示组名或组长名字、温湿度数据和阈值。
在主函数中,我们先读取温湿度数据并在OLED上显示,然后根据温度的值和阈值控制LED灯的亮灭。如果蓝牙模块有数据可读,就读取蓝牙发送的数据并根据字符'0'或'1'调节阈值,并在OLED上显示当前的阈值。最后延时3秒后重新获取温湿度数据。
注意:对于蓝牙模块和OLED模块的具体操作,请参考它们的驱动代码。
阅读全文