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++; } }