内容介绍
内容介绍
一、任务要求
使用板卡上的触摸按键,实现点按和左右滑动,实现传感器选择和切换,并将数据发送到上位机,功能选择的可视化也在上位机完成
二、设计思路
触摸按键基于Qvar技术,单片机获取电荷变化数据,通过串口上传到Simulink上位机。在Simulink上位机中实现数据的滤波、点按和左右滑动的识别、将需要发送的传感器数据类型发送给单片机,单片机进行数据的切换。其中软件流程图如下
三、程序实现
1、单片机功能:电荷变化数据获取、各类传感器数据的获取(加速度、温度、湿度、气压)、串口收发
(1)各类传感器数据的获取
通过STM32CubeMX软件配置NUCLEO-G0B1RE+IKS4A1
for(i = 0; i < IKS4A1_MOTION_INSTANCES_NBR; i++)
{
if(MotionCapabilities[i].Acc)
{
Accelero_Sensor_Handler(i);
}
if(MotionCapabilities[i].Gyro)
{
Gyro_Sensor_Handler(i);
}
if(MotionCapabilities[i].Magneto)
{
Magneto_Sensor_Handler(i);
}
}
for(i = 0; i < IKS4A1_ENV_INSTANCES_NBR; i++)
{
if(EnvCapabilities[i].Humidity)
{
Hum_Sensor_Handler(i);
}
if(EnvCapabilities[i].Temperature)
{
Temp_Sensor_Handler(i);
}
if(EnvCapabilities[i].Pressure)
{
Press_Sensor_Handler(i);
}
}
(2)电荷变化数据的获取
根据电气原理图,将触摸板正确连接到X-NUCLEO-IKS4A1开发板上,通过以下代码获取电荷变化数据
LSM6DSV16X_QVAR_GetData(MotionCompObj[IKS4A1_LSM6DSV16X_0], &QvarValue);
(3)串口收发
发送功能在STM32CubeMx生成的代码中已具备,不再赘述,重点介绍串口接收
在STM32CubeMx软件打开串口中断
开启中断,需要在串口主函数while之前、接收回调函数中增加如下代码
HAL_UART_Receive_IT(&huart2[11] ,data_buff,1);
根据上位机发送数据,将指定的数据发送给上位机
IKS4A1_MOTION_SENSOR_Axes_t acceleration;
if(MotionCapabilities[1].Acc)
{
if (IKS4A1_MOTION_SENSOR_GetAxes(1, MOTION_ACCELERO, &acceleration))
{
snprintf(dataOut, MAX_BUF_SIZE, "\r\nACC[%d]: Error\r\n", (int)1);
}
else
{
snprintf(dataOut, MAX_BUF_SIZE, "\r\nACC_X[%d]: %d, ACC_Y[%d]: %d, ACC_Z[%d]: %d\r\n", (int)1,
(int)acceleration.x, (int)1, (int)acceleration.y, (int)1, (int)acceleration.z);
}
}
displayFloatToInt_t out_value;//环境传感器输出数据
float temperature;//温度
float pressure;//气压
float humidity;//湿度
if(EnvCapabilities[0].Temperature && data_buff[0]==10)
{
if (IKS4A1_ENV_SENSOR_GetValue(0, ENV_TEMPERATURE, &temperature))
{
snprintf(dataOut, MAX_BUF_SIZE, "\r\nTemp[%d]: Error\r\n", (int)0);
}
else
{
floatToInt(temperature, &out_value, 2);
snprintf(dataOut, MAX_BUF_SIZE, "\r\nTemp[%d]: %c%d.%02d degC\r\n", (int)0, ((out_value.sign) ? '-' : '+'), (int)out_value.out_int,
(int)out_value.out_dec);
}
}
if(EnvCapabilities[1].Pressure && data_buff[0]==11)
{
if (IKS4A1_ENV_SENSOR_GetValue(1, ENV_PRESSURE, &pressure))
{
snprintf(dataOut, MAX_BUF_SIZE, "\r\nPress[%d]: Error\r\n", (int)1);
}
else
{
floatToInt(pressure, &out_value, 2);
snprintf(dataOut, MAX_BUF_SIZE, "\r\nPress[%d]: %d.%02d hPa\r\n", (int)1, (int)out_value.out_int,
(int)out_value.out_dec);
}
}
if(EnvCapabilities[2].Humidity && data_buff[0]==12)
{
if (IKS4A1_ENV_SENSOR_GetValue(2, ENV_HUMIDITY, &humidity))
{
snprintf(dataOut, MAX_BUF_SIZE, "\r\nHum[%d]: Error\r\n", (int)2);
}
else
{
floatToInt(humidity, &out_value, 2);
snprintf(dataOut, MAX_BUF_SIZE, "\r\nHum[%d]: %d.%02d %%\r\n", (int)2, (int)out_value.out_int,
(int)out_value.out_dec);
}
}
switch(data_buff[0])
{
case 0:
printf("#%06d%06d$\r\n",QvarValue,acceleration.x*100);
break;
case 1:
printf("#%06d%06d$\r\n",QvarValue,acceleration.y*100);
break;
case 2:
printf("#%06d%06d$\r\n",QvarValue,acceleration.z*100);
break;
case 10:
case 11:
case 12:
printf("#%06d%06d$\r\n",QvarValue,out_value.sign?-(out_value.out_int*100+out_value.out_dec):out_value.out_int*100+out_value.out_dec);//上传数�??
break;
default:
printf("#%06d%06d$\r\n",QvarValue,0);
}
2、上位机功能:点按和左右滑动的识别、发送数据类型、数据展示
(1)点按和左右滑动的识别
基于滑动平均滤波算法,对电荷变化数据进行滤波处理。根据点按、左后滑动时,电荷变化的不同特点,通过状态机对识别算法进行设计
(2)发送数据类型处理逻辑如下
(3)数据实时展示如下
四、工程文件
链接:https://pan.baidu.com/s/1s5bQ3PIrNlTu_lyDYsj67A
提取码:8now
五、建议
希望增加无线通信、视觉识别相关的活动
附件下载
G0B1(6.30).rar
团队介绍
啥都干点的测控工程师
评论
0 / 100
查看更多
猜你喜欢
Funpack3-3 基于X-NUCLEO-IKS4A1的传感器数据可视化该项目使用了NUCLEO-G0B1RE、X-NUCLEO-IKS4A1,实现了传感器数据可视化的设计,它的主要功能为:通过STM32将传感器数据读出,并通过串口发送到上位机,上位机接收传感器数据并显示。。
C6C6C6
57
Funpack3-3-基于X-NUCLEO-IKS4A1实现传感器选择和切换及功能的可视化该项目使用了X-NUCLEO-IKS4A1 和NUCLEO-G0B1RE,实现了传感器选择和切换及功能的可视化的设计,它的主要功能为:基于X-NUCLEO-IKS4A1,使用板卡上的触摸按键,实现点按和左右滑动,实现传感器选择和切换,并将数据发送到上位机,功能选择的可视化也在上位机完成 如:能够选择加速度传感器,开启X轴数据发送,然后关闭加速度显示,选择温度。
taotie
31
Funpack3-3 基于X-NUCLEO-IKS4A1 的数据显示及切换该项目使用了X-NUCLEO-IKS4A1扩展版和NUCLEO-G0B1RE开发板,C语言,实现了传感器数据显示切换的设计,它的主要功能为:读取开发板上自带的传感器,将其发送给上位机,显示出来。
反正都一样
32