一、题目
二、分析
题目要求设计一个停车计费系统,界面显示,参数设置都比较简单,本题的难点在于串口的控制整个计费系统。主要是在对于串口发送的字符串进行处理。
串口发送数据格式:停车类型:车辆编号:进入/出去时间(YYMMDDHHmmSS),基本上每一个数据都需要使用。对于要存储不同类型的数据,使用结构体来存储信息。
// 关于车信息的数据类型
typedef struct
{
uint8_t type[5];// 停车类型
uint8_t id[5]; // 停车id
uint8_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t min;
uint8_t sec;
uint8_t empty_flag; // 空位判断
}Data_Type;
Data_Type Car_Data[8];//8个车位
这里不仅将车的信息添加到结构体里面还多添加了一个变量用于判断某一个车位的使用情况。
串口发送的数据大小总共22个字节,需要对串口数据进行校验检查,先核对数据长度作为第一次检测,在串口中断里面一次接收一个字节并存储在buffer里面,然后再存储再rx_buffer数组里面。
//串口接收中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
rx_buffer[rx_index++] = buffer;
HAL_UART_Receive_IT(&huart1, &buffer, 1);
}
检测数据格式是否有误
/*检查串口信息*/
uint8_t check(uint8_t* str)
{
uint8_t i=10;// 检测时间
if(rx_index == 22)
{
//停车类型判别
if((str[0]=='V'||str[0]=='C') && str[1]=='N' && str[2]=='B' && str[3]=='R')
{
for(i=10;i='0'&&str[i]12||day>31||hour>23||min>59||sec>59)
{
seed_err();
}
检测完毕后,就需要在车库里面判断该车是否是第一次到,若是则将车入库,即将车的信息存入到Car_Data结构体。若不是,则说明车是出库,需要进行计费计算。
// 检测该车是否到车库里
substr(car_id, rx_buffer, 5, 4);//提取车的id
substr(car_type, rx_buffer, 0, 4); //提取车的类型
if(isExist(car_id)==0xFF) //车第一次来,入库
{
uint8_t pos= findLocate(); //找空的车为位
if(pos==0XFF) //车库满了
{
seed_err();
}
substr(Car_Data[pos].type, car_type,0,4);
substr(Car_Data[pos].id,car_id,0,4);
Car_Data[pos].year=year;
Car_Data[pos].month=mon;
Car_Data[pos].day=day;
Car_Data[pos].hour=hour;
Car_Data[pos].min=min;
Car_Data[pos].sec=sec;
Car_Data[pos].empty_flag=1; //置1表示该为有车了
if(Car_Data[pos].type[0]=='C')
cnbr_num++;
else
vnbr_num++;
idle_num--;
}
else //车在库里面,车出库
{
int64_t total_sec;int64_t total_hour;float price;
uint8_t locate = isExist(car_id);//获取空位置
if(strcmp(car_type,Car_Data[locate].type) != 0)
{
seed_err();
}
total_sec=(year-Car_Data[locate].year)*365*24*60*60 + (mon-Car_Data[locate].month)*30*24*60*60+\
(day-Car_Data[locate].day)*24*3600+(hour-Car_Data[locate].hour)*3600+\
(min-Car_Data[locate].min)*60 + (sec -Car_Data[locate].sec);
if(total_sec
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?