#define MAX_DATA_NUM 100 // 定义数组的最大容量为100int data[MAX_DATA_NUM]; // 定义一个长度为100的数组用于存储数据int data_num = 0; // 定义一个变量用于记录已经存储的数据数量while (1){ Elude_detect_barrier(); char buf[10]; int i = 0; while (1) { if (USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == SET) { buf[i] = USART_ReceiveData(USART3); i++; if (i == 9) { break; } } } formaldehyde = (buf[2] << 8) + buf[3]; sprintf(display, "Formaldehyde: %d", formaldehyde); float formaldehyde_f = (float)formaldehyde / 10.0; if (formaldehyde_f > 0.1) { sprintf(display, "Formaldehyde: %.1f", formaldehyde_f); Car_Stop(0); OLED_Clear(); OLED_ShowString(0, 0, display, 16); Beep_Alert(); // 将超过浓度阈值的数据存储到数组中 if (data_num < MAX_DATA_NUM) { data[data_num] = formaldehyde; data_num++; } } // 检查数组中存储的数据是否超过一定数量,如果超过则触发相应的报警或者处理机制 if (data_num >= 10) { // TODO: 触发报警或者处理机制 data_num = 0; // 重置数据数量 } delay(30000);}怎么设计程序实现通过一个按键的信号将数组中存储的超标的浓度显示出来
时间: 2023-12-06 16:45:31 浏览: 164
可以在程序中加入按键的检测逻辑,当检测到按键被按下时,将数组中存储的超标浓度数据显示出来。
以下是一个简单的实现方式:
1. 添加按键检测代码
在程序中添加按键检测代码,如果检测到按键被按下,则将标志位置为1:
```
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 检测按键的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
int button_pressed = 0;
while (1) {
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == RESET) {
button_pressed = 1;
}
...
}
```
2. 显示超标浓度数据
在按键被按下时,遍历数组中存储的数据,将超标浓度数据显示在OLED屏幕上:
```
if (button_pressed) {
for (int i = 0; i < data_num; i++) {
if (data[i] > threshold) {
sprintf(display, "Data %d: %d", i, data[i]);
OLED_ShowString(0, i * 16, display, 16);
}
}
button_pressed = 0;
}
```
其中,`threshold`表示浓度阈值,`display`为OLED屏幕显示的内容。在遍历数组时,只有当数组中的数据超过阈值时,才将其显示在屏幕上。