2019NHK_teamA
/
NHK2019manualver2
A team manual robot program version 2
main.cpp
- Committer:
- shina
- Date:
- 2019-08-28
- Revision:
- 1:b4936498e47c
- Parent:
- 0:f99e0ea93e31
File content as of revision 1:b4936498e47c:
///////////////////////////////////// /*NHK2019*/ //Aチーム手動機プログラム /* アドレス 0x10:右前 0x12:左前 0x14:右後ろ 0x16:左後ろ 0x18:サーボ制御回路 0x20:右ラック 0x22:左ラック 0x24:回収機構 0x26:右ファン 0x28:左ファン 0x30:吐き出し機構 */ ///////////////////////////////////// //宣言 #include "mbed.h" #include "PS3.h" I2C i2c(D14,D15); Serial pc(USBTX,USBRX); Serial slave(PC_6,PC_7); PS3 ps3(D8,D2); DigitalOut led(D5);//電源確認 DigitalOut tsushin(D6);//通信確認 DigitalOut data_check(D7); DigitalOut pwm(D4); DigitalOut stop(D10); DigitalOut led1(LED1); //変数 char data1;//右上 char data2;//左上 char data3;//右下 char data4;//左下 char data_servo; char data5;//ラック直動右 char data6;//ラック直動左 char data7;//回収機構 char data8;//右ファン char data9;//左ファン char data10;//パトランプ char data11;//吐き出し機構 char get_data_rs232=0x80; int Ry; int Rx; int Ly; int right1; int right2; int left1; int left2; int select; int start; int circle; int cross; int triangle; int square; int ue1; int shita; int migi1; int hidari1; int tushin_check; int old_select=0; int i=1; int old_start=0; int j=1; int old_circle=0; int k=1; int old_square=0; int old_migi1=0; int old_hidari1=0; int n=1; int old_right2=0; int o=1; int old_right1=0; int old_left1=0; //関数プロトタイプ宣言 void get_data(); void change_data(); void change_pwm(); void change_servo(); void change_rack(); void change_fan(); void send_data(char address,char data); void emergency(); void change_rack_2(); void sequence_kaisyu(); //void sequence_hakidashi(); //void hakidashi(); //メイン関数 int main(){ led=1; data7=0x80; while(true){ emergency(); get_data(); change_pwm(); change_servo(); change_data(); change_rack(); change_rack_2(); sequence_kaisyu(); //sequence_hakidashi(); //hakidashi(); change_fan(); send_data(0x10,data1); send_data(0x12,data2); send_data(0x14,data3); send_data(0x16,data4); send_data(0x18,data_servo); send_data(0x20,data5); send_data(0x22,data6); send_data(0x26,data8); send_data(0x28,data9); send_data(0x40,data10); } } //データ読み込み void get_data(){ Ry=ps3.getRightJoystickYaxis(); Rx=ps3.getRightJoystickXaxis(); Ly=ps3.getLeftJoystickYaxis(); circle=ps3.getButtonState(maru); cross=ps3.getButtonState(batu); triangle=ps3.getButtonState(sankaku); square=ps3.getButtonState(sikaku); left1=ps3.getButtonState(L1); left2=ps3.getButtonState(L2); right1=ps3.getButtonState(R1); right2=ps3.getButtonState(R2); select=ps3.getSELECTState(); start=ps3.getSTARTState(); ue1=ps3.getButtonState(ue); shita=ps3.getButtonState(sita); hidari1=ps3.getButtonState(hidari); migi1=ps3.getButtonState(migi); get_data_rs232=slave.getc(); if(get_data_rs232==0x20||get_data_rs232==0x22||get_data_rs232==0x24||get_data_rs232==0x32||get_data_rs232==0x34){ led1=1; }else{ led1=0; } pc.printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",Ry,Rx,Ly,left1,left2,right1,right2,select,start,ue1,shita,triangle,square,migi1,hidari1,tushin_check,i); if(Ry==0&&Rx==0&&Ly==0&&left1==0&&right1==0&&right2==0&&left2==0&&select==0&&start==0&&shita==0&&triangle==0&&ue1==0&&migi1==0&&hidari1==0&&square==0&&circle==0&&cross==0){ data_check=0; }else{ data_check=1; } } //緊急停止 void emergency(){ if(start!=old_start){ old_start=start; if(start==1){ if(j==1){ //緊急停止 led=0; stop=1; j=0; }else if(j==0){ //緊急停止解除 led=1; stop=0; j=1; } } } } //データ変化(メカナム) void change_data(){ if(Ry>30&&i==0){ if(right1==1){ data1=0xcf; data2=0x00; data3=0xcf; data4=0x00; }else if(left1==1){ data1=0x00; data2=0xcf; data3=0x00; data4=0xcf; }else{ data1=0x00; data2=0x00; data3=0x00; data4=0x00; } }else if(Ry<-30&&i==0){ data1=0xff; data2=0xff; data3=0xff; data4=0xff; }else if(Rx>30&&i==0){ data1=0x00; data2=0xff; data3=0xff; data4=0x00; }else if(Rx<-30&&i==0){ data1=0xff; data2=0x00; data3=0x00; data4=0xff; }else if(right1==1&&i==0){ data1=0xff; data2=0x00; data3=0xff; data4=0x00; }else if(left1==1&&i==0){ data1=0x00; data2=0xff; data3=0x00; data4=0xff; }else if(Ry>30&&i==1){ if(right1==1){ data1=0x4f; data2=0x3f; data3=0x4f; data4=0x3f; }else if(left1==1){ data1=0x3f; data2=0x4f; data3=0x3f; data4=0x4f; }else{ data1=0x3f; data2=0x3f; data3=0x3f; data4=0x3f; } }else if(Ry<-30&&i==1){ data1=0xbf; data2=0xbf; data3=0xbf; data4=0xbf; }else if(Rx>30&&i==1){ data1=0x3f; data2=0xbf; data3=0xbf; data4=0x3f; }else if(Rx<-30&&i==1){ data1=0xbf; data2=0x3f; data3=0x3f; data4=0xbf; }else if(right1==1&&i==1){ data1=0xbf; data2=0x3f; data3=0xbf; data4=0x3f; }else if(left1==1&&i==1){ data1=0x3f; data2=0xbf; data3=0x3f; data4=0xbf; }else{ data1=0x80; data2=0x80; data3=0x80; data4=0x80; } } //pwm変化 void change_pwm(){ if(select!=old_select){ old_select=select; if(select==1){ if(i==1){ pwm=0; i=0; }else if(i==0){ pwm=1; i=1; } } } } //サーボモーター void change_servo(){ if(right2!=old_right2){ old_right2=right2; //ハンガー機構 if(right2==1){ if(o==1){ data_servo=0x01; o=0; }else if(o==0){ data_servo=0x02; o=1; } } }else if(circle!=old_circle){ old_circle=circle; //バスタオル挟む機構 if(circle==1){ if(k==1){ data_servo=0x03; k=0; }else if(k==0){ data_servo=0x04; k=1; } } }/*else if(hidari1!=old_hidari1){ old_hidari1=hidari1; if(hidari1==1&&select==0){ if(n==1){ data_servo=0x05; n=0; }else if(n==0){ data_servo=0x06; n=1; } } }*/ } //ラック void change_rack(){ //右 if(triangle==1&&cross==0&&ue1==0&&shita==0&&(-32<Ly<32)){ if(get_data_rs232!=0x20&&get_data_rs232!=0x22){ data5=0x00; }else if(get_data_rs232==0x20||get_data_rs232==0x22){ data5=0x10; } }else if(triangle==0&&cross==1&&ue1==0&&shita==0&&(-32<Ly<32)){ if(get_data_rs232!=0x26&&get_data_rs232!=0x28){ data5=0xff; }else if(get_data_rs232==0x26||get_data_rs232==0x28){ data5=0x10; } //左 }else if(triangle==0&&cross==0&&ue1==1&&shita==0&&(-32<Ly<32)){ if(get_data_rs232!=0x20&&get_data_rs232!=0x24){ data6=0xff; }else if(get_data_rs232==0x20||get_data_rs232==0x24){ data6=0x10; } }else if(triangle==0&&cross==0&&ue1==0&&shita==1&&(-32<Ly<32)){ if(get_data_rs232!=0x26&&get_data_rs232!=0x30){ data6=0x00; }else if(get_data_rs232==0x26||get_data_rs232==0x30){ data6=0x10; } }else if(triangle==0&&cross==0&&ue1==0&&shita==0&&(-32<Ly<32)){ data5=0x80; data6=0x80; } } //ラック左右 void change_rack_2(){ if(triangle==0&&cross==0&&ue1==0&&shita==0&&Ly>32){ if(get_data_rs232==0x20){ data5=0x10; data6=0x10; }else if(get_data_rs232==0x22){ data5=0x10; data6=0xff; }else if(get_data_rs232==0x24){ data5=0x00; data6=0x10; }else{ data5=0x00; data6=0xff; } }else if(triangle==0&&cross==0&&ue1==0&&shita==0&&Ly<-32){ if(get_data_rs232==0x26){ data5=0x10; data6=0x10; }else if(get_data_rs232==0x28){ data5=0x10; data6=0x00; }else if(get_data_rs232==0x30){ data5=0xff; data6=0x10; }else{ data5=0xff; data6=0x00; } }else if(triangle==0&&cross==0&&ue1==0&&shita==0&&(-32<Ly<32)){ data5=0x80; data6=0x80; } } //回収機構 void sequence_kaisyu(){ if(square!=old_square){ old_square=square; if(square==1){ /*data_servo=0x07; send_data(0x18,data_servo); wait(2); data7=0xff; send_data(0x24,data7); wait(4); data7=0x10; send_data(0x24,data7); data_servo=0x08; send_data(0x18,data_servo); wait(2); data7=0x00; send_data(0x24,data7); wait(4); data7=0x10; send_data(0x24,data7);*/ data_servo=0x07; send_data(0x18,data_servo); wait(1.5); data7=0x00; while(get_data_rs232!=0x32){ send_data(0x24,data7); get_data_rs232=slave.getc(); } data7=0x10; send_data(0x24,data7); data_servo=0x08; send_data(0x18,data_servo); wait(2); data7=0xff; while(get_data_rs232!=0x34){ send_data(0x24,data7); get_data_rs232=slave.getc(); } data7=0x10; send_data(0x24,data7); } } } /* void sequence_hakidashi(){ if(migi1!=old_migi1){ old_migi1=migi1; if(migi1==1){ data_servo=0x07; send_data(0x18,data_servo); wait(2); data11=0xff; while(get_data_rs232!=0x36){ send_data(0x30,data11); get_data_rs232=slave.getc(); } data11=0x10; send_data(0x30,data11); wait(0.5); data11=0x00; while(get_data_rs232!=0x38){ send_data(0x30,data11); get_data_rs232=slave.getc(); } data11=0x10; send_data(0x30,data11); data_servo=0x08; send_data(0x18,data_servo); wait(2); } } } */ /* void hakidashi(){ if(migi1==1&&hidari1==0){ data_servo=0x07; if(get_data_rs232==0x36){ data11=0x10; }else if(get_data_rs232!=0x38){ data11=0xff; } }else if(migi1==0&&hidari1==1){ data_servo=0x08; if(get_data_rs232==0x38){ data11=0x10; }else if(get_data_rs232!=0x38){ data11=0x00; } }else{ data11=0x80; } } */ //ファン void change_fan(){ if(left2==1){ data8=0xff; data9=0xff; data10=0xff; }else if(left2==0){ data8=0x00; data9=0x00; data10=0x00; } } //i2c void send_data(char address,char data){ tsushin=1; tushin_check=0; i2c.frequency(100000); i2c.start(); i2c.write(address); tushin_check=i2c.write(data); i2c.stop(); wait(0.003); }