OSDN Git Service

ETBalanceRunnerの不具合修正とStopで止まるようにした
[tondenhei/et2013.git] / main.cpp
index e0ea1b3..7645d2c 100644 (file)
--- a/main.cpp
+++ b/main.cpp
 #include "ETLineTracer.h"\r
 #include "ETLinePos.h"\r
 #include "ETBalanceRunner.h"\r
+#include "ETTailControl.h"\r
+#include "context.h"\r
 \r
 using namespace ecrobot;\r
 \r
+/* sample_c4\83}\83N\83\8d */\r
+#define DEVICE_NAME       "ET277"  /* Bluetooth\92Ê\90M\97p\83f\83o\83C\83X\96¼ */                                     /* \83`\81[\83\80ID\82É\95Ï\8dX\82µ\82Ä\82­\82¾\82³\82¢ */\r
+#define PASS_KEY          "2345" /* Bluetooth\92Ê\90M\97p\83p\83X\83L\81[ */                                         /* \8cÅ\97L\82Ì\83p\83X\83L\81[\82ð\90Ý\92è\82µ\82Ä\82­\82¾\82³\82¢ */\r
+#define CMD_START         '1'    /* \83\8a\83\82\81[\83g\83X\83^\81[\83g\83R\83}\83\93\83h */\r
+#define CMD_STOP          '9'    /* \83\8a\83\82\81[\83g\83X\83g\83b\83v\83R\83}\83\93\83h */\r
+\r
+\r
 extern "C"\r
 {\r
 #include "kernel.h"\r
 #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,7 +54,34 @@ 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\8f\89\8aú\89»\97p\83t\83b\83N\8aÖ\90\94 */\r
+/* \82±\82Ì\8aÖ\90\94\82ÍnxtOSEK\8bN\93®\8e\9e\82É\8eÀ\8ds\82³\82ê\82Ü\82·\81B */\r
+void ecrobot_device_initialize()\r
+{\r
+       /* \83Z\83\93\83T\81A\83\82\81[\83^\82È\82Ç\82Ì\8ae\83f\83o\83C\83X\82Ì\8f\89\8aú\89»\8aÖ\90\94\82ð\r
+        * \82±\82±\82Å\8eÀ\91\95\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\r
+        * \81Ë\81@\8cõ\83Z\83\93\83T\90Ô\90FLED\82ðON\82É\82·\82é\r
+        */\r
+       //ecrobot_set_light_sensor_active(SENSOR_LIGHT);\r
+       ecrobot_init_bt_slave(PASS_KEY); /* Bluetooth\92Ê\90M\8f\89\8aú\89» */                                              //ex4\r
+}\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
\r
 // nxtOSEK hook to be invoked from an ISR in category 2\r
 void user_1ms_isr_type2(void)\r
 {\r
@@ -58,25 +95,144 @@ void user_1ms_isr_type2(void)
     }\r
 }\r
 \r
+/* Bluetooth\92Ê\90M\97p\83f\81[\83^\8eó\90M\83o\83b\83t\83@ */\r
+static char rx_buf[BT_MAX_RX_BUF_SIZE];\r
+\r
+/*****************************************************************************\r
\8aÖ\90\94\96¼ : Bluetooth_isReceived\r
\88ø  \90\94 : \8eó\90M\91Ò\82¿\83R\83}\83\93\83h\r
\95Ô\82è\92l : 1(\83X\83^\81[\83g)/0(\91Ò\8b@)\r
\8aT  \97v : Bluetooth\92Ê\90M\82É\82æ\82é\83\8a\83\82\81[\83g\83X\83^\81[\83g\81B Tera Term\82È\82Ç\82Ì\83^\81[\83~\83i\83\8b\83\\83t\83g\82©\82ç\81A\r
+          ASCII\83R\81[\83h\82Å1\82ð\91\97\90M\82·\82é\82Æ\81A\83\8a\83\82\81[\83g\83X\83^\81[\83g\82·\82é\81B\r
+ *****************************************************************************/\r
+BOOL Bluetooth_isReceived(char cmd)\r
+{\r
+       int i;\r
+       unsigned int rx_len;\r
+       unsigned char come = 0;\r
+\r
+       for (i=0; i<BT_MAX_RX_BUF_SIZE; i++)\r
+       {\r
+               rx_buf[i] = 0; /* \8eó\90M\83o\83b\83t\83@\82ð\83N\83\8a\83A */\r
+       }\r
+\r
+       rx_len = ecrobot_read_bt(rx_buf, 0, BT_MAX_RX_BUF_SIZE);\r
+       if (rx_len > 0)\r
+       {\r
+               /* \8eó\90M\83f\81[\83^\82 \82è */\r
+               if (rx_buf[0] == cmd)\r
+               {\r
+                       come = 1; /* \83R\83}\83\93\83h\8eó\90M */\r
+               }\r
+               ecrobot_send_bt(rx_buf, 0, rx_len); /* \8eó\90M\83f\81[\83^\82ð\83G\83R\81[\83o\83b\83N */\r
+       }\r
+\r
+       return (BOOL)come;\r
+}\r
+\r
+\r
 TASK(TaskMain)\r
 {\r
+    bt.setFriendlyName(DEVICE_NAME);\r
        lcd.clear();\r
        lcd.putf("s", "Hello World");\r
        lcd.disp();\r
+    tailcontroler.Init();\r
+    tailcontroler.SetAngle(ETTailControl::ANGLE_STAND_UP);\r
 \r
-       TerminateTask();\r
-}\r
 \r
-TASK(Task4ms)\r
-{\r
-       static int cnt = 0;\r
+       // TODO:\82Æ\82è\82 \82¦\82¸\82Ì\83L\83\83\83\8a\83u\83\8c\81[\83V\83\87\83\93\r
+       static const int sum_num = 256;\r
+       unsigned long sum = 0;\r
        char str[16+1];\r
-       lcd.clear();\r
-       tsprintf(str,"cnt = %d",cnt++); // tsprintf \8eg\97p\97á\r
+       // \83W\83\83\83C\83\8d\r
+       while(!touch.isPressed()){\r
+        tailcontroler.Control();\r
+       }\r
+       while(touch.isPressed()){\r
+       }\r
+       for(int i=0;i<sum_num;i++){\r
+               sum += gyro.get();\r
+               clock.wait(10);\r
+       }\r
+       unsigned long offset = sum / sum_num;\r
+       runner.SetGyroOffset(offset);\r
+       tsprintf(str,"Offset = %d",offset);\r
+       lcd.cursor(0,1);\r
        lcd.putf("s",str);\r
        lcd.disp();\r
+       speaker.playTone(1000,100,50);\r
 \r
-       tracer.RunTrace(100);\r
+       // \94\92\r
+       while(!touch.isPressed()){\r
+        tailcontroler.Control();\r
+       }\r
+       while(touch.isPressed()){\r
+       }\r
+       sum = 0;\r
+       for(int i=0;i<sum_num;i++){\r
+               sum += light.getBrightness();\r
+               clock.wait(10);\r
+       }\r
+       unsigned long white = sum / sum_num;\r
+       linepos.SetWhite(white);\r
+       tsprintf(str,"White = %d",white);\r
+       lcd.cursor(0,2);\r
+       lcd.putf("s",str);\r
+       lcd.disp();\r
+       speaker.playTone(1200,100,50);\r
+\r
+       // \8d\95\r
+       while(!touch.isPressed()){\r
+        tailcontroler.Control();\r
+       }\r
+       while(touch.isPressed()){\r
+       }\r
+       sum = 0;\r
+       for(int i=0;i<sum_num;i++){\r
+               sum += light.getBrightness();\r
+               clock.wait(10);\r
+       }\r
+       unsigned long black = sum / sum_num;\r
+       linepos.SetBlack(black);\r
+       tsprintf(str,"Black = %d",black);\r
+       lcd.cursor(0,3);\r
+       lcd.putf("s",str);\r
+       lcd.disp();\r
+       speaker.playTone(1400,100,50);\r
+\r
+\r
+       while(!touch.isPressed()){\r
+        tailcontroler.Control();\r
+       }\r
+       while(touch.isPressed()){\r
+       }\r
+/*    while(1){\r
+        tailcontroler.Control();\r
+        if(Bluetooth_isReceived(CMD_START)){\r
+            break;\r
+        }\r
+    }\r
+*/\r
+       tailcontroler.SetAngle(ETTailControl::ANGLE_DRIVE);\r
+    context.SetETLineTracer(&tracer);\r
+       TerminateTask();\r
+}\r
+\r
+TASK(Task4ms)\r
+{\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