手動機 ヌクレオ用のプログラムです

Dependencies:   mbed

Fork of F3RC_syudou_slave_3 by F3RC1班

Revision:
2:96509fc6e151
Parent:
1:dfabac3b39e9
Child:
3:1a3ed86511d3
diff -r dfabac3b39e9 -r 96509fc6e151 main.cpp
--- a/main.cpp	Wed Aug 23 03:33:55 2017 +0000
+++ b/main.cpp	Thu Aug 24 03:49:20 2017 +0000
@@ -1,85 +1,119 @@
 #include "mbed.h"
 
 Serial pc(USBTX,USBRX);
-SPISlave spi(PC_12,PC_11,PC_10,PA_13);
-PwmOut moter_1(PA_10);
-PwmOut moter_2(PA_2);
+SPISlave spi(PC_12,PC_11,PC_10,PA_15);
+PwmOut moter_1(PB_14);
+PwmOut moter_2(PB_15);
 DigitalOut cyli_1(PB_5);
 DigitalOut cyli_2(PB_3);
 DigitalOut cyli_3(PA_10);
-//フォトトランジスタ上
-DigitalIn photo_1(PC_2);
-//フォトトランジスタ下
-DigitalIn photo_2(PC_3);
+//フォトインタラプタ上
+InterruptIn photo_1(PC_2);
+//フォトインタラプタ下
+InterruptIn photo_2(PC_3);
 
-int a,b,c,d,e,f,g,h;
+int L_up,L_down,L_open,L_close,R_up,R_down,R_open,R_close;
 
 //モーターの出力の設定
 double moter_power = 0.7;
 
+
+//腕上昇下降の関数
+void up()
+{
+    moter_1=moter_power;
+    moter_2=0;
+}
+void down()
+{
+    moter_1=0;
+    moter_2=moter_power;
+}
+void stop()
+{
+    moter_1=0;
+    moter_2=0;
+}
+//フラグ
+int up_flag=1;
+int down_flag=1;
+//フォトトランジスタのフラグ呼び出し
+void photo_1_rise()
+{
+    stop();
+    up_flag=0;
+}
+void photo_1_fall()
+{
+    up_flag=1;
+}
+void photo_2_rise()
+{
+    stop();
+    down_flag=0;
+}
+void photo_2_fall()
+{
+    down_flag=1;
+}
 int main()
 {
     spi.format(8,3);
     spi.frequency(1000000);
 
+//フォトインタラプタ1
+    photo_1.rise(&photo_1_rise);
+    photo_1.fall(&photo_1_fall);
+
+//フォトインタラプタ2
+    photo_2.rise(&photo_2_rise);
+    photo_2.fall(&photo_2_fall);
     while(1) {
 
         if(spi.receive()) {
 
-            int a = spi.read() & 0b1;
-            int b = (spi.read() & 0b10)>>1;
-            int c = (spi.read() & 0b100)>>2;
-            int d = (spi.read() & 0b1000)>>3;
-            int e = (spi.read() & 0b10000)>>4;
-            int f = (spi.read() & 0b100000)>>5;
-            int g = (spi.read() & 0b1000000)>>6;
-            int h = (spi.read() & 0b10000000)>>7;
-            
-            pc.printf("a:%d\tb:%d\tc:%d\td:%d\te:%d\tf:%d\tg:%d\th:%d\r\n",a,b,c,d,e,f,g,h,spi.read());
+            int L_up = spi.read() & 0b1;
+            int L_down = (spi.read() & 0b10)>>1;
+            int L_open = (spi.read() & 0b100)>>2;
+            int L_close = (spi.read() & 0b1000)>>3;
+            int R_up = (spi.read() & 0b10000)>>4;
+            int R_down = (spi.read() & 0b100000)>>5;
+            int R_open = (spi.read() & 0b1000000)>>6;
+            int R_close = (spi.read() & 0b10000000)>>7;
+
+//spiの値プリント
+            pc.printf("L_up:%d\tL_down:%d\tL_open:%d\tL_close:%d\t\nR_up:%d\tR_down:%d\tR_open:%d\tR_close:%d\tsend:%d\r\n",L_up,L_down,L_open,L_close,R_up,R_down,R_open,R_close,spi.read());
 
         }
-/*フォトトランジスタ1
-        if() {//上で折り返し
-            moter_1=0;
-            moter_2=moter_power;
-        } 
 
-//フォトトランジスタ2
-        if() {//下で折り返し
-            moter_1=moter_power;
-            moter_2=0;
-        } */
 
 //腕1 上昇下降
-        if(a == 1) {//上昇
-            moter_1=moter_power;
-            moter_2=0;
-        } else if(b == 1) {//下降
-            moter_1=0;
-            moter_2=moter_power;
+        if(L_up == 1 && up_flag==1) {//上昇
+            up();
+        } else if(L_down == 1 && down_flag==1) {//下降
+            down();
         } else {
-            moter_1=0;
-            moter_2=0;
+            stop();
         }
 
 //腕1 開閉
-        if(c == 1) {
+        if(L_open == 1) {
             cyli_1=1;
-        } else if(d == 1) {
+        } else if(L_close == 1) {
             cyli_1=0;
         }
 
 //腕2 上昇下降
-        if(e == 1) {
+        if(R_up == 1) {
             cyli_2=1;
-        } else if(h == 1) {
+        } else if(R_down == 1) {
             cyli_2=0;
         }
 
 //腕2 開閉
-        if(f == 1) {
+        if(R_open == 1) {
             cyli_3=1;
-        } else if(g == 1) {
+        } else if(R_close == 1) {
             cyli_3=0;
         }
     }