前言:
应用场景 使用一主多从的时候:
- 比如按键切换主机显示
- 从机采集数据自动轮询显示
- 从机采集数据多节点监测项目主机显示
代码解析:
主机: 选择配置几个采集的从机
将2s每轮询的从机数据保存在结构体变量里面,slave用于数据的保存,以及切换轮询从机的函数参数。
主要函数代码:
int main(void)
{
SystemInit();
KEY_Init();
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
TIM3_Cap_Init(4999, 7199);
LED_Init();
USART2_Init(115200);
usart3_init(115200);
LORA_Init();
OLED_Init();
EXTIX_Init();
RTC_Init();
IWDG_Init(6,4000);
while(AUX_Check())
{
printf("LORA正忙\r\n");
delay_ms(500);
}
printf("LORA正常\r\n");
OLED_Clear();
OLED_ShowChinese(20, 20, 2, 16);
OLED_ShowChinese(40, 20, 3, 16);
OLED_ShowChinese(60, 20, 4, 16);
OLED_ShowChinese(80, 20, 5, 16);
OLED_Refresh_Gram();
while(1)
{
if(tim4_time >= 4)
{
retry_to_lora++;
memset(dat, '\0', 100);
sprintf(dat, "&&start$$");
SendData_To_Slave(slave);
All_Flag_Default();
printf("%s\r\n", dat);
tim4_time = 0;
}
if(s1 == 4)
{
printf("接收到数据\r\n");
retry_to_lora = 0;
while(USART3_RX_BUF[i] != '$'||USART3_RX_BUF[i+1] != '$')
{
if(USART3_RX_BUF[i] == '&'&&USART3_RX_BUF[i+1] == '&')
{
head = 1;
i++;
i++;
}
if(head == 1)
{
receive_data[pos] = USART3_RX_BUF[i];
printf("%d ", receive_data[pos]);
pos++;
}
i++;
}
IWDG_Feed();
GetData_From_Slave(slave);
Show_Sensor_Data(x);
All_Flag_Default();
}
}
}
项目示列:
|