1

Dependencies:   mbed-dev_spine

main.cpp

Committer:
WXD
Date:
2019-12-02
Revision:
6:aad89fd109c2
Parent:
5:6a95726e45b0
Child:
7:4362ea3d5300

File content as of revision 6:aad89fd109c2:

#include "mbed.h"
#include <cstring>
#include "math_ops.h"
#include "leg_message.h"
#include "CAN.h"
#include "used_leg_message.h"
#include "data_command.h"
#include "data_pc.h"
#include "data_board.h"
#include "mode.h"
#include "control.h"
#include "calculate.h"


int main()
{
    pc.baud(115200);
    dianciji.baud(115200);
    shouzhua.baud(115200);
    
    command.baud(115200);
    command.attach(&serial_command_isr);
    //sf_m_c = 0;                                                               // 主要为接收模式
    
    
    
    board.baud(115200);
    board.attach(&serial_board_isr);     
    sf_m_b = 1;                                                                 // 主要为发送模式
    
    pf_can.frequency(1000000);
    pf_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0);
    pf_rxMsg.len = 6;
    PF_can.len   = 8;
    PF_can.id    = 0x0a;
    
    df_can.frequency(1000000);
    df_can.filter(CAN_ID<<21, 0xFFE00004, CANStandard, 0);
    df_rxMsg.len = 6;
    DF_can.len   = 8;
    DF_can.id    = 0x0b;
    
    NVIC_SetPriority(USART1_IRQn, 3);                                           // pc中断优先级高于board
    NVIC_SetPriority(USART2_IRQn, 4);
    
    
    while(1)
    {
        counter++;
        
        //获取AD
        ad1 = AD1.read() * 3300;
        ad2 = AD2.read() * 3300;
        
        //////////////////////// CAN获取电机位置速度信息 //////////////////////////
        pf_can.read(pf_rxMsg);                                                                            
        unpack_reply(pf_rxMsg, &a_state);
        wait_us(10);
        df_can.read(df_rxMsg);
        unpack_reply(df_rxMsg, &a_state);
        
        ppf = a_state.pf.p;                                                     // 从CAN获得的当前位置
        pdf = a_state.df.p;
        //====================================================================//
        
        /////////////////////// 485获取步态,力传感器信息 //////////////////////////
        sf_m_b = 1;                                                               // 发送模式                                                            
        wait_us(200);                                                           // 等待选择引脚电压稳定                                                 
        board.printf("A1B");
        wait_ms(1);                                                             // mbed特色,需要等待数据完全发送
        sf_m_b = 0;                                                               // 接收模式
        wait_us(200);                                                           // 等待选择引脚电压稳定                                                    
        wait_ms(3);                                                             // 等待从机上传数据                                                                                                       
        gait_decode();
        //pc.printf("A1B: %d - %d - %f - %f - %f\n\r", Gait_num_valid, Gait_now, Gait_per_now, COP_Y, COP_X);
        gait_clear();

        sf_m_b = 1;                                                               // 发送模式                                                            
        wait_us(200);                                                           // 等待选择引脚电压稳定                                                 
        board.printf("A2B");
        wait_ms(1);                                                             // mbed特色,需要等待数据完全发送
        sf_m_b = 0;                                                               // 接收模式
        wait_us(200);                                                           // 等待选择引脚电压稳定                                                    
        wait_ms(4);                                                             // 等待从机上传数据                                                                                                       
        ad_decode();
        //pc.printf("A2B: %f - %f\n\r", ad_pf, ad_df);
        ad_clear();
        //====================================================================//        
        
        ////////////////////////// 电机状态控制,命令发送 //////////////////////////
        control();
        
        if(send_enable == 1)
        {
            PackAll();
            WriteAll();
            //send_enable = 0;
        }
        /**********************************************************************/        
        
        ////////////////////////////// 输出状态信息 //////////////////////////////
        /*
        if(counter >= 20000)
        {
            //pc.printf("\n\rpf- %.3f %.3f %.3f \n\r", a_state.pf.p, a_state.pf.v, a_state.pf.t);
            //pc.printf("df- %.3f %.3f %.3f \n\r", a_state.df.p, a_state.df.v, a_state.df.t);
            
            counter = 0;
        }
        */
        
        //pc.printf("\n\rPpd: %f - %f\r", SP_pf, SP_df);
        pc.printf("\n\rC: %f - %f\r", a_control.pf.p_des, a_control.df.p_des);
        pc.printf("\n\rP: %f - %f\r", a_state.pf.p, a_state.df.p);
        
        //dianciji.printf();                                                    //电刺激输出
        //shouzhua.printf();                                                    //手抓输出
        
        //pc.printf("A1B: %d - %d - %f - %f - %f\r", Gait_num_valid_real, Gait_now_real, Gait_per_now_real, COP_Y_real, COP_X_real);
        //pc.printf("A2B: %f - %f\n\r", ad_pf_real, ad_df_real);
        /**********************************************************************/      
    }
}