176 lines
3.8 KiB
C
176 lines
3.8 KiB
C
|
#include <includes.h>
|
|||
|
#include "device_photoelectricswitch.h"
|
|||
|
#include "ptz_header_file.h"
|
|||
|
#include "ptz_type_select.h"
|
|||
|
#include "ptz_struct.h"
|
|||
|
static BSP_OS_SEM ptz_ps_read_mutex;
|
|||
|
|
|||
|
#ifdef PTZ_PHOTOELECTRIC_SWITCH
|
|||
|
float ps_k = 0;
|
|||
|
#endif
|
|||
|
|
|||
|
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9>翪<EFBFBD><E7BFAA>
|
|||
|
///
|
|||
|
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9>翪<EFBFBD><E7BFAA>
|
|||
|
/// @param <20><>
|
|||
|
/// @return <20><>
|
|||
|
/// @par <20><EFBFBD><DEB8><EFBFBD>־
|
|||
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2017-09-14<31><34><EFBFBD><EFBFBD>
|
|||
|
/// LH<4C><EFBFBD><DEB8><EFBFBD>2022-05-31
|
|||
|
void ps_init()
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
rcu_periph_clock_enable(RCU_GPIOB);
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ:PB0-SW1<57><31>PB1-SW2<57><32>PB2-SW3
|
|||
|
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);
|
|||
|
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
|
|||
|
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_2);
|
|||
|
|
|||
|
BSP_OS_SemCreate(&ptz_ps_read_mutex,1u,"ptz_ps_read_mutex");
|
|||
|
}
|
|||
|
|
|||
|
/// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>翪<EFBFBD>ط<EFBFBD><D8B7>صĵ<D8B5>ƽ
|
|||
|
#define PS_NUM 20
|
|||
|
#define PS_RATIO 0.9
|
|||
|
char ps_read(char flag)
|
|||
|
{
|
|||
|
int i = 0;
|
|||
|
int j = 0;
|
|||
|
|
|||
|
BSP_OS_SemWait(&ptz_ps_read_mutex, 0u);
|
|||
|
char temp;
|
|||
|
switch(flag)
|
|||
|
{
|
|||
|
case PS_VERT_SW1:
|
|||
|
j = 0;
|
|||
|
for(i = 0; i < PS_NUM; i++)//<2F>Դ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>翪<EFBFBD><E7BFAA><EFBFBD>˲<EFBFBD>
|
|||
|
{
|
|||
|
asm("nop");
|
|||
|
temp = PS_VERT_SW1_READ;//<2F><><EFBFBD>翪<EFBFBD><E7BFAA>1
|
|||
|
j = j + temp;
|
|||
|
}
|
|||
|
|
|||
|
ps_k = ((float)(PS_NUM - j))/ PS_NUM;//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(ps_k > PS_RATIO)
|
|||
|
{
|
|||
|
temp = PS_LOW;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp = PS_HIGH;
|
|||
|
}
|
|||
|
//temp = PS_VERT_SW1_READ;
|
|||
|
BSP_OS_SemPost(&ptz_ps_read_mutex);
|
|||
|
return temp;
|
|||
|
break;
|
|||
|
|
|||
|
case PS_VERT_SW2:
|
|||
|
j = 0;
|
|||
|
for(i = 0; i < PS_NUM; i++)//<2F>Դ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>翪<EFBFBD><E7BFAA><EFBFBD>˲<EFBFBD>
|
|||
|
{
|
|||
|
asm("nop");
|
|||
|
temp = PS_VERT_SW2_READ;//<2F><><EFBFBD>翪<EFBFBD><E7BFAA>2
|
|||
|
j = j + temp;
|
|||
|
}
|
|||
|
|
|||
|
ps_k = ((float)(PS_NUM - j))/ PS_NUM;//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(ps_k > PS_RATIO)
|
|||
|
{
|
|||
|
temp = PS_LOW;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp = PS_HIGH;
|
|||
|
}
|
|||
|
//temp = PS_VERT_SW2_READ;
|
|||
|
BSP_OS_SemPost(&ptz_ps_read_mutex);
|
|||
|
return temp;
|
|||
|
break;
|
|||
|
|
|||
|
case PS_HORI_SW3:
|
|||
|
j = 0;
|
|||
|
for(i = 0; i < PS_NUM; i++)//<2F><>ˮƽ<CBAE><C6BD><EFBFBD>翪<EFBFBD><E7BFAA><EFBFBD>˲<EFBFBD>
|
|||
|
{
|
|||
|
asm("nop");
|
|||
|
temp = PS_HORI_SW3_READ;//<2F><><EFBFBD>翪<EFBFBD><E7BFAA>3
|
|||
|
j = j + temp;
|
|||
|
}
|
|||
|
|
|||
|
ps_k = ((float)(PS_NUM - j))/ PS_NUM;//<2F><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
if(ps_k > PS_RATIO)
|
|||
|
{
|
|||
|
temp = PS_LOW;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp = PS_HIGH;
|
|||
|
}
|
|||
|
//temp = PS_HORI_SW3_READ;
|
|||
|
BSP_OS_SemPost(&ptz_ps_read_mutex);
|
|||
|
return temp;
|
|||
|
break;
|
|||
|
}
|
|||
|
BSP_OS_SemPost(&ptz_ps_read_mutex);
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
static void ptz_ps_read_task()
|
|||
|
{
|
|||
|
while(1)
|
|||
|
{
|
|||
|
g_ptz.hori_ps_sw3_state = ps_read(PS_HORI_SW3);
|
|||
|
g_ptz.vert_ps_sw1_state = ps_read(PS_VERT_SW1);
|
|||
|
g_ptz.vert_ps_sw2_state = ps_read(PS_VERT_SW2);
|
|||
|
OSTimeDlyHMSM(0u, 0u, 0u, 1u);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
static OS_STK task_ps_read_stk[TASK_PS_STK_SIZE];
|
|||
|
static void creat_task_ps_read(void)
|
|||
|
{
|
|||
|
CPU_INT08U task_err;
|
|||
|
CPU_INT08U name_err;
|
|||
|
|
|||
|
task_err = OSTaskCreateExt((void (*)(void *)) ptz_ps_read_task,
|
|||
|
(void *) 0,
|
|||
|
(OS_STK *)&task_ps_read_stk[TASK_PS_STK_SIZE - 1],
|
|||
|
(INT8U ) TASK_PS_PRIO,
|
|||
|
(INT16U ) TASK_PS_PRIO,
|
|||
|
(OS_STK *)&task_ps_read_stk[0],
|
|||
|
(INT32U ) TASK_PS_STK_SIZE,
|
|||
|
(void *) 0,
|
|||
|
(INT16U )(OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR));
|
|||
|
#if (OS_TASK_NAME_EN > 0)
|
|||
|
OSTaskNameSet(TASK_PS_PRIO, "ptz_ps_read_task", &name_err);
|
|||
|
#endif
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
void task_ps_read_init(void)
|
|||
|
{
|
|||
|
ps_init();
|
|||
|
creat_task_ps_read();
|
|||
|
}
|
|||
|
|
|||
|
void init_photoelectric_switch_module()
|
|||
|
{
|
|||
|
task_ps_read_init();
|
|||
|
|
|||
|
g_ptz.vert_ps_sw1_down_fall = 0;
|
|||
|
g_ptz.vert_ps_sw1_up_rise = 0;
|
|||
|
g_ptz.vert_ps_sw2_up_fall = 0;
|
|||
|
g_ptz.vert_ps_sw2_down_rise = 0;
|
|||
|
g_ptz.hori_ps_sw3_right_fall = 0;
|
|||
|
g_ptz.hori_ps_sw3_right_rise = 0;
|
|||
|
g_ptz.hori_ps_sw3_left_fall = 0;
|
|||
|
g_ptz.hori_ps_sw3_left_rise = 0;
|
|||
|
}
|
|||
|
|