下半区传感器接线方式修改,屏幕安装点过低或过高,按压上半区或下半区屏幕会造成误触发,未能得到解决

This commit is contained in:
2026-07-09 18:52:49 +08:00
parent 7f68ef4677
commit 59d5c62b12
11 changed files with 910 additions and 353 deletions
+2 -3
View File
@@ -51,9 +51,8 @@ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen);
bool isAllZero(uint8_t *arr, int size);
int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, int maxIterations, int verbose);
int finalCheck(int arr[], int size, int threshold, int verbose);
int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize,
int enhanceStart, int enhanceEnd,
double enhanceFactor, int verbose);
int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize,int enhanceStart, int enhanceEnd, double enhanceFactor, int verbose);
int CompareAndCountAbs(const int32_t *arr1, const int32_t *arr2, uint16_t length,int32_t zero1, int32_t zero2, int32_t offset);
#endif
+20
View File
@@ -213,6 +213,24 @@
#define CLR_TWIN_BIT1() PORT_ResetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//拉低
#define GET_BIT1_DOUT() PORT_GetBit(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)
//< BUZZER
#define BUZZER_PORTx (PortB)
#define BUZZER_PINx (Pin15)
#define BUZZER_ON() PORT_SetBits(BUZZER_PORTx, BUZZER_PINx)//拉高
#define BUZZER_OFF() PORT_ResetBits(BUZZER_PORTx, BUZZER_PINx)//拉低
//< LED
#define LED_GREEN_PORTx (PortA)
#define LED_GREEN_PINx (Pin08)
#define LED_GREEN_ON() PORT_SetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//拉高
#define LED_GREEN_OFF() PORT_ResetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//拉低
#define LED_RED_PORTx (PortA)
#define LED_RED_PINx (Pin09)
#define LED_RED_ON() PORT_SetBits(LED_RED_PORTx, LED_RED_PINx)//拉高
#define LED_RED_OFF() PORT_ResetBits(LED_RED_PORTx, LED_RED_PINx)//拉低
typedef struct {
int32_t ControlLevel;//控制等级
int32_t DBGWaveOut;//调试波形输出
@@ -289,6 +307,8 @@ void ExtInt04IntEnable(void);
void ExtInt04IntDisable(void);
void ExtInt06IntEnable(void);
void ExtInt06IntDisable(void);
void Bit0AndBit1_OUT(void);
void Bit0AndBit1_IN(void);
#endif
+17 -11
View File
@@ -11,26 +11,31 @@
#define SLOPE_CNT 20
#define SLOPE_VPT 1000
#define PRESS_VPT 3
#define PRESS_VPT 10
#define FOLLOW_VPT 10
#define SHIELD_VPT 5000
#define SHIELD_VPT 2
#define EME_STOP_VPT 4000
#define CENTRE_VPT 2000
#define CENTRE_FRONT_CNT 0
#define CENTRE_FRONT_SUM 0
#define CENTRE_FRONT_VPT 0
#define CENTRE_VPT 0
#define STOP_TIME_MS 500
#define CENT_TIME_MS 200
#define RUN_TIME_MS 0
#define EME_START_MS 0
#define EME_STOP_MS 2000
#define SLOPE_START_MS 3000
#define TRAVEL_TIME_MS 30000
#define TRAVEL_TIME_MS 50000
#define PEAK 1200 //1200mm
#define VALLEY 720 //720mm
#define BDC_STOP() (SET_TWIN_BIT0(),SET_TWIN_BIT1())
#define BDC_UP() (SET_TWIN_BIT0(),CLR_TWIN_BIT1())
#define BDC_DOWN() (SET_TWIN_BIT1(),CLR_TWIN_BIT0())
#define BDC_DOWN() (SET_TWIN_BIT0(),CLR_TWIN_BIT1())
#define BDC_UP() (SET_TWIN_BIT1(),CLR_TWIN_BIT0())
//#define BDC_STOP() Motor_Control(MOTOR_CMD_STOP)
//#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD)
@@ -55,11 +60,6 @@ typedef struct{
int32_t RightUpVPT;//右上设备阈值
int32_t RightLowVPT;//右下设备阈值
int32_t LeftUpShieldVPT; //左上屏蔽阈值
int32_t LeftLowShieldVPT; //左下屏蔽阈值
int32_t RightUpShieldVPT; //右上屏蔽阈值
int32_t RightLowShieldVPT; //右下屏蔽阈值
int32_t LeftUp_Org_AdZero;//左上设备原始AD零点
int32_t LeftLow_Org_AdZero;//左下设备原始AD零点
int32_t RightUp_Org_AdZero;//右上设备原始AD零点
@@ -135,6 +135,7 @@ typedef struct {
uint32_t Uart3RxTimeOut1mSCnt;
uint32_t StopCollDelay1mSCnt;
uint32_t RunCollDelay1mSCnt;
uint32_t CentCollDelay1mSCnt;
uint32_t EmergencyDelay1mSCnt;
uint32_t SlopeCollDelay1mSCnt;
uint32_t CailUp1mSCnt;
@@ -166,6 +167,11 @@ typedef struct {
int32_t RightUpCS1237_SlopeArray[SLOPE_CNT];
int32_t RightLowCS1237_SlopeArray[SLOPE_CNT];
int32_t aaa;
int32_t bbb;
int32_t ccc;
int32_t ddd;
bool WaitFlag;
}AppDetect_t;
extern AppDetect_t App;
@@ -4,6 +4,50 @@
#include "Algorithm.h"
#include "Debug.h"
#include <stdint.h>
#include <stdbool.h>
#include <stdlib.h> // 用于 abs() 函数
/**
* @brief 比较两个数组对应位置的绝对值差值,统计满足条件的个数
*
* 判断条件:|arr1[i] - zero1| + offset > |arr2[i] - zero2|
*
* @param arr1 数组1指针
* @param arr2 数组2指针
* @param length 要比较的数组长度(截取值)
* @param zero1 数组1的零点值
* @param zero2 数组2的零点值
* @param offset 补偿值
* @return int 满足条件的个数
*
* @note 如果 length 为0,返回0
* @note 如果 arr1 或 arr2 为 NULL,返回0
*/
int CompareAndCountAbs(const int32_t *arr1, const int32_t *arr2, uint16_t length,
int32_t zero1, int32_t zero2, int32_t offset)
{
// 参数校验
if (arr1 == NULL || arr2 == NULL || length == 0) {
return 0;
}
int count = 0;
for (uint16_t i = 0; i < length; i++) {
// 计算绝对值
int32_t abs1 = abs(arr1[i] - zero1);
int32_t abs2 = abs(arr2[i] - zero2);
// 判断:|arr1[i] - zero1| + offset > |arr2[i] - zero2|
if (abs1 + offset > abs2) {
count++;
}
}
return count;
}
/**
* 加强特定区域的平滑处理(使用更小的权重衰减,更平滑的效果)
*
+31
View File
@@ -517,13 +517,43 @@ static void GPIO_Config(void)
PORT_Init(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx, &stcPortInit);
PORT_Init(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx, &stcPortInit);
PORT_Init(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx, &stcPortInit);
PORT_Init(BUZZER_PORTx, BUZZER_PINx, &stcPortInit);
PORT_Init(LED_GREEN_PORTx, LED_GREEN_PINx, &stcPortInit);
PORT_Init(LED_RED_PORTx, LED_RED_PINx, &stcPortInit);
LED_GREEN_OFF();
LED_RED_OFF();
stcPortInit.enPullUp = Enable;//上拉
}
void Bit0AndBit1_OUT(void)
{
stc_port_init_t stcPortInit;
MEM_ZERO_STRUCT(stcPortInit);
/********************************** GPIO输出 ****************************************/
stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enPinOType = Pin_OType_Cmos;
stcPortInit.enPinDrv = Pin_Drv_H;
stcPortInit.enPullUp = Disable;//无上拉
stcPortInit.enPullUp = Enable;//上拉
PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit);
PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit);
SET_TWIN_BIT0();
SET_TWIN_BIT1();
}
void Bit0AndBit1_IN(void)
{
stc_port_init_t stcPortInit;
MEM_ZERO_STRUCT(stcPortInit);
/********************************** GPIO输入 ****************************************/
stcPortInit.enPinMode = Pin_Mode_In;
stcPortInit.enPullUp = Disable;//无上拉
PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit);
PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit);
}
/*********************************左上传感器
*******************************************************************************
** \brief ExtInt00 callback function
@@ -1429,6 +1459,7 @@ void BSP_Init(void)
ExtiCh01_Init();
ExtiCh06_Init();
ExtiCh04_Init();
Bit0AndBit1_OUT();
DbgUart_Config(700000);
#if(USE_USART3 == 1)
File diff suppressed because it is too large Load Diff