kudou_purppo

Dependencies:   SBUS_STM32 can_network_motordriver mbed

main.cpp

Committer:
takatonaito
Date:
2022-09-14
Revision:
2:b9291c3e7c58
Parent:
1:09e43dcf94b8

File content as of revision 2:b9291c3e7c58:

//送信
#include "mbed.h"
#include "sbus.h"
#include "can_network_motordriver_definition.h"


CAN pinName(p30,p29);//(rd,td)
CAN can(p9,p10);

CANMessage bluemd;//青色md
CANMessage servo;//サーボ
CANMessage load;//装填ステッピング


Serial pc(USBTX,USBRX,115200);
Sbus sbus(p13,p14);
//DigitalOut fan(p23);//p23
PwmOut fan(p23);
Ticker get_date;
Ticker controlCycle;
int a,b,c,d,e,f,g,h;
float rx,ry,lx,ly,vr,V1,V2,V3,V4;
Ticker timer;

union vr_data{float fvr;char cvr[4];};
vr_data VRer;

union ry_data{float fry;char cry[4];};
ry_data Data2;

union rx_data{float frx;char crx[4];};
rx_data RX;


void puropo();   
void send(); 
void mainLoop();
 


int main() {
    timer.attach(&send,0.05);//canのタイマ割込み
    get_date.attach(&puropo,0.01f);//プロポのタイマ割込み
    sbus.setup(Sbus::VR,Sbus::SW_D,Sbus::SW_C,Sbus::SW_B,Sbus::SW_E,Sbus::SW_A);
    pinName.frequency(250000);
    fan.period(0.00005f);
    fan.pulsewidth(0.020);
        
    can.frequency(500000);
   controlCycle.attach(&mainLoop,0.01f);
    
    bluemd.id = 0x103;
    for(int i=0;i<8;i++)  bluemd.data[i] = (int)i;
    bluemd.len = 8;                                 
    bluemd.type = CANData;                           
    bluemd.format = CANStandard;
    
    servo.id = 0x202;
    for(int i=0;i<8;i++)  servo.data[i] = (int)i;
    servo.len = 8;                                 
    servo.type = CANData;                           
    servo.format = CANStandard;
    
    load.id = 0x302;
    for(int i=0;i<8;i++)  load.data[i] = (int)i;
    load.len = 8;                                 
    load.type = CANData;                           
    load.format = CANStandard;
    
while(1) {
        //fan = 1;
        //fan.write(0.8);
             if(d == 2&& a == 2){  
      /*V1=((-lx)+(ly))/2.0f;
      V2=((-lx)+(-ly))/2.0f;
      V3=((lx)+(-ly))/2.0f;
      V4=((lx)+(ly))/2.0f;*/
      V1=((-lx)+(ly))/5.0f;
      V2=((-lx)+(-ly))/5.0f;
      V3=((lx)+(-ly))/5.0f;
      V4=((lx)+(ly))/5.0f;
       }else if(d == 2){
                    V2 = 0.1;
                    V1 = 0.1;
                    V3 = 0.1;
                    V4 = 0.1;
                        }else if(a == 2){
                            V2 = -0.1;
                            V1 = -0.1;
                            V3 = -0.1;
                            V4 = -0.1;
                                        }
                                    
                                        
            //pc.printf("%f",Data2.frx);
            pc.printf("A = %d' F= %d'H = %d'D = %d'e = %d'E = %d'vr = %f",a,b,c,d,e,f,vr);
            //pc.printf("%f",Data1.flx);
            pc.printf("\n\r");
    }
}

void puropo(){
    
            a=sbus.getSwitchValue(0);
            b=sbus.getSwitchValue(1); 
            c=sbus.getSwitchValue(2);
            d=sbus.getSwitchValue(3);
            e=sbus.getSwitchValue(4);
            f=sbus.getSwitchValue(5);

            
            
   
            RX.frx = sbus.getStickValue(0);
            Data2.fry=sbus.getStickValue(1);
            lx=sbus.getStickValue(2);
            ly=sbus.getStickValue(3);
            vr = sbus.getVolumeValue();
            
  }  
  
void send(){
  memcpy(load.data,Data2.cry,4);
  pinName.write(load);
  
  VRer.fvr=vr;
  memcpy(bluemd.data,VRer.cvr,4);
  pinName.write(bluemd);
  
  //memcpy(load.data,RX.crx,4);
  load.data[4]=RX.crx[0];
  load.data[5]=RX.crx[1];
  load.data[6]=RX.crx[2];
  load.data[7]=RX.crx[3];
  pinName.write(load);
  

  if(c == 2){
    servo.data[5]=6;
    }
    else{bluemd.data[5]=0;}
    
 
  pinName.write(servo);
}

 void mainLoop() {
    static int a = 0;
    switch(a){
        case 0:
           // motordriverTransmitMessage(&can,MD_1_MCU,md_can_flame::SEND_CONTROL_DUTY,V1);
           motordriverTransmitMessage(&can,MD_1_MCU,md_can_flame::SEND_CONTROL_DUTY,V4);
                break;
        case 1:
           // motordriverTransmitMessage(&can,MD_2_MCU,md_can_flame::SEND_CONTROL_DUTY,V2);
           motordriverTransmitMessage(&can,MD_2_MCU,md_can_flame::SEND_CONTROL_DUTY,V1);
                break;
        case 2:      
            //motordriverTransmitMessage(&can,MD_3_MCU,md_can_flame::SEND_CONTROL_DUTY,V3);
            motordriverTransmitMessage(&can,MD_3_MCU,md_can_flame::SEND_CONTROL_DUTY,V2);          
                break;
        case 3:
                //motordriverTransmitMessage(&can,MD_4_MCU,md_can_flame::SEND_CONTROL_DUTY,V4);
                motordriverTransmitMessage(&can,MD_4_MCU,md_can_flame::SEND_CONTROL_DUTY,V3);
                break;
       /* case 4:
            motordriverTransmitMessage(&can,MD_5_MCU,md_can_flame::SEND_CONTROL_DUTY,0.8);
                break;*/
        default:
                break;
    }
        if(a >= 4){
                a = 0;
        }else{
                a++;
         }
}