diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx
index 10bf79a..5b7904c 100644
--- a/Project/HC32F460/MDK/HC32F460.uvoptx
+++ b/Project/HC32F460/MDK/HC32F460.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 12
+ 3
@@ -228,96 +228,168 @@
14
1
- App.MotorPara.LU_HeightStress,0x0A
+ App.TD1mSDelayCnt,0x0A
15
1
- App.MotorPara.LL_HeightStress,0x0A
+ App.Status
16
1
- App.MotorPara.RU_HeightStress,0x0A
+ App.MotorPara.CaliNum,0x0A
17
1
- App.MotorPara.RL_HeightStress,0x0A
+ App.CailUp1mSCnt,0x0A
18
1
- App.TD1mSDelayCnt,0x0A
+ App.MotorPara.RestFlag,0x0A
19
1
- App.RxUart3Data.RxBuff,0x10
+ App.MotorPara.Current_height,0x0A
20
1
- App.RxUart3Data.RxLen,0x0A
+ App.HeightContRolCnt,0x0A
21
1
- App.Status
+ App.aaa,0x0A
22
1
- App.MotorPara.CaliNum,0x0A
+ App.bbb,0x0A
23
1
- App.CailUp1mSCnt,0x0A
+ App.ccc,0x0A
24
1
- Oru_diff1,0x0A
+ App.ddd,0x0A
25
1
- Orl_diff1,0x0A
+ App.ADTrack.LeftUpVPT,0x0A
26
1
- App.ADTrack.Stop_VPT,0x0A
+ App.ADTrack.LeftLowVPT,0x0A
27
1
- ru_ad[0],0x0A
+ App.ADTrack.RightUpVPT,0x0A
28
1
- App.MotorPara.RestFlag,0x0A
+ App.ADTrack.RightLowVPT,0x0A
29
1
- App.MotorPara.Current_height,0x0A
+ App.ADTrack.Stop_VPT,0x0A
30
1
- App.HeightContRolCnt,0x0A
+ App.MotorPara.Current_height,0x0A
+
+
+ 0
+ 2
+ Olu_diff1,0x0A
+
+
+ 1
+ 2
+ Oll_diff1,0x0A
+
+
+ 2
+ 2
+ Oru_diff1,0x0A
+
+
+ 3
+ 2
+ Orl_diff1,0x0A
+
+
+ 4
+ 2
+ Olu_diff2,0x0A
+
+
+ 5
+ 2
+ Oll_diff2,0x0A
+
+
+ 6
+ 2
+ Oru_diff2,0x0A
+
+
+ 7
+ 2
+ Orl_diff2,0x0A
+
+
+ 8
+ 2
+ Olu_diff3,0x0A
+
+
+ 9
+ 2
+ Oll_diff3,0x0A
+
+
+ 10
+ 2
+ Oru_diff3,0x0A
+
+
+ 11
+ 2
+ Orl_diff3,0x0A
+
+
+ 12
+ 2
+ LeftDiff,0x0A
+
+
+ 13
+ 2
+ RightDiff,0x0A
+
+
0
0
1
- 1
+ 0
0
0
0
@@ -1192,6 +1264,26 @@
+
+ BeepAndLed
+ 1
+ 0
+ 0
+ 0
+
+ 6
+ 55
+ 1
+ 0
+ 0
+ 0
+ ..\source\Module\BeepAndLed\BeepAndLed.c
+ BeepAndLed.c
+ 0
+ 0
+
+
+
Readme
0
diff --git a/Project/HC32F460/MDK/HC32F460.uvprojx b/Project/HC32F460/MDK/HC32F460.uvprojx
index b89011a..8a765fa 100644
--- a/Project/HC32F460/MDK/HC32F460.uvprojx
+++ b/Project/HC32F460/MDK/HC32F460.uvprojx
@@ -10,14 +10,14 @@
Debug
0x4
ARM-ADS
- 5060960::V5.06 update 7 (build 960)::ARMCC
- 5060960::V5.06 update 7 (build 960)::ARMCC
+ 5060960::V5.06 update 7 (build 960)::.\ARMCC
+ 5060960::V5.06 update 7 (build 960)::.\ARMCC
0
HC32F460JETA
HDSC
- HDSC.HC32F460.1.0.12
+ HDSC.HC32F460.1.0.11
https://raw.githubusercontent.com/hdscmcu/pack/master/
IRAM(0x1FFF8000,0x2F000) IRAM2(0x200F0000,0x1000) IROM(0x00000000,0x80000) IROM2(0x03000C00,0x003FC) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
@@ -341,7 +341,7 @@
__DEBUG,HC32F460,USE_DEVICE_DRIVER_LIB,JEUA
- ..\..\..\mcu\common;..\source\User\Inc;..\source\User\Src;..\..\..\driver\src;..\..\..\driver\inc;..\source\Module\CS1237;..\source\Module\dc_motor
+ ..\..\..\mcu\common;..\source\User\Inc;..\source\User\Src;..\..\..\driver\src;..\..\..\driver\inc;..\source\Module\CS1237;..\source\Module\dc_motor;..\source\Module\BeepAndLed
@@ -677,6 +677,16 @@
+
+ BeepAndLed
+
+
+ BeepAndLed.c
+ 1
+ ..\source\Module\BeepAndLed\BeepAndLed.c
+
+
+
Readme
@@ -695,7 +705,7 @@
HC32F460PETB
HDSC
- HDSC.HC32F460.1.0.12
+ HDSC.HC32F460.1.0.11
https://raw.githubusercontent.com/hdscmcu/pack/master/
IROM(0x00000000,0x80000) IROM2(0x03000C00,0x3FC) IRAM2(0x200F0000,0x1000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE
@@ -1355,6 +1365,16 @@
+
+ BeepAndLed
+
+
+ BeepAndLed.c
+ 1
+ ..\source\Module\BeepAndLed\BeepAndLed.c
+
+
+
Readme
diff --git a/Project/HC32F460/MDK/startup_hc32f460.s b/Project/HC32F460/MDK/startup_hc32f460.s
index efd8bde..33dfb6e 100644
--- a/Project/HC32F460/MDK/startup_hc32f460.s
+++ b/Project/HC32F460/MDK/startup_hc32f460.s
@@ -224,7 +224,7 @@ Reset_Handler PROC
IMPORT SystemInit
IMPORT __main
SET_SRAM3_WAIT
- LDR R0, =0x40050804
+1 LDR R0, =0x40050804
MOV R1, #0x77
STR R1, [R0]
diff --git a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c
new file mode 100644
index 0000000..089160e
--- /dev/null
+++ b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c
@@ -0,0 +1,177 @@
+#include "BeepAndLed.h"
+#include "beepAndLed.h"
+#include "main.h" // 包含BUZZER_ON/OFF, LED等宏定义
+
+// ========== 变量定义 ==========
+static BeeperCtrl_t g_beeper = {
+ .state = BEEPER_STATE_IDLE,
+ .is_active = 0,
+ .repeat = 0,
+ .repeat_done = 0,
+ .on_ms = 0,
+ .off_ms = 0
+};
+
+// 延时计数器(供滴答定时器使用)
+uint32_t BeepAndLedCollDelay1mSCnt = 0;
+
+// ========== 硬件控制函数(根据您的实际宏定义修改)==========
+static void Beeper_HW_On(void)
+{
+ BUZZER_ON(); // 请替换为您的实际宏
+ LED_GREEN_OFF(); // 请替换为您的实际宏
+ LED_RED_ON(); // 请替换为您的实际宏
+}
+
+static void Beeper_HW_Off(void)
+{
+ BUZZER_OFF(); // 请替换为您的实际宏
+ LED_GREEN_ON(); // 请替换为您的实际宏
+ LED_RED_OFF(); // 请替换为您的实际宏
+}
+
+// ========== 实现函数 ==========
+
+/**
+ * @brief 蜂鸣器初始化
+ */
+void Beeper_Init(void)
+{
+ Beeper_Stop();
+}
+
+/**
+ * @brief 开始鸣响(非阻塞)
+ * @param on_ms 鸣响时间(ms)
+ * @param off_ms 间隔时间(ms)
+ * @param repeat 重复次数(0表示无效)
+ *
+ * @example Beeper_Start(200, 100, 3); // 鸣200ms,停100ms,重复3次
+ */
+void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat)
+{
+ if (repeat == 0) return;
+
+ // 如果已经在鸣响,可以选择停止并重新开始
+ if (g_beeper.is_active) {
+ Beeper_Stop(); // 停止当前,重新开始新的
+ // return; // 或者选择忽略新请求
+ }
+
+ // 保存参数
+ g_beeper.on_ms = on_ms;
+ g_beeper.off_ms = off_ms;
+ g_beeper.repeat = repeat;
+ g_beeper.repeat_done = 0;
+ g_beeper.is_active = 1;
+
+ // 开启蜂鸣器
+ Beeper_HW_On();
+
+ // 设置延时计数器(开启状态延时)
+ BeepAndLedCollDelay1mSCnt = on_ms;
+ g_beeper.state = BEEPER_STATE_ON;
+}
+
+/**
+ * @brief 停止鸣响
+ */
+void Beeper_Stop(void)
+{
+ // 关闭硬件
+ Beeper_HW_Off();
+
+ // 重置状态机
+ g_beeper.state = BEEPER_STATE_IDLE;
+ g_beeper.is_active = 0;
+ g_beeper.repeat = 0;
+ g_beeper.repeat_done = 0;
+ BeepAndLedCollDelay1mSCnt = 0;
+}
+
+/**
+ * @brief 蜂鸣器状态机更新(放在main.c的while(1)中循环调用)
+ * @note 必须在滴答定时器更新BeepAndLedCollDelay1mSCnt后才能正确工作
+ */
+void BeeperLoopHandler(void)
+{
+ if (!g_beeper.is_active) {
+ return;
+ }
+
+ switch (g_beeper.state) {
+ case BEEPER_STATE_ON:
+ // 蜂鸣器开启状态,等待计数器归零
+ if (BeepAndLedCollDelay1mSCnt == 0) {
+ // 延时结束,关闭蜂鸣器
+ Beeper_HW_Off();
+
+ g_beeper.repeat_done++;
+
+ // 检查是否完成所有重复
+ if (g_beeper.repeat_done >= g_beeper.repeat) {
+ // 全部完成,结束
+ g_beeper.is_active = 0;
+ g_beeper.state = BEEPER_STATE_IDLE;
+ } else {
+ // 还有下次,进入等待状态
+ BeepAndLedCollDelay1mSCnt = g_beeper.off_ms;
+ g_beeper.state = BEEPER_STATE_OFF;
+ }
+ }
+ break;
+
+ case BEEPER_STATE_OFF:
+ // 蜂鸣器关闭等待状态(间隔时间)
+ if (BeepAndLedCollDelay1mSCnt == 0) {
+ // 间隔结束,开启下一次鸣响
+ Beeper_HW_On();
+
+ BeepAndLedCollDelay1mSCnt = g_beeper.on_ms;
+ g_beeper.state = BEEPER_STATE_ON;
+ }
+ break;
+
+ case BEEPER_STATE_WAIT:
+ case BEEPER_STATE_IDLE:
+ default:
+ break;
+ }
+}
+
+/**
+ * @brief 查询是否正在鸣响
+ * @return true:正在鸣响, false:空闲
+ */
+bool Beeper_IsPlaying(void)
+{
+ return g_beeper.is_active;
+}
+
+/**
+ * @brief 手动开启蜂鸣器(不计入状态机)
+ */
+void Beeper_On(void)
+{
+ Beeper_HW_On();
+}
+
+/**
+ * @brief 手动关闭蜂鸣器(不计入状态机)
+ */
+void Beeper_Off(void)
+{
+ Beeper_HW_Off();
+}
+
+/**
+ * @brief 清除延时计数器(由滴答定时器调用)
+ * @note 这个函数放在滴答定时器的1ms中断中调用
+ */
+void Beeper_ClearDelay(void)
+{
+ if (BeepAndLedCollDelay1mSCnt > 0) {
+ BeepAndLedCollDelay1mSCnt--;
+ }
+}
+
diff --git a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h
new file mode 100644
index 0000000..bd8fded
--- /dev/null
+++ b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h
@@ -0,0 +1,39 @@
+#ifndef __BEEPANDLED_H
+#define __BEEPANDLED_H
+
+#include
+#include
+#include "bsp.h"
+
+// ========== 蜂鸣器状态机状态定义 ==========
+typedef enum {
+ BEEPER_STATE_IDLE = 0, // 空闲
+ BEEPER_STATE_ON, // 蜂鸣器开启延时中
+ BEEPER_STATE_OFF, // 蜂鸣器关闭延时中
+ BEEPER_STATE_WAIT // 等待下一次鸣响
+} BeeperState_t;
+
+// ========== 蜂鸣器控制结构体 ==========
+typedef struct {
+ BeeperState_t state; // 当前状态
+ uint16_t on_ms; // 鸣响时间(ms)
+ uint16_t off_ms; // 间隔时间(ms)
+ uint8_t repeat; // 重复次数
+ uint8_t repeat_done; // 已完成次数
+ uint8_t is_active; // 是否激活
+} BeeperCtrl_t;
+
+// ========== 外部可访问变量 ==========
+extern uint32_t BeepAndLedCollDelay1mSCnt; // 延时计数器(在beepAndLed.c中定义)
+
+// ========== API函数 ==========
+void Beeper_Init(void); // 初始化
+void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat); // 开始鸣响(非阻塞)
+void Beeper_Stop(void); // 停止鸣响
+void BeeperLoopHandler(void); // 状态机更新(放在while(1)中)
+bool Beeper_IsPlaying(void); // 查询是否正在鸣响
+void Beeper_On(void); // 手动开启蜂鸣器
+void Beeper_Off(void); // 手动关闭蜂鸣器
+void Beeper_ClearDelay(void); // 清除延时计数器(供滴答定时器使用)
+#endif /* _BEEP_AND_LED_H_ */
+
diff --git a/Project/HC32F460/source/User/Inc/Algorithm.h b/Project/HC32F460/source/User/Inc/Algorithm.h
index 60dd0b4..7ab0351 100644
--- a/Project/HC32F460/source/User/Inc/Algorithm.h
+++ b/Project/HC32F460/source/User/Inc/Algorithm.h
@@ -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
diff --git a/Project/HC32F460/source/User/Inc/bsp.h b/Project/HC32F460/source/User/Inc/bsp.h
index df63b87..7de4721 100644
--- a/Project/HC32F460/source/User/Inc/bsp.h
+++ b/Project/HC32F460/source/User/Inc/bsp.h
@@ -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
diff --git a/Project/HC32F460/source/User/Inc/main.h b/Project/HC32F460/source/User/Inc/main.h
index 943c989..c8a0986 100644
--- a/Project/HC32F460/source/User/Inc/main.h
+++ b/Project/HC32F460/source/User/Inc/main.h
@@ -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;
diff --git a/Project/HC32F460/source/User/Src/Algorithm.c b/Project/HC32F460/source/User/Src/Algorithm.c
index beeb12c..281118e 100644
--- a/Project/HC32F460/source/User/Src/Algorithm.c
+++ b/Project/HC32F460/source/User/Src/Algorithm.c
@@ -4,6 +4,50 @@
#include "Algorithm.h"
#include "Debug.h"
+
+#include
+#include
+#include // 用于 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;
+}
/**
* 加强特定区域的平滑处理(使用更小的权重衰减,更平滑的效果)
*
diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c
index 42e5b57..7b22717 100644
--- a/Project/HC32F460/source/User/Src/bsp.c
+++ b/Project/HC32F460/source/User/Src/bsp.c
@@ -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)
diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c
index 590b557..3d81cc9 100644
--- a/Project/HC32F460/source/User/Src/main.c
+++ b/Project/HC32F460/source/User/Src/main.c
@@ -10,6 +10,7 @@
#include "CS1237_LEFTLOW.h"
#include "CS1237_RIGHTUP.h"
#include "CS1237_RIGHTLOW.h"
+#include "BeepAndLed.h"
#define MAIN_DBG_LOG(...) DBG_LOG(__VA_ARGS__)
#define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE)
@@ -42,7 +43,7 @@ void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD)
// }
if(App.MotorPara.CaliFlag == true)
{
- AD = AD + App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-720];
+ AD = AD + App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-725];
for(int i = OSC_CNT-1; i > 0; i--)
{
App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1];
@@ -50,10 +51,10 @@ void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD)
App.LeftUpCS1237_TrendArray[0] = AD;
}
else{
-// for(int i = OSC_CNT-1; i > 0; i--)
-// {
-// App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1];
-// }
+ for(int i = OSC_CNT-1; i > 0; i--)
+ {
+ App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1];
+ }
App.LeftUpCS1237_TrendArray[0] = AD;
}
show(1,AD);
@@ -61,14 +62,13 @@ void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD)
}
void LEFTLOW_CS1237AinADataProcessCallBack(int32_t AD)
{
-
// if(abs(AD - App.LeftLowCS1237_TrendArray[0]) > 2000000)
// {
// AD = App.LeftLowCS1237_TrendArray[0];
// }
if(App.MotorPara.CaliFlag == true)
{
- AD = AD + App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-720];
+ AD = AD + App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-725];
for(int i = OSC_CNT-1; i > 0; i--)
{
App.LeftLowCS1237_TrendArray[i] = App.LeftLowCS1237_TrendArray[i - 1];
@@ -94,7 +94,7 @@ void RIGHTUP_CS1237AinADataProcessCallBack(int32_t AD)
// }
if(App.MotorPara.CaliFlag == true)
{
- AD = AD + App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-720];
+ AD = AD + App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-725];
for(int i = OSC_CNT-1; i > 0; i--)
{
App.RightUpCS1237_TrendArray[i] = App.RightUpCS1237_TrendArray[i - 1];
@@ -120,7 +120,7 @@ void RIGHTLOW_CS1237AinADataProcessCallBack(int32_t AD)
// }
if(App.MotorPara.CaliFlag == true)
{
- AD = AD + App.MotorPara.RL_HeightStress[(App.MotorPara.Current_height)-720];
+ AD = AD + App.MotorPara.RL_HeightStress[(App.MotorPara.Current_height)-725];
for(int i = OSC_CNT-1; i > 0; i--)
{
App.RightLowCS1237_TrendArray[i] = App.RightLowCS1237_TrendArray[i - 1];
@@ -147,10 +147,6 @@ void GradeControl(ControlLevel_m level)
App.ADTrack.LeftLowVPT = 5000;
App.ADTrack.RightUpVPT = 5000;
App.ADTrack.RightLowVPT = 5000;
- App.ADTrack.LeftUpShieldVPT = SHIELD_VPT;
- App.ADTrack.LeftLowShieldVPT = SHIELD_VPT;
- App.ADTrack.RightUpShieldVPT = SHIELD_VPT;
- App.ADTrack.RightLowShieldVPT = SHIELD_VPT;
App.ADTrack.Stop_VPT = 4000;
break;}
@@ -160,24 +156,16 @@ void GradeControl(ControlLevel_m level)
App.ADTrack.LeftLowVPT = 10000;
App.ADTrack.RightUpVPT = 10000;
App.ADTrack.RightLowVPT = 10000;
- App.ADTrack.LeftUpShieldVPT = SHIELD_VPT;
- App.ADTrack.LeftLowShieldVPT = SHIELD_VPT;
- App.ADTrack.RightUpShieldVPT = SHIELD_VPT;
- App.ADTrack.RightLowShieldVPT = SHIELD_VPT;
App.ADTrack.Stop_VPT = 8000;
break;}
case LEVEL_3:{
App.ADTrack.Slope_VPT = SLOPE_VPT;
- App.ADTrack.LeftUpVPT = 20000;
- App.ADTrack.LeftLowVPT = 20000;
- App.ADTrack.RightUpVPT = 20000;
- App.ADTrack.RightLowVPT = 20000;
- App.ADTrack.LeftUpShieldVPT = SHIELD_VPT;
- App.ADTrack.LeftLowShieldVPT = SHIELD_VPT;
- App.ADTrack.RightUpShieldVPT = SHIELD_VPT;
- App.ADTrack.RightLowShieldVPT = SHIELD_VPT;
- App.ADTrack.Stop_VPT = 14000;
+ App.ADTrack.LeftUpVPT = 18000;
+ App.ADTrack.LeftLowVPT = 18000;
+ App.ADTrack.RightUpVPT = 18000;
+ App.ADTrack.RightLowVPT = 18000;
+ App.ADTrack.Stop_VPT = 15000;
break;}
case LEVEL_4:{
@@ -186,10 +174,6 @@ void GradeControl(ControlLevel_m level)
App.ADTrack.LeftLowVPT = 25000;
App.ADTrack.RightUpVPT = 25000;
App.ADTrack.RightLowVPT = 25000;
- App.ADTrack.LeftUpShieldVPT = SHIELD_VPT;
- App.ADTrack.LeftLowShieldVPT = SHIELD_VPT;
- App.ADTrack.RightUpShieldVPT = SHIELD_VPT;
- App.ADTrack.RightLowShieldVPT = SHIELD_VPT;
App.ADTrack.Stop_VPT = 19000;
break;}
@@ -199,10 +183,6 @@ void GradeControl(ControlLevel_m level)
App.ADTrack.LeftLowVPT = 30000;
App.ADTrack.RightUpVPT = 30000;
App.ADTrack.RightLowVPT = 30000;
- App.ADTrack.LeftUpShieldVPT = SHIELD_VPT;
- App.ADTrack.LeftLowShieldVPT = SHIELD_VPT;
- App.ADTrack.RightUpShieldVPT = SHIELD_VPT;
- App.ADTrack.RightLowShieldVPT = SHIELD_VPT;
App.ADTrack.Stop_VPT = 25000;
break;}
}
@@ -277,10 +257,10 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
App.RightUpCS1237_SlopeArray[0] = ru_slope;
App.RightLowCS1237_SlopeArray[0] = rl_slope;
- PeakValleyCheck lu_K = check_peaks_valleys(App.LeftUpCS1237_SlopeArray, SLOPE_CNT);
- PeakValleyCheck ll_K = check_peaks_valleys(App.LeftLowCS1237_SlopeArray, SLOPE_CNT);
- PeakValleyCheck ru_K = check_peaks_valleys(App.RightUpCS1237_SlopeArray, SLOPE_CNT);
- PeakValleyCheck rl_K = check_peaks_valleys(App.RightLowCS1237_SlopeArray, SLOPE_CNT);
+// PeakValleyCheck lu_K = check_peaks_valleys(App.LeftUpCS1237_SlopeArray, SLOPE_CNT);
+// PeakValleyCheck ll_K = check_peaks_valleys(App.LeftLowCS1237_SlopeArray, SLOPE_CNT);
+// PeakValleyCheck ru_K = check_peaks_valleys(App.RightUpCS1237_SlopeArray, SLOPE_CNT);
+// PeakValleyCheck rl_K = check_peaks_valleys(App.RightLowCS1237_SlopeArray, SLOPE_CNT);
int32_t LeftSlopeSum = abs(App.LeftUpCS1237_SlopeArray[0]) + abs(App.LeftLowCS1237_SlopeArray[0]) + abs(App.LeftUpCS1237_SlopeArray[1]) + abs(App.LeftLowCS1237_SlopeArray[1]) + abs(App.LeftUpCS1237_SlopeArray[2]) + abs(App.LeftLowCS1237_SlopeArray[2]);
int32_t RightSlopeSum = abs(App.RightUpCS1237_SlopeArray[0]) + abs(App.RightLowCS1237_SlopeArray[0]) + abs(App.RightUpCS1237_SlopeArray[1]) + abs(App.RightLowCS1237_SlopeArray[1]) + abs(App.RightUpCS1237_SlopeArray[2]) + abs(App.RightLowCS1237_SlopeArray[2]);
@@ -319,106 +299,186 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
App.LeftRunFalg = false;
App.RightRunFalg = false;
App.CentreRunFalg = false;
- if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)//判断中间操作
- && (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)
- && (ru_ad[0] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
- && (rl_ad[0] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT)
- && (lu_ad[1] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)
- && (ll_ad[1] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)
- && (ru_ad[1] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
- && (rl_ad[1] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT)
- && (lu_ad[2] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)
- && (ll_ad[2] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)
- && (ru_ad[2] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
- && (rl_ad[2] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT))
- || ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)
- && (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)
- && (ru_ad[0] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
- && (rl_ad[0] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT)
- && (lu_ad[1] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)
- && (ll_ad[1] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)
- && (ru_ad[1] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
- && (rl_ad[1] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT)
- && (lu_ad[2] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)
- && (ll_ad[2] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)
- && (ru_ad[2] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
- && (rl_ad[2] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT)))
+ if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-App.ddd)//判断中间操作
+ && (ru_ad[0] < App.ADTrack.RightUp_Org_AdZero-App.ddd)
+ && (lu_ad[1] < App.ADTrack.LeftUp_Org_AdZero-App.ddd)
+ && (ru_ad[1] < App.ADTrack.RightUp_Org_AdZero-App.ddd)
+ && (lu_ad[2] < App.ADTrack.LeftUp_Org_AdZero-App.ddd)
+ && (ru_ad[2] < App.ADTrack.RightUp_Org_AdZero-App.ddd)
+ && (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+App.ddd)//判断中间操作
+ && (rl_ad[0] > App.ADTrack.RightLow_Org_AdZero+App.ddd)
+ && (ll_ad[1] > App.ADTrack.LeftLow_Org_AdZero+App.ddd)
+ && (rl_ad[1] > App.ADTrack.RightLow_Org_AdZero+App.ddd)
+ && (ll_ad[2] > App.ADTrack.LeftLow_Org_AdZero+App.ddd)
+ && (rl_ad[2] > App.ADTrack.RightLow_Org_AdZero+App.ddd))
+ || ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+App.ddd)//判断中间操作
+ && (ru_ad[0] > App.ADTrack.RightUp_Org_AdZero+App.ddd)
+ && (lu_ad[1] > App.ADTrack.LeftUp_Org_AdZero+App.ddd)
+ && (ru_ad[1] > App.ADTrack.RightUp_Org_AdZero+App.ddd)
+ && (lu_ad[2] > App.ADTrack.LeftUp_Org_AdZero+App.ddd)
+ && (ru_ad[2] > App.ADTrack.RightUp_Org_AdZero+App.ddd)
+ && (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-App.ddd)//判断中间操作
+ && (rl_ad[0] < App.ADTrack.RightLow_Org_AdZero-App.ddd)
+ && (ll_ad[1] < App.ADTrack.LeftLow_Org_AdZero-App.ddd)
+ && (rl_ad[1] < App.ADTrack.RightLow_Org_AdZero-App.ddd)
+ && (ll_ad[2] < App.ADTrack.LeftLow_Org_AdZero-App.ddd)
+ && (rl_ad[2] < App.ADTrack.RightLow_Org_AdZero-App.ddd))
+ )
{
App.CentreRunFalg = true;
- if(LeftDiff > RightDiff)
+ App.CentCollDelay1mSCnt = CENT_TIME_MS;
+ if(abs(Oll_diff1) > abs(Orl_diff1)
+ && abs(Oll_diff2) > abs(Orl_diff2)
+ && abs(Oll_diff3) > abs(Orl_diff3)
+ && abs(Olu_diff1) > abs(Oru_diff1)
+ && abs(Olu_diff2) > abs(Oru_diff2)
+ && abs(Olu_diff3) > abs(Oru_diff3)
+ )//判断偏左还是偏右
{
App.LeftRunFalg = true;
- if((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT)
- && ((Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT))
- && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT))
+ if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//判断上下拉方向
+ && ((Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT))
+ && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff2+Orl_diff2) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT))
)
{
- if(App.MotorPara.Current_height < 1200)
+// if(((CompareAndCountAbs(ll_ad,lu_ad,App.aaa,\
+// App.ADTrack.LeftLow_Org_AdZero,App.ADTrack.LeftUp_Org_AdZero,\
+// App.ccc) \
+// + \
+// CompareAndCountAbs(rl_ad,ru_ad,App.aaa,\
+// App.ADTrack.RightLow_Org_AdZero,App.ADTrack.RightUp_Org_AdZero,\
+// App.ccc)
+// ) >= App.bbb)
+// )//判断是否不是正面压
+// if((abs(Oru_diff1) < abs(Orl_diff1)*2)//判断是否不是正面压
+// && (abs(Oru_diff2) < abs(Orl_diff2)*2)
+// && (abs(Oru_diff3) < abs(Orl_diff3)*2))
{
- BDC_UP();
- App.CaliZeroFlag = false;
- App.UpFlag = true;
- App.StopFlag = false;
- App.DownFlag = false;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ if(App.MotorPara.Current_height < 1195)
+ {
+ BDC_UP();
+ App.CaliZeroFlag = false;
+ App.UpFlag = true;
+ App.StopFlag = false;
+ App.DownFlag = false;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
}
}
- if((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT)
- && (Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT)
- && (Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)
+ else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//判断上下拉方向
+ && ((Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT))
+ && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff2+Orl_diff2) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT))
)
{
- if(App.MotorPara.Current_height > 730)
+// if(((CompareAndCountAbs(lu_ad,ll_ad,App.aaa,\
+// App.ADTrack.LeftUp_Org_AdZero,App.ADTrack.LeftLow_Org_AdZero,\
+// App.ccc) \
+// + \
+// CompareAndCountAbs(ru_ad,rl_ad,App.aaa,\
+// App.ADTrack.RightUp_Org_AdZero,App.ADTrack.RightLow_Org_AdZero,\
+// App.ccc)
+// ) >= App.bbb)
+// )//判断是否不是正面压
+// if((abs(Oru_diff1) > abs(Orl_diff1)*2)//判断是否不是正面压
+// && (abs(Oru_diff2) > abs(Orl_diff2)*2)
+// && (abs(Oru_diff3) > abs(Orl_diff3)*2))
{
- BDC_DOWN();
- App.CaliZeroFlag = false;
- App.UpFlag = false;
- App.StopFlag = false;
- App.DownFlag = true;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ if(App.MotorPara.Current_height > 725)
+ {
+ BDC_DOWN();
+ App.CaliZeroFlag = false;
+ App.UpFlag = false;
+ App.StopFlag = false;
+ App.DownFlag = true;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
}
}
}
- else if(RightDiff > LeftDiff)
+ else if(abs(Oll_diff1) < abs(Orl_diff1)
+ && abs(Oll_diff2) < abs(Orl_diff2)
+ && abs(Oll_diff3) < abs(Orl_diff3)
+ && abs(Olu_diff1) < abs(Oru_diff1)
+ && abs(Olu_diff2) < abs(Oru_diff2)
+ && abs(Olu_diff3) < abs(Oru_diff3)
+ )//判断偏左还是偏右
{
App.RightRunFalg = true;
- if((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT)
- && (Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT)
- && (Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT)
+ if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//判断上下拉方向
+ && ((Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT))
+ && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff2+Orl_diff2) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT))
)
{
- if(App.MotorPara.Current_height < 1200)
+// if(((//|arr1[i] - zero1| + offset > |arr2[i] - zero2|
+// CompareAndCountAbs(ll_ad,lu_ad,App.aaa,\
+// App.ADTrack.LeftLow_Org_AdZero,App.ADTrack.LeftUp_Org_AdZero,\
+// App.ccc) + \
+// CompareAndCountAbs(rl_ad,ru_ad,App.aaa,\
+// App.ADTrack.RightLow_Org_AdZero,App.ADTrack.RightUp_Org_AdZero,\
+// App.ccc)) >= App.bbb)
+// )//判断是否不是正面压
+// if((abs(Olu_diff1) < abs(Oll_diff1)*2)//判断是否不是正面压
+// && (abs(Olu_diff2) < abs(Oll_diff2)*2)
+// && (abs(Olu_diff3) < abs(Oll_diff3)*2))
{
- BDC_UP();
- App.CaliZeroFlag = false;
- App.UpFlag = true;
- App.StopFlag = false;
- App.DownFlag = false;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ if(App.MotorPara.Current_height < 1195)
+ {
+ BDC_UP();
+ App.CaliZeroFlag = false;
+ App.UpFlag = true;
+ App.StopFlag = false;
+ App.DownFlag = false;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
}
}
- if((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT)
- && (Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT)
- && (Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)
+ else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//判断上下拉方向
+ && ((Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT))
+ && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT))
+ && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff2+Orl_diff2) > (App.ADTrack.Stop_VPT))
+ && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT))
)
{
- if(App.MotorPara.Current_height > 730)
+// if(((//|arr1[i] - zero1| + offset > |arr2[i] - zero2|
+// CompareAndCountAbs(lu_ad,ll_ad,App.aaa,\
+// App.ADTrack.LeftUp_Org_AdZero,App.ADTrack.LeftLow_Org_AdZero,\
+// App.ccc) + \
+// CompareAndCountAbs(ru_ad,rl_ad,App.aaa,\
+// App.ADTrack.RightUp_Org_AdZero,App.ADTrack.RightLow_Org_AdZero,\
+// App.ccc)) >= App.bbb)
+// )//判断是否不是正面压
+// if((abs(Olu_diff1) > abs(Oll_diff1)*2)//判断是否不是正面压
+// && (abs(Olu_diff2) > abs(Oll_diff2)*2)
+// && (abs(Olu_diff3) > abs(Oll_diff3)*2))
{
- BDC_DOWN();
- App.CaliZeroFlag = false;
- App.UpFlag = false;
- App.StopFlag = false;
- App.DownFlag = true;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ if(App.MotorPara.Current_height > 725)
+ {
+ BDC_DOWN();
+ App.CaliZeroFlag = false;
+ App.UpFlag = false;
+ App.StopFlag = false;
+ App.DownFlag = true;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
}
}
}
}
- else if((LeftSlopeSum > RightSlopeSum && LeftDiffSum > RightDiffSum))//判断左边操作
+ else if((LeftSlopeSum > RightSlopeSum && LeftDiffSum > RightDiffSum && App.CentCollDelay1mSCnt <= 0))//判断左边操作
{
App.LeftRunFalg = true;
if((Olu_diff1 >= (App.ADTrack.LeftUpVPT*5/6)) //通过差值判断上下拉方向
@@ -428,43 +488,52 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (Oll_diff2 <= -(App.ADTrack.LeftLowVPT*5/6))
&& (Oll_diff3 <= -(App.ADTrack.LeftLowVPT*5/6)))
{
- if((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ if(((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT)//判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
- && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT))
+ || ((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT)//判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT))
+ )
{
- if(App.CaliZeroFlag == true)//判断是否校零
+// if(App.CaliZeroFlag == true)//判断是否校零
{
- if((abs(Oll_diff1) > abs(Orl_diff1) + App.ADTrack.LeftLowShieldVPT)//判断是否不是侧面推拉
- && (abs(Olu_diff1) > abs(Orl_diff1) + App.ADTrack.LeftUpShieldVPT)
- && (abs(Oll_diff1) > abs(Oru_diff1) + App.ADTrack.LeftLowShieldVPT)
- && (abs(Olu_diff1) > abs(Oru_diff1) + App.ADTrack.LeftUpShieldVPT))
+ if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//判断是否不是侧面推拉
+ && (abs(Olu_diff2) > abs(Oru_diff2) * SHIELD_VPT)
+ && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT)
+ && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT)
+ && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT)
+ && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT)
+ )
{
- if(App.MotorPara.Current_height > 730)
+ if(App.MotorPara.Current_height < 1195)
{
- BDC_DOWN();
- App.CaliZeroFlag = false;
- App.UpFlag = false;
- App.DownFlag = true;
- App.StopFlag = false;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
- }
- }
- }
- else
- {
- if(App.MotorPara.Current_height > 730)
- {
- BDC_DOWN();
+ BDC_UP();
App.CaliZeroFlag = false;
- App.UpFlag = false;
- App.DownFlag = true;
+ App.UpFlag = true;
+ App.DownFlag = false;
App.StopFlag = false;
App.EmeFlag = false;
App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
}
}
}
@@ -477,49 +546,58 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (Oll_diff3 >= (App.ADTrack.LeftLowVPT*5/6)))
)
{
- if((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ if(((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
- && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
+ && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT)
+ &&(App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ ||((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT)
+ &&(App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ )
{
// if(App.CaliZeroFlag == true)//判断是否校零
{
- if((abs(Oll_diff1) > abs(Orl_diff1) + App.ADTrack.LeftLowShieldVPT)//判断是否不是侧面推拉
- && (abs(Olu_diff1) > abs(Orl_diff1) + App.ADTrack.LeftUpShieldVPT)
- && (abs(Oll_diff1) > abs(Oru_diff1) + App.ADTrack.LeftLowShieldVPT)
- && (abs(Olu_diff1) > abs(Oru_diff1) + App.ADTrack.LeftUpShieldVPT))
+ if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//判断是否不是侧面推拉
+ && (abs(Olu_diff2) > abs(Oru_diff2) * SHIELD_VPT)
+ && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT)
+ && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT)
+ && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT)
+ && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT)
+ )
{
- if(App.MotorPara.Current_height < 1200)
+ if(App.MotorPara.Current_height > 725)
{
- BDC_UP();
- App.CaliZeroFlag = false;
- App.UpFlag = true;
- App.DownFlag = false;
- App.StopFlag = false;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ BDC_DOWN();
+ App.CaliZeroFlag = false;
+ App.UpFlag = false;
+ App.DownFlag = true;
+ App.StopFlag = false;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
}
}
}
-// else
-// {
-// if(App.MotorPara.Current_height < 1190)
-// {
-// BDC_UP();
-// App.CaliZeroFlag = false;
-// App.UpFlag = true;
-// App.DownFlag = false;
-// App.StopFlag = false;
-// App.EmeFlag = false;
-// App.RunCollDelay1mSCnt = RUN_TIME_MS;
-// }
-// }
}
}
}
- else if(LeftSlopeSum < RightSlopeSum && LeftDiffSum < RightDiffSum)//判断右边操作
+ else if(LeftSlopeSum < RightSlopeSum && LeftDiffSum < RightDiffSum && App.CentCollDelay1mSCnt <= 0)//判断右边操作
{
App.RightRunFalg = true;
if((Oru_diff1 >= (App.ADTrack.RightUpVPT*5/6)) //通过差值判断上下拉方向
@@ -529,21 +607,100 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (Orl_diff2 <= -(App.ADTrack.RightLowVPT*5/6))
&& (Orl_diff3 <= -(App.ADTrack.RightLowVPT*5/6)))
{
- if((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ if(((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
- && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
+ || ((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
+ )
{
// if(App.CaliZeroFlag == true)//判断是否校零
{
- if((abs(Orl_diff1) > abs(Oll_diff1) + App.ADTrack.RightLowShieldVPT)//判断是否不是侧面推拉
- && (abs(Oru_diff1) > abs(Oll_diff1) + App.ADTrack.RightUpShieldVPT)
- && (abs(Orl_diff1) > abs(Olu_diff1) + App.ADTrack.RightLowShieldVPT)
- && (abs(Oru_diff1) > abs(Olu_diff1) + App.ADTrack.RightUpShieldVPT))
+ if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//判断是否不是侧面推拉
+ && (abs(Oru_diff2) > abs(Olu_diff2) * SHIELD_VPT)
+ && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT)
+ && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT)
+ && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT)
+ && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT)
+ )
{
- if(App.MotorPara.Current_height > 730)
+ if(App.MotorPara.Current_height < 1195)
+ {
+ BDC_UP();
+ App.CaliZeroFlag = false;
+ App.UpFlag = true;
+ App.StopFlag = false;
+ App.DownFlag = false;
+ App.EmeFlag = false;
+ App.RunCollDelay1mSCnt = RUN_TIME_MS;
+ }
+ }
+ }
+ }
+ }
+ else if((Oru_diff1 <= -(App.ADTrack.RightUpVPT*5/6)) //通过差值判断上下拉方向
+ && (Oru_diff2 <= -(App.ADTrack.RightUpVPT*5/6))
+ && (Oru_diff3 <= -(App.ADTrack.RightUpVPT*5/6))
+ && (Orl_diff1 >= (App.ADTrack.RightLowVPT*5/6))
+ && (Orl_diff2 >= (App.ADTrack.RightLowVPT*5/6))
+ && (Orl_diff3 >= (App.ADTrack.RightLowVPT*5/6)))
+ {
+ if(((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ || ((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
+ && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
+ && (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
+ && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
+ )
+ {
+// if(App.CaliZeroFlag == true)//判断是否校零
+ {
+ if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//判断是否不是侧面推拉
+ && (abs(Oru_diff2) > abs(Olu_diff2) * SHIELD_VPT)
+ && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT)
+ && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT)
+ && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT)
+ && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT)
+ )
+ {
+ if(App.MotorPara.Current_height > 725)
{
BDC_DOWN();
App.CaliZeroFlag = false;
@@ -555,67 +712,6 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
}
}
}
-// else
-// {
-// if(App.MotorPara.Current_height > 730)
-// {
-// BDC_DOWN();
-// App.CaliZeroFlag = false;
-// App.DownFlag = true;
-// App.StopFlag = false;
-// App.UpFlag = false;
-// App.EmeFlag = false;
-// App.RunCollDelay1mSCnt = RUN_TIME_MS;
-// }
-// }
- }
- }
- else if((Oru_diff1 <= -(App.ADTrack.RightUpVPT*5/6)) //通过差值判断上下拉方向
- && (Oru_diff2 <= -(App.ADTrack.RightUpVPT*5/6))
- && (Oru_diff3 <= -(App.ADTrack.RightUpVPT*5/6))
- && (Orl_diff1 >= (App.ADTrack.RightLowVPT*5/6))
- && (Orl_diff2 >= (App.ADTrack.RightLowVPT*5/6))
- && (Orl_diff3 >= (App.ADTrack.RightLowVPT*5/6)))
- {
- if((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
- && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
- && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
- && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
- && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
- && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT))
- {
-// if(App.CaliZeroFlag == true)//判断是否校零
- {
- if((abs(Oru_diff1) > abs(Olu_diff1) + App.ADTrack.RightUpShieldVPT)//判断是否不是侧面推拉
- && (abs(Oru_diff1) > abs(Oll_diff1) + App.ADTrack.RightUpShieldVPT)
- && (abs(Orl_diff1) > abs(Olu_diff1) + App.ADTrack.RightLowShieldVPT)
- && (abs(Oru_diff1) > abs(Olu_diff1) + App.ADTrack.RightUpShieldVPT))
- {
- if(App.MotorPara.Current_height < 1200)
- {
- BDC_UP();
- App.CaliZeroFlag = false;
- App.UpFlag = true;
- App.StopFlag = false;
- App.DownFlag = false;
- App.EmeFlag = false;
- App.RunCollDelay1mSCnt = RUN_TIME_MS;
- }
- }
- }
-// else
-// {
-// if(App.MotorPara.Current_height < 1190)
-// {
-// BDC_UP();
-// App.CaliZeroFlag = false;
-// App.UpFlag = true;
-// App.StopFlag = false;
-// App.DownFlag = false;
-// App.EmeFlag = false;
-// App.RunCollDelay1mSCnt = RUN_TIME_MS;
-// }
-// }
}
}
}
@@ -624,24 +720,26 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
{
if(App.LeftRunFalg == true)
{
- if(((App.CentreRunFalg == false )
- && (Olu_diff1 < App.ADTrack.Stop_VPT)
- && (Oll_diff1 > -App.ADTrack.Stop_VPT)
- && (Olu_diff2 < App.ADTrack.Stop_VPT)
- && (Oll_diff2 > -App.ADTrack.Stop_VPT)
- && (Olu_diff3 < App.ADTrack.Stop_VPT)
- && (Oll_diff3 > -App.ADTrack.Stop_VPT)
- && (Olu_diff4 < App.ADTrack.Stop_VPT)
- && (Oll_diff4 > -App.ADTrack.Stop_VPT)
- && (Olu_diff5 < App.ADTrack.Stop_VPT)
- && (Oll_diff5 > -App.ADTrack.Stop_VPT)
- && (Olu_diff6 < App.ADTrack.Stop_VPT)
- && (Oll_diff6 > -App.ADTrack.Stop_VPT))
- || ((App.CentreRunFalg == true)
- && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
- )
+ if(((App.CentreRunFalg == false)
+ && (Olu_diff1 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff1 < App.ADTrack.Stop_VPT)
+ && (Olu_diff2 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff2 < App.ADTrack.Stop_VPT)
+ && (Olu_diff3 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff3 < App.ADTrack.Stop_VPT)
+ && (Olu_diff4 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff4 < App.ADTrack.Stop_VPT)
+ && (Olu_diff5 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff5 < App.ADTrack.Stop_VPT)
+ && (Olu_diff6 > -App.ADTrack.Stop_VPT)
+ && (Oll_diff6 < App.ADTrack.Stop_VPT))
+ || ((App.CentreRunFalg == true)
+ && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
+ || App.MotorPara.Current_height >= 1195
+ || App.MotorPara.Current_height <= 725
+ )
{
BDC_STOP();
App.StopFlag = true;
@@ -668,23 +766,25 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
else if(App.RightRunFalg == true)
{
if(((App.CentreRunFalg == false )
- && (Oru_diff1 < App.ADTrack.Stop_VPT)
- && (Orl_diff1 > -App.ADTrack.Stop_VPT)
- && (Oru_diff2 < App.ADTrack.Stop_VPT)
- && (Orl_diff2 > -App.ADTrack.Stop_VPT)
- && (Oru_diff3 < App.ADTrack.Stop_VPT)
- && (Orl_diff3 > -App.ADTrack.Stop_VPT)
- && (Oru_diff4 < App.ADTrack.Stop_VPT)
- && (Orl_diff4 > -App.ADTrack.Stop_VPT)
- && (Oru_diff5 < App.ADTrack.Stop_VPT)
- && (Orl_diff5 > -App.ADTrack.Stop_VPT)
- && (Oru_diff6 < App.ADTrack.Stop_VPT)
- && (Orl_diff6 > -App.ADTrack.Stop_VPT))
- || ((App.CentreRunFalg == true)
- && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
- )
+ && (Oru_diff1 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff1 < App.ADTrack.Stop_VPT)
+ && (Oru_diff2 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff2 < App.ADTrack.Stop_VPT)
+ && (Oru_diff3 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff3 < App.ADTrack.Stop_VPT)
+ && (Oru_diff4 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff4 < App.ADTrack.Stop_VPT)
+ && (Oru_diff5 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff5 < App.ADTrack.Stop_VPT)
+ && (Oru_diff6 > -App.ADTrack.Stop_VPT)
+ && (Orl_diff6 < App.ADTrack.Stop_VPT))
+ || ((App.CentreRunFalg == true)
+ && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
+ || App.MotorPara.Current_height >= 1195
+ || App.MotorPara.Current_height <= 725
+ )
{
BDC_STOP();
App.StopFlag = true;
@@ -714,23 +814,25 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
if(App.LeftRunFalg == true)
{
if(((App.CentreRunFalg == false)
- && (Olu_diff1 > -App.ADTrack.Stop_VPT)
- && (Oll_diff1 < App.ADTrack.Stop_VPT)
- && (Olu_diff2 > -App.ADTrack.Stop_VPT)
- && (Oll_diff2 < App.ADTrack.Stop_VPT)
- && (Olu_diff3 > -App.ADTrack.Stop_VPT)
- && (Oll_diff3 < App.ADTrack.Stop_VPT)
- && (Olu_diff4 > -App.ADTrack.Stop_VPT)
- && (Oll_diff4 < App.ADTrack.Stop_VPT)
- && (Olu_diff5 > -App.ADTrack.Stop_VPT)
- && (Oll_diff5 < App.ADTrack.Stop_VPT)
- && (Olu_diff6 > -App.ADTrack.Stop_VPT)
- && (Oll_diff6 < App.ADTrack.Stop_VPT))
- || ((App.CentreRunFalg == true)
- && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
- )
+ && (Olu_diff1 < App.ADTrack.Stop_VPT)
+ && (Oll_diff1 > -App.ADTrack.Stop_VPT)
+ && (Olu_diff2 < App.ADTrack.Stop_VPT)
+ && (Oll_diff2 > -App.ADTrack.Stop_VPT)
+ && (Olu_diff3 < App.ADTrack.Stop_VPT)
+ && (Oll_diff3 > -App.ADTrack.Stop_VPT)
+ && (Olu_diff4 < App.ADTrack.Stop_VPT)
+ && (Oll_diff4 > -App.ADTrack.Stop_VPT)
+ && (Olu_diff5 < App.ADTrack.Stop_VPT)
+ && (Oll_diff5 > -App.ADTrack.Stop_VPT)
+ && (Olu_diff6 < App.ADTrack.Stop_VPT)
+ && (Oll_diff6 > -App.ADTrack.Stop_VPT))
+ || ((App.CentreRunFalg == true)
+ && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
+ || App.MotorPara.Current_height >= 1195
+ || App.MotorPara.Current_height <= 725
+ )
{
BDC_STOP();
App.StopFlag = true;
@@ -756,24 +858,26 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
}
else if(App.RightRunFalg == true)
{
- if(((App.CentreRunFalg == false )
- && (Oru_diff1 > -App.ADTrack.Stop_VPT)
- && (Orl_diff1 < App.ADTrack.Stop_VPT)
- && (Oru_diff2 > -App.ADTrack.Stop_VPT)
- && (Orl_diff2 < App.ADTrack.Stop_VPT)
- && (Oru_diff3 > -App.ADTrack.Stop_VPT)
- && (Orl_diff3 < App.ADTrack.Stop_VPT)
- && (Oru_diff4 > -App.ADTrack.Stop_VPT)
- && (Orl_diff4 < App.ADTrack.Stop_VPT)
- && (Oru_diff5 > -App.ADTrack.Stop_VPT)
- && (Orl_diff5 < App.ADTrack.Stop_VPT)
- && (Oru_diff6 > -App.ADTrack.Stop_VPT)
- && (Orl_diff6 < App.ADTrack.Stop_VPT))
- || ((App.CentreRunFalg == true)
- && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
- && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
- )
+ if(((App.CentreRunFalg == false )
+ && (Oru_diff1 < App.ADTrack.Stop_VPT)
+ && (Orl_diff1 > -App.ADTrack.Stop_VPT)
+ && (Oru_diff2 < App.ADTrack.Stop_VPT)
+ && (Orl_diff2 > -App.ADTrack.Stop_VPT)
+ && (Oru_diff3 < App.ADTrack.Stop_VPT)
+ && (Orl_diff3 > -App.ADTrack.Stop_VPT)
+ && (Oru_diff4 < App.ADTrack.Stop_VPT)
+ && (Orl_diff4 > -App.ADTrack.Stop_VPT)
+ && (Oru_diff5 < App.ADTrack.Stop_VPT)
+ && (Orl_diff5 > -App.ADTrack.Stop_VPT)
+ && (Oru_diff6 < App.ADTrack.Stop_VPT)
+ && (Orl_diff6 > -App.ADTrack.Stop_VPT))
+ || ((App.CentreRunFalg == true)
+ && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
+ && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
+ || App.MotorPara.Current_height >= 1195
+ || App.MotorPara.Current_height <= 725
+ )
{
BDC_STOP();
App.StopFlag = true;
@@ -835,8 +939,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
{
if(App.StopFlag == true
&& App.StopCollDelay1mSCnt <= 0
- && App.MotorPara.Current_height <= 1200
- && App.MotorPara.Current_height >= 722){
+ && App.MotorPara.Current_height <= 1195
+ && App.MotorPara.Current_height >= 725){
App.ADTrack.LeftUp_Org_AdZero = lu_ad[0];
App.ADTrack.LeftLow_Org_AdZero = ll_ad[0];
App.ADTrack.RightUp_Org_AdZero = ru_ad[0];
@@ -878,13 +982,10 @@ static void AppInit(void)
RIGHTLOW_CS1237_Init();
BDC_STOP();
-
-// App.Status = APP_STATUS_WAIT;
+ LED_RED_OFF();
+ LED_GREEN_ON();
App.Status = APP_STATUS_MOTOR_INIT;
App.MotorPara.InitialFlag = false;
-// App.TD1mSDelayCnt = 1000;
-// App.Status = APP_STATUS_UP1;
-// App.TD1mSDelayCnt = TRAVEL_TIME_MS;
App.RStatus = READ_STATUS_START;
GradeControl(App.Para.Layout.ControlLevel);//等级控制
@@ -1004,6 +1105,9 @@ static void AppLoopHandler(void)
break;}
case APP_STATUS_MOTOR_INIT:{
+ Beeper_Start(200,0,1);
+ LED_RED_ON();
+ LED_GREEN_OFF();
BDC_UP();
Ddl_Delay1ms(1000);
BDC_DOWN();
@@ -1017,6 +1121,8 @@ static void AppLoopHandler(void)
if(App.TD1mSDelayCnt <= 0)
{
BDC_STOP();
+ LED_RED_OFF();
+ LED_GREEN_ON();
App.StopFlag = true;
App.DownFlag = false;
App.UpFlag = false;
@@ -1025,6 +1131,8 @@ static void AppLoopHandler(void)
if(App.MotorPara.Current_height <= 722 && App.MotorPara.Current_height >= 720)
{
BDC_STOP();
+ LED_RED_OFF();
+ LED_GREEN_ON();
App.StopFlag = true;
App.DownFlag = false;
App.UpFlag = false;
@@ -1054,6 +1162,8 @@ static void AppLoopHandler(void)
App.StopFlag = false;
App.UpFlag = true;
BDC_UP();
+ LED_RED_ON();
+ LED_GREEN_OFF();
App.CailUp1mSCnt = 0;
App.MotorPara.LoopOne = false;
}
@@ -1076,6 +1186,8 @@ static void AppLoopHandler(void)
else if(App.MotorPara.CaliNum >= 480 && App.MotorPara.LoopOne == true)
{
BDC_STOP();
+ LED_RED_OFF();
+ LED_GREEN_ON();
App.StopFlag = true;
App.DownFlag = false;
App.UpFlag = false;
@@ -1114,6 +1226,8 @@ static void AppLoopHandler(void)
else if(App.MotorPara.CaliNum >= 480 && App.MotorPara.LoopOne == true)
{
BDC_STOP();
+ LED_RED_OFF();
+ LED_GREEN_ON();
App.StopFlag = true;
App.DownFlag = false;
App.UpFlag = false;
@@ -1137,6 +1251,7 @@ static void AppLoopHandler(void)
case APP_STATUS_WAIT_STEADY:{
if(App.TD1mSDelayCnt <= 0)
{
+ Beeper_Start(200,200,2);
App.SideFlag = false;
App.CaliZeroFlag = false;
App.UpFlag = false;
@@ -1149,22 +1264,26 @@ static void AppLoopHandler(void)
break;}
case APP_STATUS_HEIGHT_CONTROL:{
- if(App.MotorPara.Current_height < 722
+ if(App.MotorPara.Current_height <= 725
&& App.MotorPara.RestFlag == false
- && App.HeightContRolCnt >= 500)
+ && App.HeightContRolCnt >= 500
+ && GET_BIT0_DOUT() == 1
+ && GET_BIT1_DOUT() == 1)
{
App.HeightContRolCnt = 0;
BDC_UP();
Ddl_Delay1ms(500);
BDC_STOP();
}
- else if(App.MotorPara.Current_height > 1200
+ else if(App.MotorPara.Current_height >= 1195
&& App.MotorPara.RestFlag == false
- && App.HeightContRolCnt >= 500)
+ && App.HeightContRolCnt >= 500
+ && GET_BIT0_DOUT() == 1
+ && GET_BIT1_DOUT() == 1)
{
App.HeightContRolCnt = 0;
BDC_DOWN();
- Ddl_Delay1ms(400);
+ Ddl_Delay1ms(500);
BDC_STOP();
}
break;}
@@ -1188,9 +1307,11 @@ static void App1mSRoutine(void)
App.EmergencyDelay1mSCnt--;
if(App.SlopeCollDelay1mSCnt > 0)
App.SlopeCollDelay1mSCnt--;
+ if(App.CentCollDelay1mSCnt > 0)
+ App.CentCollDelay1mSCnt--;
if(App.MotorPara.InitialFlag == true)
App.CailUp1mSCnt++;
- if((App.MotorPara.Current_height < 722 || App.MotorPara.Current_height > 1200))
+ if((App.MotorPara.Current_height < 725 || App.MotorPara.Current_height > 1195))
{
App.HeightContRolCnt++;
}
@@ -1211,6 +1332,12 @@ int main(void)
{
BSP_Init();
AppInit();
+
+ App.aaa = CENTRE_FRONT_CNT;
+ App.bbb = CENTRE_FRONT_SUM;
+ App.ccc = CENTRE_FRONT_VPT;
+ App.ddd = CENTRE_VPT;
+
while(1) {
#if(USE_WDT == 1)
FeedDogHandler();
@@ -1230,6 +1357,7 @@ int main(void)
#endif
ReadLoopHandler();
DcmotorLoopHandler();
+ BeeperLoopHandler();
AdcLoopHander();
AppLoopHandler();
}
@@ -1249,6 +1377,7 @@ void SysTick_IrqHandler(void)
LEFTLOW_CS12371mSRoutine();
RIGHTUP_CS12371mSRoutine();
RIGHTLOW_CS12371mSRoutine();
+ Beeper_ClearDelay();
Dcmotor1msRoutine();
Adc1mSRoutine();
}
@@ -1319,7 +1448,7 @@ void Usart3RxIrqCallback(void)
{
App.MotorPara.Current_height = h;
}
- if(App.MotorPara.InitialFlag == true && h >=720 && h <= 1208)
+ if(App.MotorPara.InitialFlag == true && h >=720 && h <= 1200)
{//缓存每个高度点对于零点应力的差值,对不同高度点的应力进行补偿
if(App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-720] == 0
|| App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-720] == 0