Browse Source

添加编码器状态指示灯功能,由于只有一个led,有个编码器待机翻转引脚没写

external_Interrupt
tianjialong 2 years ago
parent
commit
5eed3eecfa
  1. 12
      MDK-ARM/LWIP.uvguix.29643
  2. 69
      usersrc/encoder.c
  3. 10
      usersrc/encoder.h
  4. 32
      usersrc/udpclient.c

12
MDK-ARM/LWIP.uvguix.29643

@ -93,8 +93,8 @@
<flags>0</flags>
<showCmd>1</showCmd>
<MinPosition>
<xPos>-1</xPos>
<yPos>-1</yPos>
<xPos>-32000</xPos>
<yPos>-32000</yPos>
</MinPosition>
<MaxPosition>
<xPos>-1</xPos>
@ -1822,7 +1822,7 @@
<Name>Build</Name>
<Buttons>
<Len>968</Len>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000002001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044C57495096000000000000000100044C574950000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
<Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000044C57495096000000000000000100044C574950000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data>
</Buttons>
<OriginalItems>
<Len>583</Len>
@ -3661,8 +3661,8 @@
<Doc>
<Name>..\usersrc\encoder.c</Name>
<ColumnNumber>0</ColumnNumber>
<TopLine>55</TopLine>
<CurrentLine>77</CurrentLine>
<TopLine>1</TopLine>
<CurrentLine>9</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>
<PaneID>0</PaneID>
@ -3742,7 +3742,7 @@
<Doc>
<Name>..\usersrc\udpclient.c</Name>
<ColumnNumber>0</ColumnNumber>
<TopLine>270</TopLine>
<TopLine>271</TopLine>
<CurrentLine>293</CurrentLine>
<Folding>1</Folding>
<ContractedFolders></ContractedFolders>

69
usersrc/encoder.c

@ -3,6 +3,11 @@
#include <stdio.h>
#include "zport.h"
static encoder_light_state_t camera_encoder_state = STANDBY;
static encoder_light_state_t driven_encoder_gear_state = STANDBY;
static uint32_t camera_encoder_lastprocess = 0;
static uint32_t driven_encoder_gear_lastprocess = 0;
static encoder_t m_uarts[] = {
{&camera_encoder, TIM_CHANNEL_1 | TIM_CHANNEL_2}, //
{&driven_encoder_gear, TIM_CHANNEL_1 | TIM_CHANNEL_2} //
@ -68,10 +73,66 @@ bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value)
void encoder_light_schedule(void)
{
static uint32_t lastprocess = 0;
if (sys_haspassedms(lastprocess) > 500)
if (camera_encoder_state == STANDBY)
{
if (sys_haspassedms(camera_encoder_lastprocess) > 500)
{
camera_encoder_lastprocess = HAL_GetTick();
HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
}
}
if (driven_encoder_gear_state == STANDBY)
{
if (sys_haspassedms(camera_encoder_lastprocess) > 500)
{
driven_encoder_gear_lastprocess = HAL_GetTick();
// HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
}
}
}
void encoder_set_state(encoder_usage_t encoder, encoder_light_state_t state)
{
/* 主动上报的时候常亮,接收到触发指令直接翻转led,待机中0.5s周期闪烁 */
if (encoder == CAMERA_ENCODER)
{
camera_encoder_state = state;
if (state == STANDBY)
{
camera_encoder_lastprocess = HAL_GetTick();
HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
}
else if (state == WORKING)
{
/* 如果工作状态的时候触发了genlock等,灯的状态不应该变成待机状态,只有同为待机的时候闪烁,上层写的时候需要加判断 */
HAL_GPIO_WritePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin, GPIO_PIN_RESET);
}
}
else if (encoder == DRIVEN_ENCODER_GEAR)
{
driven_encoder_gear_state = state;
if (state == STANDBY)
{
driven_encoder_gear_lastprocess = HAL_GetTick();
// HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
}
else if (state == WORKING)
{
// HAL_GPIO_WritePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin, GPIO_PIN_SET);
}
}
}
encoder_light_state_t encoder_get_state(encoder_usage_t encoder)
{
if (encoder == CAMERA_ENCODER)
{
return camera_encoder_state;
}
else if (encoder == DRIVEN_ENCODER_GEAR)
{
lastprocess = HAL_GetTick();
HAL_GPIO_TogglePin(ENCODER_LIGHT_GPIO_Port, ENCODER_LIGHT_Pin);
return driven_encoder_gear_state;
}
return ENCODER_STATE_NUMBER_AND_ERR_STATE;
}

10
usersrc/encoder.h

@ -6,8 +6,16 @@ typedef enum
{
CAMERA_ENCODER = 0X00,
DRIVEN_ENCODER_GEAR = 0X01,
ENCODER_NUMBER,
} encoder_usage_t;
typedef enum
{
STANDBY = 0X00,
WORKING = 0X01,
ENCODER_STATE_NUMBER_AND_ERR_STATE,
} encoder_light_state_t;
typedef struct
{
TIM_HandleTypeDef *tim_handler;
@ -20,3 +28,5 @@ bool encoder_clear_counter(encoder_usage_t encoder);
void encoder_all_clear_counter(void);
bool encoder_read_with_encoder(encoder_usage_t encoder, uint32_t *encoder_value);
void encoder_light_schedule(void);
void encoder_set_state(encoder_usage_t encoder, encoder_light_state_t state);
encoder_light_state_t encoder_get_state(encoder_usage_t encoder);

32
usersrc/udpclient.c

@ -100,6 +100,20 @@ static void udp_client_active_response(void)
}
}
static void udp_client_all_encoder_light_set(encoder_light_state_t state)
{
if (state == STANDBY)
{
encoder_set_state(CAMERA_ENCODER, STANDBY);
encoder_set_state(DRIVEN_ENCODER_GEAR, STANDBY);
}
else if (state == WORKING)
{
encoder_set_state(CAMERA_ENCODER, WORKING);
encoder_set_state(DRIVEN_ENCODER_GEAR, WORKING);
}
}
void udp_client_recv_data_dump(int recv_datalen)
{
/* debug使用 */
@ -219,12 +233,25 @@ void udp_client_parse(int recv_datalen)
cmd_checksum(get_encoder_cmd);
udp_client_create_get_encoder_response(get_encoder_cmd, recv_datalen);
if (!udp_client_active_flag)
{
udp_client_all_encoder_light_set(STANDBY);
}
break;
case CMD_SET_ACTIVE: /* 设置主动上报 */
cmd_checksum(rxcmd);
if ((rxcmd->data == AVTIVE_DISABLE) || (rxcmd->data == ACTIVE_ENABLE))
{
udp_client_active_flag = rxcmd->data;
if (udp_client_active_flag)
{
udp_client_all_encoder_light_set(WORKING);
}
else
{
udp_client_all_encoder_light_set(STANDBY);
}
}
udp_client_create_basic_response(rxcmd, recv_datalen);
break;
@ -280,6 +307,11 @@ void udp_client_genlock_and_esync_active(void)
active_report_data_structer_update();
udp_client_active_response();
if (!udp_client_active_flag)
{
udp_client_all_encoder_light_set(STANDBY);
}
active_report_data_structer.index += 1;
active_report_data_structer.time_stamp_s = 0;
genlock_and_esync_active_flag = false;

Loading…
Cancel
Save