Gimbal_DataDeal.c 4.1 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include "JZsdkLib.h"
#include "BaseConfig.h"

#include "JZsdk_uart/UartConnection/UartConnection.h"
#include "JZsdk_uart/JZsdk_Uart_Input.h"

#include "JZsdk_TaskManagement/TaskManagement.h"
#include "Gimbal_SpecialUart/Gimbal_SpecialUart.h"

#if WIRINGPI_STATUS == VERSION_SWITCH_ON
	#include <wiringPi.h>
#endif


/******************
 * 

 * 
 * **************/
T_JZsdkReturnCode Gimbal_DataDeal_init()
{    
//由于150s 150t 开发时还没有帧协议,所以是一个独特的控制类型
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T

    int Uart_fd = 0;

    //1、串口初始化
    Uart_fd = UartConnection_UartEnabled(GIMBAL_UART_NUM, GIMBAL_UART_BITRATE);

    //2、串口接收初始化
    Gimbal_SpecialUart_UartReceive_Init(Uart_fd);

//不需特地初始化
#elif DEVICE_VERSION == JZ_H1T || DEVICE_VERSION == JZ_C1
    // 不用去特地初始化t60的云台
#elif DEVICE_VERSION == JZ_H10 || DEVICE_VERSION == JZ_H10T || DEVICE_VERSION == JZ_U3 \
    || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D || DEVICE_VERSION == TF_A1
    //设置0度
    
#else
    return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}

T_JZsdkReturnCode Gimbal_DataDeal_SetRealAngle(int angle)
{
    int angle_PWM = 0;

#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
    //调整为PWM值 1000~2000

    //完整计算公式
    //angle_PWM= PITCH_PWM_MIN +(-angle)*(PITCH_PWM_MAX-PITCH_PWM_MIN)/(abs(MAX_PITCH)+abs(MIN_PITCH));
    //简化为
    angle_PWM= PITCH_PWM_MIN +(angle)*(PITCH_PWM_MAX-PITCH_PWM_MIN)/MIN_PITCH;

	unsigned char send_angle[]={0x5a,0x00,0x00,0xa5};
	send_angle[1]=(unsigned char )(angle_PWM);
	send_angle[2]=(unsigned char )(angle_PWM>>8);
	
    Gimbal_SpecialUart_UartSend(send_angle,   4);
#elif DEVICE_VERSION == JZ_H10
    int base = 200;
    //完整计算公式
    //angle_PWM = base + angle*195/((abs(MAX_PITCH)+abs(MIN_PITCH)))

    //简化为
    angle_PWM = base + angle*195/MIN_PITCH;

    //上调15度
    //angle_PWM = 200 -angle*195/900 -150*195/900; //上调15度
#if WIRINGPI_STATUS == VERSION_SWITCH_ON
    pwmWrite(18,angle_PWM);
#endif

#elif DEVICE_VERSION == JZ_H10T
    //因为PWM写的时候是按90度写的,所以分母是900,不是设定的600
    PWM_num = ( angle * (V3S_H10T_angle_PWM_MAX-V3S_H10T_angle_PWM_MIN) /900 ) + V3S_H10T_angle_PWM_MAX;

    if (PWM_num > PITCH_PWM_MAX)
    {
        PWM_num = PITCH_PWM_MAX;
    }
    if (PWM_num < PITCH_PWM_MIN)
    {
        PWM_num = PITCH_PWM_MIN;
    }

    Ircut_PWM_control(PWM_num);

#elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D \
    || DEVICE_VERSION == TF_A1

    //发送角度给串口2
    JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_2,  angle);

#elif DEVICE_VERSION == JZ_H1T
    
    //发送角度给串口1
    JZsdk_Uart_Send_SetGimbalPitch(UART_DEV_1,  angle);

#else
    return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif
    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}


T_JZsdkReturnCode Gimbal_DataDeal_SetPitchRange(int Range)
{
    if (Range != 0xFF && Range != 0x00)
    {
        return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
    }
    
#if DEVICE_VERSION == JZ_H150S || DEVICE_VERSION == JZ_H150T
    uint8_t set_min_motor[]={0x4A,0x00,0x00,0xA4};
    uint8_t set_max_motor[]={0x6A,0x00,0x00,0xA6};

    if (Range == 0xFF)
    {
        Gimbal_SpecialUart_UartSend(set_max_motor,   4);
    }
    else if (Range == 0x00)
    {
        Gimbal_SpecialUart_UartSend(set_min_motor,   4);
    }
#elif DEVICE_VERSION == JZ_H10

    //还没想好怎么弄

#elif DEVICE_VERSION == JZ_H10T

    //还没想好怎么弄

#elif DEVICE_VERSION == JZ_U3 || DEVICE_VERSION == JZ_U3S || DEVICE_VERSION == JZ_U3D \
    || DEVICE_VERSION == TF_A1

    if (Range == 0xFF)
    {
        JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
    }
    else if (Range == 0x00)
    {
        JZsdk_Uart_Send_SetGimbalRange(UART_DEV_2, 0, Range);
    }

#elif DEVICE_VERSION == JZ_H1T

    //好像没必要弄

#else
    return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
#endif

    return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}