第十一届蓝桥杯物联网试题(国赛)





国赛题目看着简单其实还是挺复杂的,所以说不能掉以轻心,目前遇到的问日主要有以下几点:

本次题主要注重的是信息交互,与A板通信的有电脑主机和B板,所以处理好这里面的交互过程很重要

国赛中避免不了会收到其他选手的信息,这个是外界干扰这个也是必须要考虑的,可以试着给传递的信息添加一个头部,处理带有特定头部的信息,当然肯定会接收一些垃圾信息,发现接收字符串不为空格要及时清空防止收到自己板子发送的消息的时候受影响

c 复制代码
void Function_ReceiveHandle(){
	if(RECEIVEMSG[0] == '#'){
    if(MEMKEFLAG == 1){
		  //OLED_ShowString(2, RECEIVEMSG);
		  MEMTEMP[0] = RECEIVEMSG[1];
			MEMTEMP[1] = RECEIVEMSG[2];
			MEMTEMP[2] = RECEIVEMSG[3];
			MEMTEMP[3] = RECEIVEMSG[4];
			MEMTEMP[4] = '\0';
	  }
		if(MEMKEFLAG == 2){
			unsigned char i = 1;
			unsigned char j = 0;
			while(RECEIVEMSG[i] != '#'){
			 MEMAXTEMP[j ++] = RECEIVEMSG[i ++];
			}
			MEMAXTEMP[j] = '\0';
			i = i + 1;
			unsigned char k = 0;
			while(RECEIVEMSG[i] != '\0'){
				MEMINTEMP[k ++] = RECEIVEMSG[i ++];
			}
			MEMINTEMP[k] = '\0';
			//OLED_ShowString(0, MEMAXTEMP);
			//OLED_ShowString(2, MEMINTEMP);
		}
		if(MEMKEFLAG == 4){
			MEMK1FLAG = RECEIVEMSG[1];
		}
		if(MEMK2FLAG == 5){
		  MEMK2FLAG = RECEIVEMSG[1];
		}
  }
	if(RECEIVEMSG[0] != '\0') for(unsigned char i = 0; i < 10; i ++) RECEIVEMSG[i] = '\0';  // 清空接收到垃圾信息
}

当然LORA通信是这样,UART通信也是如此,处理完收到的消息后就将接收字符清空,防止对后面接收产生影响如第一次接收123456,第二次接收999那么第二次会显示999456

国赛难点就在如何处理接收的长字符串,本次处理过程很是丑陋

c 复制代码
void Function_ReceiveHandle(){
	if(UARTRECEIVEMSG[0] != '\0'){  // 非空
	   if((UARTRECEIVEMSG[0] == 'M' && UARTRECEIVEMSG[1] == 'A' && UARTRECEIVEMSG[2] == 'X')
			  || (UARTRECEIVEMSG[0] == 'M' && UARTRECEIVEMSG[1] == 'I' && UARTRECEIVEMSG[2] == 'N') 
		 ){
		   if(UARTRECEIVEMSG[3] != '\0' && UARTRECEIVEMSG[3] >= '0' && UARTRECEIVEMSG[3] <= '9'){
				 TEMP = UARTRECEIVEMSG[3] - '0';
			 }
			 if(UARTRECEIVEMSG[4] != '\0'){
			    if(UARTRECEIVEMSG[4] >= '0' && UARTRECEIVEMSG[4] <= '9'){
					  TEMP = TEMP * 10 + UARTRECEIVEMSG[4] - '0';
					}else TEMP = 0;
			 }
			 //if(UARTRECEIVEMSG[5] != '\0') TEMP = 0;
		 }
		 
		 if(TEMP != 0){
			 if(UARTRECEIVEMSG[1] == 'I') MINTEMP = TEMP;
			 else MAXTEMP = TEMP;
			 Function_UartSendMsg((unsigned char* )"OK", 2);
			  
		 }else if(TEMP == 0){
			 Function_UartSendMsg((unsigned char* )"ERROR", 5);
		 }
		 TEMP = 0;
		 OLED_ShowString(2, UARTRECEIVEMSG);
		 for(unsigned char i = 0; i < 20; i ++) UARTRECEIVEMSG[i] = '\0';
	}
}

用的是if else语句很是繁琐,后面想优化优化看能不能合理利用c中的字符串处理函数

对于数据接收完整性来看LORA通信接收数据还是很完整的,毕竟有FIFO线,现在问题来到串口串口接收数据因为国赛代码量变多,在执行其他代码的时间块也会变多,所以串口单靠延时接收数据已经不能确保接收完整性了,用中断接收又不能接收不定长的数据,所以准备学习串口DMA接收数据了

相关推荐
测试199835 分钟前
Jmeter接口自动化测试:Jmeter变量的使用
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·接口测试
爱从未走散1 小时前
面试八股题
java·面试·职场和发展
桐盛科技3 小时前
能碳数据清洗用MAD算法,窗口大小和阈值怎么调?
物联网·算法·边缘计算
wuyk5557 小时前
【Socket 进阶之路】第 3 章 TCP 三次握手 & 四次挥手深度剖析|连接建立、断开、状态机、TIME_WAIT 核心工程问题
服务器·开发语言·网络·物联网·网络协议·tcp/ip
超智算科技17 小时前
2026服贸会现场直击|Net Zero Hub净零算力枢纽全球首发! 超智算受邀深度参与服贸会全球OPC共创节
网络·人工智能·科技·物联网·gpu算力
数字新视界19 小时前
动环监控系统技术深度剖析与应用探索
物联网·动环监控·机房·机房动环监控系统·动力与环境监控系统
Privasa-隐私实验室20 小时前
蓝牙-多设备调试效率翻倍:从手动折腾到全自动调试的完整落地流程
物联网·ios·智能家居·智能硬件·智能手表
悟天特斯21 小时前
AI驱动的楼宇节能:从粗放管控到精准降碳的实践路径
开发语言·人工智能·python·物联网
haon11221 天前
海外信贷的策略全生命周期:从准入到还款的本地化布防
大数据·开发语言·深度学习·面试·职场和发展·产品经理
沐欣工作室_lvyiyi1 天前
基于物联网技术的农业气象数据采集与分析平台(论文+源码)
物联网·毕业设计·软件工程·单片机设计·4g通信·电子信息工程·物联网毕业设计