NHK 2019 team A manual machine program. 改良版(回収動作がおかしい)

Dependencies:   mbed 2019ROBOKONmanualProgram

Revision:
1:99294241f2ba
Parent:
0:c7e17c2fd542
Child:
2:830db42bae7e
diff -r c7e17c2fd542 -r 99294241f2ba main.cpp
--- a/main.cpp	Tue Jun 25 08:53:27 2019 +0000
+++ b/main.cpp	Thu Sep 05 09:40:50 2019 +0000
@@ -1,19 +1,19 @@
 /////////////////////////////////////
 /*NHK2019*/
-/*Aチーム手動機プログラム*/
-/*担当者: 品川敦哉*/
+//Aチーム手動機プログラム
 /*
 アドレス
 0x10:右前
-0x12:左前
+0x12:左後ろ
 0x14:右後ろ
-0x16:左後ろ
+0x16:左前
 0x18:サーボ制御回路
 0x20:右ラック
 0x22:左ラック
 0x24:回収機構
 0x26:右ファン
 0x28:左ファン
+0x30:吐き出し機構
 */
 /////////////////////////////////////
 
@@ -31,6 +31,7 @@
 DigitalOut stop(D10);
 DigitalOut led1(LED1);
 
+
 //変数
 char data1;//右上
 char data2;//左上
@@ -42,16 +43,22 @@
 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;
@@ -63,25 +70,42 @@
 int j=1;
 int old_circle=0;
 int k=1;
-int old_cross=0;
-int l=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;
+int p=2;
+int q=0;
+
+
 
 
 //関数プロトタイプ宣言
+void initialization();
 void get_data();
 void change_data();
 void change_pwm();
 void change_servo();
 void change_rack();
-void change_kaisyu();
 void change_fan();
 void send_data(char address,char data);
 void emergency();
-void get_limit_data();
+void change_rack_2();
+void sequence_kaisyu();
+//void kaisyu();
+void sequence_hakidashi();
+//void hakidashi();
+
+
 
 //メイン関数
 int main(){
     led=1;
+    initialization();
     while(true){
         emergency();
         get_data();
@@ -89,9 +113,12 @@
         change_servo();
         change_data();
         change_rack();
-        change_kaisyu();
+        change_rack_2();
+        sequence_kaisyu();
+       //kaisyu();
+       sequence_hakidashi();
+       //hakidashi();
         change_fan();
-        get_limit_data();
         send_data(0x10,data1);
         send_data(0x12,data2);
         send_data(0x14,data3);
@@ -99,29 +126,78 @@
         send_data(0x18,data_servo);
         send_data(0x20,data5);
         send_data(0x22,data6);
-        send_data(0x24,data7);
+        //send_data(0x24,data7);
         send_data(0x26,data8);
         send_data(0x28,data9);
+        send_data(0x40,data10);
+        //send_data(0x30,data11);
+        
+
+        
+        
         }
     }
     
+    
+//初期化
+void initialization(){
+    data1=0x80;
+    data2=0x80;
+    data3=0x80;
+    data4=0x80;
+    data5=0x80;
+    data6=0x80;
+    data7=0x10;
+    data8=0x80;
+    data9=0x80;
+    data10=0x80;
+    data11=0x80;
+    
+    send_data(0x10,data1);
+    send_data(0x12,data2);
+    send_data(0x14,data3);
+    send_data(0x16,data4);
+    send_data(0x20,data5);
+    send_data(0x22,data6);
+    send_data(0x24,data7);
+    send_data(0x26,data8);
+    send_data(0x28,data9);
+    send_data(0x40,data10);
+    send_data(0x30,data11);
+    
+    
+    }    
+
+    
 //データ読み込み
 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);
-    pc.printf("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n",Ry,Rx,left1,left2,right1,select,start,ue1,shita,migi1,hidari1,tushin_check,i);
-    if(Ry==0&&Rx==0&&left1==0&&right1==0&&left2==0&&select==0&&start==0&&shita==0&&ue1==0&&migi1==0&&hidari1==0){
+    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;
@@ -136,8 +212,6 @@
     if(start==1){
         if(j==1){
     //緊急停止
-            data_servo=0x00;
-            send_data(0x18,data_servo);
             led=0;
             stop=1;
             j=0;
@@ -154,65 +228,142 @@
     
 //データ変化(メカナム)
 void change_data(){
+    
+        if(Ry!=0||Rx!=0){
+        square=0;
+        }
+    
     if(Ry>30&&i==0){
-        data1=0xff;
-        data2=0x00;
-        data3=0xff;
-        data4=0x00;
+            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=0x00;
-        data2=0xff;
-        data3=0x00;
-        data4=0xff;
-        }else if(Rx>30&&i==0){
-        data1=0xff;
-        data2=0xff;
-        data3=0x00;
-        data4=0x00;
-        }else if(Rx<-30&&i==0){
-        data1=0x00;
-        data2=0x00;
-        data3=0xff;
-        data4=0xff;
-        }else if(right1==1&&i==0){
-        data1=0x00;
-        data2=0x00;
-        data3=0x00;
-        data4=0x00;
-        }else if(left1==1&&i==0){
         data1=0xff;
         data2=0xff;
         data3=0xff;
         data4=0xff;
+        }else if(Rx>30&&i==0){
+            if(right1==1){
+                data1=0xff;
+                data2=0xdf;
+                data3=0xcf;
+                data4=0x00;
+            }else if(left1==1){
+                data1=0xdf;
+                data2=0xff;
+                data3=0x00;
+                data4=0xcf;
+            }else{
+        data1=0xff;
+        data2=0xff;
+        data3=0x00;
+        data4=0x00;
+         }
+        }else if(Rx<-30&&i==0){
+             if(right1==1){
+                data1=0xcf;
+                data2=0x00;
+                data3=0xff;
+                data4=0xdf;
+            }else if(left1==1){
+                data1=0x00;
+                data2=0xcf;
+                data3=0xdf;
+                data4=0xff;
+            }else{
+        data1=0x00;
+        data2=0x00;
+        data3=0xff;
+        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=0x3f;
+        data2=0xbf;
         data3=0xbf;
-        data4=0x3f;
-        }else if(Ry<-30&&i==1){
-        data1=0x3f;
-        data2=0xbf;
-        data3=0x3f;
         data4=0xbf;
         }else if(Rx>30&&i==1){
+             if(right1==1){
+                data1=0xbf;
+                data2=0x5f;
+                data3=0x4f;
+                data4=0x3f;
+            }else if(left1==1){
+                data1=0x5f;
+                data2=0xbf;
+                data3=0x3f;
+                data4=0x4f;
+            }else{
         data1=0xbf;
         data2=0xbf;
         data3=0x3f;
         data4=0x3f;
+        }
         }else if(Rx<-30&&i==1){
+             if(right1==1){
+                data1=0x4f;
+                data2=0x3f;
+                data3=0xbf;
+                data4=0x5f;
+            }else if(left1==1){
+                data1=0x3f;
+                data2=0x4f;
+                data3=0x5f;
+                data4=0xbf;
+            }else{
         data1=0x3f;
         data2=0x3f;
         data3=0xbf;
         data4=0xbf;
+        }
         }else if(right1==1&&i==1){
-        data1=0x3f;
+        data1=0xbf;
         data2=0x3f;
-        data3=0x3f;
+        data3=0xbf;
         data4=0x3f;
         }else if(left1==1&&i==1){
-        data1=0xbf;
+        data1=0x3f;
         data2=0xbf;
-        data3=0xbf;
+        data3=0x3f;
         data4=0xbf;
         }else{
         data1=0x80;
@@ -222,6 +373,7 @@
         }
     }
 
+
 //pwm変化    
 void change_pwm(){
 if(select!=old_select){
@@ -240,106 +392,275 @@
 
 //サーボモーター
 void change_servo(){
-    if(j!=0){
-        if(circle!=old_circle){
+        if(right2!=old_right2){
+                    old_right2=right2;
+                    //ハンガー機構
+                    if(right2==1){
+                        if(o==1){
+                            data_servo=0x01;
+                            //send_data(0x18,data_servo);
+                            o=2;
+                        }else if(o==2){
+                            data_servo=0x02;
+                            //send_data(0x18,data_servo);
+                            o=3;
+                        }
+                        //data_servo=0x01;
+                    }
+            }else if(circle!=old_circle){
+                    old_circle=circle;
+                    //バスタオル挟む機構
                     if(circle==1){
                         if(k==1){
-                            data_servo=0x01;
+                            data_servo=0x03;
+                            //send_data(0x18,data_servo);
                             k=0;
                         }else if(k==0){
-                            data_servo=0x02;
-                            k=1;
+                            data_servo=0x04;
+                            //send_data(0x18,data_servo);
+                            k=1;   
                         }
                     }
-            }else if(cross!=old_cross){
-                    if(cross==1){
-                        if(l==1){
-                            data_servo=0x03;
-                            l=0;
-                        }else if(l==0){
-                            data_servo=0x04;
-                            l=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(ue1==1&&shita==0){
-        data5=0x00;
-        data6=0x00;
-        }else if(ue1==0&&shita==1){
-            data5=0xff;
+        
+        
+        //右
+        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{
-                data5=0x80;
-                data6=0x80;
-                }
+        }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 change_kaisyu(){
+
+void sequence_kaisyu(){
+     if(square!=old_square){
+         old_square=square;
+         if(square==1){
+             
+             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);
+             data_servo=0x07;
+             send_data(0x18,data_servo);
+
+         }
+      }
+}
+
+
+
+/*void kaisyu(){
+    if(square!=old_square){
+        if(square==1){
+            p=1;
+            data_servo=0x07;
+            send_data(0x18,data_servo);
+            wait(1.5);
+            }
+        }
+        
+        //get_data_rs232=slave.getc();
+        
+     if(p==1&&get_data_rs232_2!=0x32){
+         data7=0x00;
+         }else if(p==1&&get_data_rs232_2==0x32){
+             data7=0x10;
+             p=0;
+             data_servo=0x08;
+             send_data(0x18,data_servo);
+             wait(1.5);
+         }else if(p==0&&get_data_rs232!=0x34){
+             data7=0xff;
+         }else if(p==0&&get_data_rs232==0x34){
+             data7=0x10;
+             p=2;
+         }
+        
+    }
+*/
+
+
+void sequence_hakidashi(){
+     if(migi1!=old_migi1){
+         old_migi1=migi1;
+         if(migi1==1){
+           /*  data_servo=0x07;
+             send_data(0x18,data_servo);
+             wait(1.5);
+             data11=0xff;
+             while(get_data_rs232!=0x36){
+                 send_data(0x30,data11);
+                 get_data_rs232=slave.getc();
+                 }
+              data11=0x10;
+              send_data(0x30,data11);*/
+              data11=0xff;
+              send_data(0x30,data11);
+             }
+         }else if(hidari1!=old_hidari1){
+             if(hidari1==1){
+                 data11=0x00;
+                 send_data(0x30,data11);
+                 }
+         }  /*   else if(hidari1==1){
+                    if(get_data_rs232!=0x38){
+                        data11=0x38;
+                        send_data(0x30,data11);
+                        }else if(get_data_rs232==0x38){
+                            data11=0x10;
+                            send_data(0x30,data11;
+                        }
+        }*/ /*else{
+                 data11=0x80;
+                 send_data(0x30,data11);
+                 }*/
+                 
+            if(get_data_rs232==0x38&&data11==0x00){
+                data11=0x10;
+                send_data(0x30,data11);
+            }  else if(get_data_rs232==0x36&&data11==0xff){
+                data11=0x10;
+                send_data(0x30,data11);
+                
+            }   
+     }
+  
+
+/*
+void hakidashi(){
     if(migi1==1&&hidari1==0){
-        data7=0xff;
-        }else if(migi1==0&&hidari1==1){
-            data7=0x00;
-            }else{
-                data7=0x80;
-                }
-    }
-    
+        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;
             }
     }
   
-//リミットスイッチデータ取得  
-void get_limit_data(){
-    get_data_rs232=slave.getc();
-        if(get_data_rs232==0x20){
-              if(ue1==1){
-                data5=0x80;
-                data6=0x80;
-                }
-        }else if(get_data_rs232==0x22){
-            if(ue1==1){
-                data5=0x80;
-                }
-        }else if(get_data_rs232==0x24){
-            if(ue1==1){
-                data6=0x80;
-                }
-        }else if(get_data_rs232==0x26){
-            if(shita==1){
-                data5=0x80;
-                data6=0x80;
-                }
-        }else if(get_data_rs232==0x28){
-            if(shita==1){
-                data5=0x80;
-                }
-        }else if(get_data_rs232==0x30){
-            if(shita==1){
-                data6=0x80;
-                }
-        }else if(get_data_rs232==0x32){
-            if(migi1==1){
-                data7=0x80;
-                }
-        }else if(get_data_rs232==0x34){
-            if(hidari1==1){
-                data7=0x80;
-                }
-        }
-    }
+
+
     
 //i2c
 void send_data(char address,char data){
@@ -351,4 +672,5 @@
     tushin_check=i2c.write(data);
     i2c.stop();
     wait(0.003);
-    }
\ No newline at end of file
+    }
+