/* 乐迪遥控器 */ /* Includes ----------------------------------------------------------------- */ #include "LD_remote.h" #include #include "bsp_usart.h" #include "error_detect.h" #include "LD_remote.h" //static void sbus_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl); //RC_ctrl_t rc_ctrl; //static uint8_t sbus_rx_buf[2][RC_FRAME_LENGTH]; //uint8_t remote_ready = 0;//Ò£¿ØÆ÷×¼±¸Íê³É //void remote_control_init(void) //{ // RC_init(sbus_rx_buf[0], sbus_rx_buf[1], RC_FRAME_LENGTH); //} // int map_int(int x, int in_min, int in_max, int out_min, int out_max) //{ // return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; //} ////´®¿ÚÖÐ¶Ï //void USART3_IRQHandler(void) //{ // //have received data ??? // if(huart3.Instance->SR & UART_FLAG_RXNE) // { // __HAL_UART_CLEAR_FEFLAG(&huart3); // } // else if(USART3->SR & UART_FLAG_IDLE) // { // // static uint16_t this_time_rx_len = 0; // __HAL_UART_CLEAR_PEFLAG(&huart3); // // if( (hdma_usart3_rx.Instance->CR & DMA_SxCR_CT) == RESET) // { // //current memory buffer used is memory0 // // //disable dma to change dma register // __HAL_DMA_DISABLE(&hdma_usart3_rx); // // //get received data length, length = set_data_length - remain_length // this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; // //reset set_data_length // hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; // // //change memory0 to memory1 // hdma_usart3_rx.Instance->CR |= DMA_SxCR_CT; // // //enable dma // __HAL_DMA_ENABLE(&hdma_usart3_rx); // // //1 frame length is correct data // if(this_time_rx_len == RC_FRAME_LENGTH) // { // sbus_to_rc(sbus_rx_buf[0], &rc_ctrl); // } // } // else // { // __HAL_DMA_DISABLE(&hdma_usart3_rx); // // this_time_rx_len = SBUS_RX_BUF_NUM - hdma_usart3_rx.Instance->NDTR; // // hdma_usart3_rx.Instance->NDTR = SBUS_RX_BUF_NUM; // // //change memory1 to memory0 // DMA1_Stream1->CR &= ~(DMA_SxCR_CT); // // __HAL_DMA_ENABLE(&hdma_usart3_rx); // // if(this_time_rx_len == RC_FRAME_LENGTH) // { // sbus_to_rc(sbus_rx_buf[1], &rc_ctrl); // } // } // } //} //static void sbus_to_rc(volatile const uint8_t *sbus_buf, RC_ctrl_t *rc_ctrl) //{ // if (sbus_buf == NULL || rc_ctrl == NULL) // { // return; // } // // rc_ctrl->ch[0] = (sbus_buf[1] | (sbus_buf[2] << 8)) & 0x07ff; //!< Channel 0 // rc_ctrl->ch[1] = ((sbus_buf[2] >> 3) | (sbus_buf[3] << 5)) & 0x07ff; //!< Channel 1 // rc_ctrl->ch[2] = ((sbus_buf[3] >> 6) | (sbus_buf[4] << 2) | //!< Channel 2 // (sbus_buf[5] << 10)) &0x07ff; // rc_ctrl->ch[3] = ((sbus_buf[5] >> 1) | (sbus_buf[6] << 7)) & 0x07ff; //!< Channel 3 // // rc_ctrl->sw[0] = ((int16_t)sbus_buf[6] >> 4 | ((int16_t)sbus_buf[7] << 4 )) & 0x07FF; //!< Switch left // rc_ctrl->sw[1] = ((int16_t)sbus_buf[7] >> 7 | ((int16_t)sbus_buf[8] << 1 ) | (int16_t)sbus_buf[9] << 9 ) & 0x07FF; //!< Switch right // rc_ctrl->sw[2] = ((int16_t)sbus_buf[9] >> 2 | ((int16_t)sbus_buf[10] << 6 )) & 0x07FF;; //!< Mouse X axis // rc_ctrl->sw[3] = ((int16_t)sbus_buf[10] >> 5 | ((int16_t)sbus_buf[11] << 3 )) & 0x07FF; //!< Mouse Y axis // rc_ctrl->sw[4] = ((int16_t)sbus_buf[12] << 0 | ((int16_t)sbus_buf[13] << 8 )) & 0x07FF; //!< Mouse Z axis // rc_ctrl->sw[5] = ((int16_t)sbus_buf[13] >> 3 | ((int16_t)sbus_buf[14] << 5 )) & 0x07FF; //!< Mouse Left Is Press ? // rc_ctrl->sw[6] = ((int16_t)sbus_buf[14] >> 6 | ((int16_t)sbus_buf[15] << 2 ) | (int16_t)sbus_buf[16] << 10 ) & 0x07FF; //!< Mouse Right Is Press ? // rc_ctrl->sw[7] = ((int16_t)sbus_buf[16] >> 1 | ((int16_t)sbus_buf[17] << 7 )) & 0x07FF; //!< KeyBoard value // rc_ctrl->ch[0] -= RC_CH_VALUE_OFFSET; // rc_ctrl->ch[1] -= RC_CH_VALUE_OFFSET; // rc_ctrl->ch[2] -= RC_CH_VALUE_OFFSET; // rc_ctrl->ch[3] -= RC_CH_VALUE_OFFSET; // // //µ÷ÕûÒ¡¸ËÖÐֵʹң¿ØÆ÷΢µ÷Á¿Îª0ʱҡ¸ËÖÐÖµ½Ó½ü0£¬ÓÍÃųýÍâ // //µÚÒ»´Îµ÷³µÇ°ÏÈÈ·ÈÏͨµÀÖµÊÇ·ñÕýÈ·£¡£¡Èç²»·ûºÏ¸ù¾Ýʵ¼ÊͨµÀÖµ½øÐÐÐÞ¸Ä // //Ð޸Ĵ˴¦¼°omni_chassis.cÖÐͨµÀÖµ²¿·Ö // rc_ctrl->ch[0] += 24; //y(-694,693)×óÓÒ // rc_ctrl->ch[1] = -rc_ctrl->ch[1]-24; //x(-693,694)Ç°ºó // rc_ctrl->ch[2] = -rc_ctrl->ch[2]+764; //m(95,1482)ÓÍÃÅ // rc_ctrl->ch[3] += 24; //w(-694,693)Ðýת // // rc_ctrl->ch[1] = map_int(rc_ctrl->ch[1],-693,694,-700,700); //xÓ³Éäµ½(-700,700) // rc_ctrl->ch[0] = map_int(rc_ctrl->ch[0],-694,693,-700,700); //yÓ³Éäµ½(-700,700) // rc_ctrl->ch[3] = 0.5*(rc_ctrl->ch[3]); //w // // //ËÀÇø(-30,30) // if(rc_ctrl->ch[0]>-30&&rc_ctrl->ch[0]<30) rc_ctrl->ch[0]=0; // if(rc_ctrl->ch[1]>-30&&rc_ctrl->ch[1]<30) rc_ctrl->ch[1]=0; // if(rc_ctrl->ch[2]>-30&&rc_ctrl->ch[2]<30) rc_ctrl->ch[2]=0; // if(rc_ctrl->ch[3]>-30&&rc_ctrl->ch[3]<30) rc_ctrl->ch[3]=0; // remote_ready = 1; //} //int map(int x, int in_min, int in_max, int out_min, int out_max) //Ó³É亯Êý //{ // return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; //} ///* // //306 306 // sw[] sw[7] //1694 1694 // //306 306 //sw[6] sw[4] //1694 1694 //306 306 306 306 //sw[0] sw[2] sw[1]:306-1694 sw[5]:306-1694 sw[]1000 sw[3] //1694 1694 1694 1694 // 710 // 688 1425 // | | // | | // 54 -616------ch[3]770 -354---------ch[0] 339 0 // | | // | | // ch[2] ch[1] // _699 38 //*/