蓝桥杯嵌入式15届国赛

前言

以下内容仅代表个人观点,基于有限的经验和认知整理而成。每个人的视角和背景不同,观点难免存在差异或局限。若存在疏漏或不足之处,欢迎指正与探讨,但请多一份包容。希望通过这些思考,能激发更多有益的交流。
——
观点无高下,讨论有温度

题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两个难点:

我认为15届国赛的有两个难点:

1、接收不定长数据判断有无对错,并从中提取想要的数据。
2、怎么处理运动行经问题。

对于第一点:

首先了解strncpy函数:
char *strncpy(char *dest, const char *src, size_t n);
​dest​:指向目标数组的指针,用于存储复制内容。
​src​:指向要复制的源字符串。
​n​:最多复制的字符数(包括终止空字符'\0',但可能不会自动添加)。

然后定义一个字符串数组用来接收暂时存储串口接收到的数据

char input[50]; // 输入缓冲区

然后写
在这里插入图片描述
这样就可以去掉前后的括号后就只剩数字和’,’了,就只需要处理这个两种情况就好了。
对于后续字符串分割有两个方法:

  1. 第一种方法就是strtok_r(分割函数)和atoi()–将字符串转换成整数
  • strtok_r()为分割函数
  • atoi()为将字符串转换成整数
关于strtok_r函数:

功能:线程安全的字符串分割函数,用于将字符串按指定分隔符拆分成多个子串。

参数:

char *str:要分割的字符串(第一次调用时传入),后续调用传入NULL

const char *delim:分隔符字符串

char **saveptr:用于保存分割位置的指针,保证线程安全

例如:

第一次调用传入待分割字符串和分隔符 */
token = strtok_r(input_d, ",", &clcptr); 
然后后续继续调用传入的是NULL
token = strtok_r(NULL, ",", &clcptr);	

完整伪代码:

token = strtok_r();
while (...)
{
x=atoi(token); 
token = strtok_r;		
y = atoi(token);
// 继续获取下一组坐标的X坐标
token = strtok_r;	
}
  1. 第二种方法就是sscanf(推荐)
    在这里插入图片描述
    Sscanf就当成拆分函数来用,和sprintf相反。

Sscanf可以有返回值,也可以没有。简单来说返回值就是成功分解了多少个

然后定义一个变量num用来接收sscanf的返回值,判断input的格式是否出现问题,有无多个连逗号,格式是否(%d,%d,%s)来排布

例:**num = sscanf(input, "%d,%d,%s", &xx, &yy, input);**
举例子
(48,92,90,100,200,3,20,60)经过去前后括号得:48,92,90,100,200,3,20,60
执行sscanf后
num=3
xx=48
yy=92
input=90,100,200,3,20,60

然后while循环一次提取一组坐标,然后用一个数组input存储剩下的字符。
如果没有错误的,以此循环,等到一组组坐标。
到现在,串口不定长和坐标的处理问题就解决了。

对于第二点:

我个人的想法是:用分速度来行进。运用了高中的物理有一点点数学知识。
在这里插入图片描述
斜边的长度用L表示,
所以我们可以通过算两个点的坐标来算x轴和y轴方向的速度。

Vx =Vcos;Vy =Vsin;
Sin=yy/L;
Cos=xx/L;
然后就可以分别X和Y算行进的速度了,
注意:行进方向可以向前也可以向后,所以这个xx和yy需要有正负,不能用无符号整型。
然后可以把更行速度放在定时器中断里面,确保实时更行数据。
写作思路:
1、用当前位置加上速度;
2、算完当前速度后,算距离下一个坐标点的距离。
3、计算一次运动的距离,并判断当前坐标点离下一个坐标点的距离是否小于一次的运动距离,若小于则可以判断达到此坐标。
4、到达此坐标后,删除该坐标点,并让后面的坐标向前移动一位。
5、记录好当前坐标和下一个坐标后,就重复上述步骤,就可以轻松完成全部任务啦。
希望我的写作思路对你有用。

满分工程

4t满分工程,思路简单,代码量少
请添加图片描述

总结

把这两个难点解决了,其他的就很好解决啦。
此文仅代表个人愚见。

第15届国赛满分工程链接–两种办法均有
对应b站视频

其他届的工程及解析

第8届省赛工程及解析
第12届省赛满分工程

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐