Line Trace Robot Program Sagami

Dependencies:   mbed

Revision:
0:95bb05165e79
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sun Oct 09 05:10:15 2016 +0000
@@ -0,0 +1,151 @@
+/******************************************************************************
+    @file       main.cpp
+    @brief      メイン処理
+    @date       2015/11/14
+    @author     Akira Minomo
+    @par        History
+    - 2015/11/14 Akira Minomo
+      -# Initial Version
+******************************************************************************/
+
+#include "mbed.h"
+#include "motor.h"
+
+// if you DO NOT want to use Color Sensor Comment out next line 
+//#define COLOR_SENSOR_USE
+
+//PC接続によるデバッグ出力設定(不要の際にはコメントアウトする)
+//#define DEBUG
+
+// Color Sensor Config
+#ifdef COLOR_SENSOR_USE
+#define sensor_addr    (0x29 << 1) // slave adr 7bit(0x29)
+#define sens_bur    100000      // Clock frequency(100khz)
+#endif
+
+// H8-mbed間のシリアル通信のボーレート
+#define H8_SERIAL_BAUDRATE  38400
+
+//タイマー割り込みの処理間隔を設定する
+#define ATTACH_TIMER_PERIOD 5000 //100ms周期で割り込み処理を実施  
+
+//H8から受信するデータに対するマスク
+//H8通信データは8方位にセンサにおいて黒いラインがあるかどうかを示す。
+#define BIT_MASK_SENSOR_F   0x01
+#define BIT_MASK_SENSOR_FR  0x02
+#define BIT_MASK_SENSOR_R   0x04
+#define BIT_MASK_SENSOR_BR  0x08
+#define BIT_MASK_SENSOR_B   0x10
+#define BIT_MASK_SENSOR_BL  0x20
+#define BIT_MASK_SENSOR_L   0x40
+#define BIT_MASK_SENSOR_FL  0x80
+
+//LED出力のON/OFF設定
+#define LED_ON              1
+#define LED_OFF             0
+
+//#define DEBUG 
+
+DigitalOut ledL(LED1);  // LED表示 デバッグ用
+DigitalOut ledB(LED2);  // LED表示 デバッグ用
+DigitalOut ledR(LED3);  // LED表示 デバッグ用
+DigitalOut ledF(LED4);  // LED表示 デバッグ用
+
+DigitalIn startSw(p20); // Startスイッチ 押すことでライントレースを開始する
+
+Serial pc(USBTX, USBRX);    // PCとのシリアル通信[デバッグ用](送信・受信:USB接続)
+Serial serialH8(p9, p10);   // H8とのシリアル通信(送信:p9、受信:p10)
+
+#ifdef COLOR_SENSOR_USE
+I2C i2c(p28,p27);           // カラーセンサ情報用I2C通信(SDA:p28, SCL:p29)
+#endif
+
+Ticker timer;               // 未使用
+
+unsigned short runMode;
+
+/* H8による受信割り込み処理 */
+void attachRx()
+{
+    unsigned char data=0;
+    int mode;
+    
+    __disable_irq(); // 受信処理中の割り込み禁止
+    if(serialH8.readable())
+    {
+        data = serialH8.getc();
+
+        // 前後左右のセンサ結果表示   
+        if(data&BIT_MASK_SENSOR_FR){
+            ledF = LED_ON;
+        }else{
+            ledF = LED_OFF;   
+        }
+        if(data&BIT_MASK_SENSOR_BR){
+            ledR = LED_ON;
+        }else{
+            ledR = LED_OFF;   
+        }
+        if(data&BIT_MASK_SENSOR_BL){
+            ledB = LED_ON;
+        }else{
+            ledB = LED_OFF;   
+        }
+        if(data&BIT_MASK_SENSOR_FL){
+            ledL = LED_ON;
+        }else{
+            ledL = LED_OFF;   
+        }
+        //モードに合わせて動作の制御
+        switch(runMode){
+        case STARTUP_MODE:
+            moveStop();            
+            break;
+        case RUN_MODE:
+            mode = setMove(data);
+#ifdef DEBUG
+            pc.printf("S=%x, M=%d\n",data,mode);
+#endif
+            break;
+        case BONUS_MODE:
+            BonusTime();
+            runMode = STOP_MODE;            
+            break;
+        case STOP_MODE:
+        default:
+            moveStop();            
+            break;
+        }
+    }
+    __enable_irq(); // 割り込み禁止を解除する
+}
+
+// 初期化処理
+void InitTentomon()
+{
+    runMode = STARTUP_MODE; //走行モードを始動前のモードに設定する。
+    moveStop();             // タイヤ初期化(停止)
+    ArmUp();                // アーム初期化(持ち上げ状態)
+    serialH8.baud(H8_SERIAL_BAUDRATE);  // H8ボーレート設定
+    serialH8.format(8,Serial::None,1);  //H8通信データフォーマット設定(DataBit:8bit,Parity:なし,StopBit:1)
+}
+
+// main処理
+int main() {
+    InitTentomon();
+     
+    // H8シリアル受信に割り込みをする
+    // (受信割り込みにより制御を実施)
+    serialH8.attach(&attachRx,Serial::RxIrq);
+        
+    while(1) {
+        //スタートスイッチが押された時、
+        //モードをライントレースモードに変更する。()
+        if(!startSw){
+            if(runMode==STARTUP_MODE){
+                runMode = RUN_MODE;
+            }
+        }
+    }
+}
+