OSDN Git Service

キャリブレーションの処理をリファクタリングした。
[tondenhei/et2013.git] / main.cpp
index a13d182..1a02292 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -2,7 +2,8 @@
 \r
 // ECRobot++ API\r
 #include "Lcd.h"\r
-#include "BlueTooth.h"\r
+#include "Bluetooth.h"\r
+#include "BTConnection.h"\r
 #include "Clock.h"\r
 #include "GyroSensor.h"\r
 #include "LightSensor.h"\r
@@ -16,6 +17,9 @@
 #include "ETLineTracer.h"\r
 #include "ETLinePos.h"\r
 #include "ETBalanceRunner.h"\r
+#include "ETTailControl.h"\r
+#include "context.h"\r
+#include "ETUtility.h"\r
 \r
 using namespace ecrobot;\r
 \r
@@ -25,6 +29,7 @@ extern "C"
 #include "kernel_id.h"\r
 #include "ecrobot_interface.h"\r
 \r
+DeclareTask(TaskMain);\r
 DeclareCounter(SysTimerCnt);//Alarm\97\98\97p\8e\9e\95K\97v\r
 \r
 // global object instances\r
@@ -44,6 +49,20 @@ Motor motorL(PORT_C);
 ETBalanceRunner runner(motorL,motorR,gyro,nxt);\r
 ETLinePos linepos(light);\r
 ETLineTracer tracer(linepos,runner);\r
+ETTailControl tailcontroler(motorT,0);\r
+ContextStuff::Context context;\r
+\r
+/* \83f\83o\83C\83X\8fI\97¹\97p\83t\83b\83N\8aÖ\90\94 */\r
+/* \82±\82Ì\8aÖ\90\94\82ÍSTOP\82Ü\82½\82ÍEXIT\83{\83^\83\93\82ª\89\9f\82³\82ê\82½\8e\9e\82É\8eÀ\8ds\82³\82ê\82Ü\82·\81B */\r
+void ecrobot_device_terminate()\r
+{\r
+       /* \83Z\83\93\83T\81A\83\82\81[\83^\82È\82Ç\82Ì\8ae\83f\83o\83C\83X\82Ì\8fI\97¹\8aÖ\90\94\82ð\r
+        * \82±\82±\82Å\8eÀ\91\95\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\r
+        * \81Ë\81@\8cõ\83Z\83\93\83T\90Ô\90FLED\82ðOFF\82É\82·\82é\r
+        */\r
+       //ecrobot_set_light_sensor_inactive(SENSOR_LIGHT);\r
+       ecrobot_term_bt_connection(); /* Bluetooth\92Ê\90M\82ð\8fI\97¹ */                                                 //ex4\r
+}\r
 \r
 // nxtOSEK hook to be invoked from an ISR in category 2\r
 void user_1ms_isr_type2(void)\r
@@ -60,23 +79,59 @@ void user_1ms_isr_type2(void)
 \r
 TASK(TaskMain)\r
 {\r
+    //bt.setFriendlyName(DEVICE_NAME);\r
+       BTConnection btConnection(bt, lcd, nxt);\r
+       btConnection.connect(ETBluetoothString::PASS_KEY);\r
        lcd.clear();\r
        lcd.putf("s", "Hello World");\r
        lcd.disp();\r
+    tailcontroler.Init();\r
+    tailcontroler.SetAngle(ETTailControl::ANGLE_STAND_UP);\r
+\r
+       // \83L\83\83\83\8a\83u\83\8c\81[\83V\83\87\83\93\r
+       // \83W\83\83\83C\83\8d\r
+       while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
+    unsigned long offset = ETUtilityStuff::GetOffset(gyro,clock);\r
+       runner.SetGyroOffset(offset);\r
+    //display to LCD\r
+    ETUtilityStuff::DisplayCalibResult(lcd,speaker,"Offset = %d",offset,1000,1);\r
+\r
+       // \94\92\r
+       while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
+    unsigned long white = ETUtilityStuff::GetOffset(light,clock);\r
+       linepos.SetWhite(white);\r
+    //display to LCD\r
+    ETUtilityStuff::DisplayCalibResult(lcd,speaker,"White = %d",white,1200,2);\r
 \r
+       // \8d\95\r
+       while(!ETUtilityStuff::Istouched(touch,tailcontroler)) {}\r
+    unsigned long black = ETUtilityStuff::GetOffset(light,clock);\r
+       linepos.SetBlack(black);\r
+    //display to LCD\r
+    ETUtilityStuff::DisplayCalibResult(lcd,speaker,"Black = %d",black,1400,3);\r
+\r
+    //wait for touch or bluetooth.\r
+    ETUtilityStuff::Waitstart(touch,tailcontroler,ETBluetoothString::CMD_START);\r
+\r
+       tailcontroler.SetAngle(ETTailControl::ANGLE_DRIVE);\r
+    context.SetETLineTracer(&tracer);\r
        TerminateTask();\r
 }\r
 \r
 TASK(Task4ms)\r
 {\r
-       static int cnt = 0;\r
-       char str[16+1];\r
-       lcd.clear();\r
-       tsprintf(str,"cnt = %d",cnt++); // tsprintf \8eg\97p\97á\r
-       lcd.putf("s",str);\r
-       lcd.disp();\r
-\r
-       tracer.RunTrace(100);\r
+       if(touch.isPressed()){\r
+//             motorR.setPWM(0);\r
+//             motorL.setPWM(0);\r
+               tracer.Stop();\r
+               tracer.Reset();\r
+               ActivateTask(TaskMain);\r
+               TerminateTask();\r
+               return;\r
+       }\r
+    context.Display(lcd);\r
+    context.CyclicExcute();\r
+    tailcontroler.Control();\r
 \r
        TerminateTask();\r
 }\r