2019NHK_teamA / Mbed 2 deprecated NHK2019robokon_11_18

Dependencies:   mbed PS3_10_26

Files at this revision

API Documentation at this revision

Comitter:
shina
Date:
Tue Jun 25 08:53:27 2019 +0000
Child:
1:99294241f2ba
Commit message:
This program is NHK 2019 team A manual machine program.

Changed in this revision

PS3.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PS3.lib	Tue Jun 25 08:53:27 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/2019NHK_teamA/code/2019ROBOKONmanualProgram/#5ae9a03422fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jun 25 08:53:27 2019 +0000
@@ -0,0 +1,354 @@
+/////////////////////////////////////
+/*NHK2019*/
+/*Aチーム手動機プログラム*/
+/*担当者: 品川敦哉*/
+/*
+アドレス
+0x10:右前
+0x12:左前
+0x14:右後ろ
+0x16:左後ろ
+0x18:サーボ制御回路
+0x20:右ラック
+0x22:左ラック
+0x24:回収機構
+0x26:右ファン
+0x28:左ファン
+*/
+/////////////////////////////////////
+
+//宣言
+#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 get_data_rs232=0x80;
+int Ry;
+int Rx;
+int right1;
+int left1;
+int left2;
+int select;
+int start;
+int circle;
+int cross;
+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_cross=0;
+int l=1;
+
+
+//関数プロトタイプ宣言
+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();
+
+//メイン関数
+int main(){
+    led=1;
+    while(true){
+        emergency();
+        get_data();
+        change_pwm();
+        change_servo();
+        change_data();
+        change_rack();
+        change_kaisyu();
+        change_fan();
+        get_limit_data();
+        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(0x24,data7);
+        send_data(0x26,data8);
+        send_data(0x28,data9);
+        }
+    }
+    
+//データ読み込み
+void get_data(){
+    Ry=ps3.getRightJoystickYaxis();
+    Rx=ps3.getRightJoystickXaxis();
+    circle=ps3.getButtonState(maru);
+    cross=ps3.getButtonState(batu);
+    left1=ps3.getButtonState(L1);
+    left2=ps3.getButtonState(L2);
+    right1=ps3.getButtonState(R1);
+    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){
+        data_check=0;
+        }else{
+            data_check=1;
+            }
+    
+    }
+    
+//緊急停止
+void emergency(){
+    if(start!=old_start){
+    old_start=start;
+    if(start==1){
+        if(j==1){
+    //緊急停止
+            data_servo=0x00;
+            send_data(0x18,data_servo);
+            led=0;
+            stop=1;
+            j=0;
+        }else if(j==0){
+    //緊急停止解除
+            led=1;
+            stop=0;
+            j=1;
+            }
+        }
+    }  
+}
+
+    
+//データ変化(メカナム)
+void change_data(){
+    if(Ry>30&&i==0){
+        data1=0xff;
+        data2=0x00;
+        data3=0xff;
+        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(Ry>30&&i==1){
+        data1=0xbf;
+        data2=0x3f;
+        data3=0xbf;
+        data4=0x3f;
+        }else if(Ry<-30&&i==1){
+        data1=0x3f;
+        data2=0xbf;
+        data3=0x3f;
+        data4=0xbf;
+        }else if(Rx>30&&i==1){
+        data1=0xbf;
+        data2=0xbf;
+        data3=0x3f;
+        data4=0x3f;
+        }else if(Rx<-30&&i==1){
+        data1=0x3f;
+        data2=0x3f;
+        data3=0xbf;
+        data4=0xbf;
+        }else if(right1==1&&i==1){
+        data1=0x3f;
+        data2=0x3f;
+        data3=0x3f;
+        data4=0x3f;
+        }else if(left1==1&&i==1){
+        data1=0xbf;
+        data2=0xbf;
+        data3=0xbf;
+        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(j!=0){
+        if(circle!=old_circle){
+                    if(circle==1){
+                        if(k==1){
+                            data_servo=0x01;
+                            k=0;
+                        }else if(k==0){
+                            data_servo=0x02;
+                            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;   
+                        }
+                    }
+            }
+        }
+     }
+    
+//ラック
+void change_rack(){
+    if(ue1==1&&shita==0){
+        data5=0x00;
+        data6=0x00;
+        }else if(ue1==0&&shita==1){
+            data5=0xff;
+            data6=0xff;
+            }else{
+                data5=0x80;
+                data6=0x80;
+                }
+    }
+
+//回収機構
+void change_kaisyu(){
+    if(migi1==1&&hidari1==0){
+        data7=0xff;
+        }else if(migi1==0&&hidari1==1){
+            data7=0x00;
+            }else{
+                data7=0x80;
+                }
+    }
+    
+//ファン
+void change_fan(){
+    if(left2==1){
+        data8=0xff;
+        data9=0xff;
+        }else if(left2==0){
+            data8=0x00;
+            data9=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){
+    tsushin=1;
+    tushin_check=0;
+    i2c.frequency(100000);
+    i2c.start();
+    i2c.write(address);
+    tushin_check=i2c.write(data);
+    i2c.stop();
+    wait(0.003);
+    }
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Tue Jun 25 08:53:27 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file