test2017-1-13

Dependencies:   AT24C1024 DMX-STM32 mbed

Revision:
5:fd097a259856
Parent:
4:c3f3fdde7eee
Child:
6:2a9e0228f81d
--- a/main.cpp	Fri Mar 24 13:00:34 2017 +0000
+++ b/main.cpp	Mon Apr 03 09:12:33 2017 +0000
@@ -3,7 +3,11 @@
 #include "AccelStepper.h"
 #include "DMX.h"
 
-Ticker to;
+//モータ制御基板の通し番号を設定してください 初期設定は1です
+#define BoardNumber 1
+
+
+//Ticker to;
 
 Timer t;
 DigitalOut dmxEnable(D8);   //基本L(レシーブ)に固定します
@@ -46,8 +50,8 @@
 bool manipulateMode2 = false; //0:手動 1:自動
 
 
-//モーター1のパラメーター DMXチャンネルリスト チャンネル数:12個
-#define CH_Origin 0
+//モーター1のパラメーター DMXチャンネルリスト チャンネル数:16個
+#define CH_Origin BoardNumber * 32 - 32
 
 #define DMX_Position1_H CH_Origin  //モーター1制御用のDMX信号の始まりの値
 #define DMX_Position1_L CH_Origin + 1
@@ -63,8 +67,10 @@
 #define DMX_SaveValue1_L CH_Origin + 11
 #define DMX_ParmSetMode1_H CH_Origin + 12
 #define DMX_ParmSetMode1_L CH_Origin + 13
+#define DMX_Initialize1_H CH_Origin + 14
+#define DMX_Initialize1_L CH_Origin + 15
 
-//モーター2のパラメーター DMXチャンネルリスト チャンネル数:12個
+//モーター2のパラメーター DMXチャンネルリスト チャンネル数:16個
 #define DMX_Position2_H CH_Origin + 16
 #define DMX_Position2_L CH_Origin + 17
 #define DMX_Speed2_H CH_Origin + 18
@@ -79,6 +85,8 @@
 #define DMX_SaveValue2_L CH_Origin + 27
 #define DMX_ParmSetMode2_H CH_Origin + 28
 #define DMX_ParmSetMode2_L CH_Origin + 29
+#define DMX_Initialize2_H CH_Origin + 30
+#define DMX_Initialize2_L CH_Origin + 31
 
 //モーターの回転方向 TMCは1  DRVは-1に設定すること
 //未実装(実装予定)
@@ -92,6 +100,7 @@
 #define StepSize2 4
 
 
+//未実装
 void calc()
 {
     stepper1.newSpeed();
@@ -116,13 +125,13 @@
 void checkSW()
 {
     //モーター1用エンドスイッチのチェック
-    if(EndSW3.read() == 1) {
+    if(EndSW1.read() == 0) {
         stepper1.stop();
         stepper1.setCurrentPosition(0);
     }
 
     //モーター2用エンドスイッチのチェック
-    if(EndSW4.read() == 1) {
+    if(EndSW2.read() == 0) {
         stepper2.stop();
         stepper2.setCurrentPosition(0);
     }
@@ -155,6 +164,7 @@
 }
 
 
+//モーター2個同時の往復テスト
 void testMove2()
 {
     stepper1.setMaxSpeed(10000 / StepAdj1);
@@ -167,25 +177,59 @@
         stepper2.moveTo(20000 / StepAdj2);
         while(stepper1.distanceToGo() != 0) {
             stepper1.run();
-            //    stepper2.run();
+            stepper2.run();
         }
-        //while(stepper2.distanceToGo() != 0) {
-//            stepper2.run();
-//        }
+        while(stepper2.distanceToGo() != 0) {
+            stepper1.run();
+            stepper2.run();
+        }
 
         stepper1.moveTo(500 / StepAdj1);
-        //stepper2.moveTo(500 / StepAdj2);
+        stepper2.moveTo(500 / StepAdj2);
         while(stepper1.distanceToGo() != 0) {
             stepper1.run();
-            //    stepper2.run();
+            stepper2.run();
         }
         while(stepper2.distanceToGo() != 0) {
-            //    stepper2.run();
+            stepper2.run();
             stepper1.run();
         }
     }
 }
 
+void interuptInit1()
+{
+    stepper1.setCurrentPosition(-1);
+    stepper1.setMaxSpeed(4000 / StepAdj1);
+    stepper1.setAcceleration(20000 / StepAdj1);
+
+    //原点復帰動作
+    stepper1.moveTo(-30000 / StepAdj1);
+    while(stepper1.currentPosition() != 0) {
+        stepper1.run();
+        checkSW();
+    }
+    //初期位置へ移動
+    //something
+}
+
+void interuptInit2()
+{
+    stepper2.setCurrentPosition(-1);
+    stepper2.setMaxSpeed(4000 / StepAdj2);
+    stepper2.setAcceleration(20000 / StepAdj2);
+
+    //原点復帰動作
+    stepper2.moveTo(-30000 / StepAdj2);
+    while(stepper2.currentPosition() != 0) {
+        stepper2.run();
+        checkSW();
+    }
+    //初期位置へ移動
+    //something
+}
+
+
 void init1()
 {
     stepper1.setCurrentPosition(-1);
@@ -197,8 +241,8 @@
         stepper1.run();
         checkSW();
     }
-    stepper1.moveTo(500 / StepAdj1);
-    while(stepper1.distanceToGo() != 0) stepper1.run();
+//    stepper1.moveTo(500 / StepAdj1);
+//    while(stepper1.distanceToGo() != 0) stepper1.run();
 }
 
 void init2()
@@ -212,8 +256,8 @@
         stepper2.run();
         checkSW();
     }
-    stepper2.moveTo(500 / StepAdj2);
-    while(stepper2.distanceToGo() != 0) stepper2.run();
+//    stepper2.moveTo(500 / StepAdj2);
+//    while(stepper2.distanceToGo() != 0) stepper2.run();
 }
 
 void initBoth()
@@ -244,7 +288,8 @@
 
 void checkSafeBreak()
 {
-    if(EndSW3.read() == 1) {
+    //モーター1用エンドスイッチのチェック
+    if(EndSW1.read() == 1) {
         stepper1.stop();
         while(1) {
             blink();
@@ -252,7 +297,7 @@
     }
 
     //モーター2用エンドスイッチのチェック
-    if(EndSW4.read() == 1) {
+    if(EndSW2.read() == 1) {
         stepper2.stop();
         while(1) {
             blink();
@@ -260,6 +305,7 @@
     }
 }
 
+
 //モーター1のパラメータ保存
 void paramStore1()
 {
@@ -442,6 +488,28 @@
     } else;
 }
 
+//原点復帰命令のチェック
+void checkInitCommand1()
+{
+    dmxInHighBit = dmx.get(DMX_Initialize1_H);
+    dmxInLowBit = dmx.get(DMX_Initialize1_L);
+
+    if(dmxInHighBit == 75 && dmxInLowBit == 255) {
+        interuptInit1();
+    }
+}
+
+void checkInitCommand2()
+{
+    dmxInHighBit = dmx.get(DMX_Initialize2_H);
+    dmxInLowBit = dmx.get(DMX_Initialize2_L);
+
+    if(dmxInHighBit == 75 && dmxInLowBit == 255) {
+        interuptInit2();
+    }
+}
+
+
 //モータードライバの設定
 void conf1()
 {
@@ -554,6 +622,7 @@
 
 int main()
 {
+    wait(1);
 
     dmxEnable = 0;  //0:receiver 1:sender
 
@@ -567,20 +636,20 @@
     stepper2.setCurrentPosition(-1);
 
 //モーターの初期化シーケンス
-//    init1();
+    init1();
 //    init2();
 //    initBoth();
 
 //往復運動を繰り返すテストシーケンス(無限ループ)
-    testMove1();
+//    testMove1();
 
     myLED =1;
 
     readROMValue1();
-    readROMValue2();
+//    readROMValue2();
 
     stepper1.setMaxSpeed(10000 / StepAdj1);
-    stepper2.setMaxSpeed(10000 / StepAdj2);
+//    stepper2.setMaxSpeed(10000 / StepAdj2);
 
     while(1) {
         //操作モード切り替えボタンのチェック
@@ -595,11 +664,11 @@
         dmxInHighBit = dmxInHighBit << 8;
         position1 = (long)(dmxInHighBit + dmxInLowBit);
 
-        //モーター1の目標位置をスライダーから取得
-        dmxInHighBit = dmx.get(DMX_Position2_H);
-        dmxInLowBit = dmx.get(DMX_Position2_L);
-        dmxInHighBit = dmxInHighBit << 8;
-        position2 = (long)(dmxInHighBit + dmxInLowBit);
+        //モーター2の目標位置をスライダーから取得(停止中)
+//        dmxInHighBit = dmx.get(DMX_Position2_H);
+//        dmxInLowBit = dmx.get(DMX_Position2_L);
+//        dmxInHighBit = dmxInHighBit << 8;
+//        position2 = (long)(dmxInHighBit + dmxInLowBit);
 
         //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定
         if(manipulateMode1 == false) {
@@ -623,25 +692,38 @@
             myLED = 1;
         }
 
+
+        //モーター1のパラメーター設定
         position1 = map(position1, 0, 0xFFFF, 0, max1);
         stepper1.setMaxSpeed(speed1);
         stepper1.setAcceleration(Acceleration1);
 
-        position2 = map(position2, 0, 0xFFFF, 0, max2);
-        stepper2.setMaxSpeed(speed2);
-        stepper2.setAcceleration(Acceleration2);
+
+        //モーター2のパラメーター設定(停止中)
+        //position2 = map(position2, 0, 0xFFFF, 0, max2);
+        //stepper2.setMaxSpeed(speed2);
+        //stepper2.setAcceleration(Acceleration2);
 
+
+        //モーター1の目標位置設定
         stepper1.moveTo(position1);
-        stepper2.moveTo(position2);
+
+        //モーター2の目標位置設定(停止中)
+        //stepper2.moveTo(position2);
 
 
-        checkSafeBreak();
-        stepper1.newSpeed();
+        //安全エンドスイッチの監視(停止中)
+        //checkSafeBreak();
+
+        //モーター1への原点復帰命令のチェック
+        checkInitCommand1();
 
-//モーター1の走行
+        //モーター2への原点復帰命令のチェック(停止中)
+        //checkInitCommand2();
+
+        //モーター1の走行
         if(stepper1.distanceToGo() != 0) stepper1.run();
-//モーター2の走行(停止中)
-//        if(stepper2.distanceToGo() != 0) stepper2.run();
-
+        //モーター2の走行(停止中)
+        //if(stepper2.distanceToGo() != 0) stepper2.run();
     }
 }
\ No newline at end of file