// ECRobot++ API\r
#include "Lcd.h"\r
#include "Bluetooth.h"\r
+#include "BTConnection.h"\r
#include "Clock.h"\r
#include "GyroSensor.h"\r
#include "LightSensor.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 "1234" /* 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
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
\r
// nxtOSEK hook to be invoked from an ISR in category 2\r
void user_1ms_isr_type2(void)\r
}\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
+bool is_touched(TouchSensor& touch,ETTailControl& tailcontroler)\r
+{\r
+ tailcontroler.Control();\r
+ if(touch.isPressed()){\r
+ systick_wait_ms(30);\r
+ while(touch.isPressed()){\r
+ tailcontroler.Control();\r
+ }\r
+ systick_wait_ms(30);\r
+ return true;\r
+ }\r
+ return false;\r
+}\r
+\r
+\r
+void waitstart(TouchSensor& touch,ETTailControl& tailcontroler,char cmd)\r
+{\r
+ /* \83^\83b\83`\83Z\83\93\83T\82ª\89\9f\82³\82ê\82é\82Ü\82Å\81A\91Ò\82¿\91±\82¯\82é */\r
+ while(1){\r
+ if (is_touched(touch,tailcontroler)){\r
+ break;\r
+ }\r
+ if (Bluetooth_isReceived(CMD_START)){ \r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
TASK(TaskMain)\r
{\r
+ //bt.setFriendlyName(DEVICE_NAME);\r
+ BTConnection btConnection(bt, lcd, nxt);\r
+ btConnection.connect(PASS_KEY);\r
lcd.clear();\r
lcd.putf("s", "Hello World");\r
lcd.disp();\r
unsigned long sum = 0;\r
char str[16+1];\r
// \83W\83\83\83C\83\8d\r
- while(!touch.isPressed()){\r
- tailcontroler.Control();\r
- }\r
- while(touch.isPressed()){\r
- }\r
+ while(!is_touched(touch,tailcontroler)) {}\r
for(int i=0;i<sum_num;i++){\r
sum += gyro.get();\r
clock.wait(10);\r
speaker.playTone(1000,100,50);\r
\r
// \94\92\r
- while(!touch.isPressed()){\r
- tailcontroler.Control();\r
- }\r
- while(touch.isPressed()){\r
- }\r
+ while(!is_touched(touch,tailcontroler)) {}\r
sum = 0;\r
for(int i=0;i<sum_num;i++){\r
sum += light.getBrightness();\r
speaker.playTone(1200,100,50);\r
\r
// \8d\95\r
- while(!touch.isPressed()){\r
- tailcontroler.Control();\r
- }\r
- while(touch.isPressed()){\r
- }\r
+ while(!is_touched(touch,tailcontroler)) {}\r
sum = 0;\r
for(int i=0;i<sum_num;i++){\r
sum += light.getBrightness();\r
lcd.disp();\r
speaker.playTone(1400,100,50);\r
\r
- while(!touch.isPressed()){\r
- tailcontroler.Control();\r
- }\r
- while(touch.isPressed()){\r
- }\r
+ //wait for touch or bluetooth.\r
+ waitstart(touch,tailcontroler,CMD_START);\r
+\r
tailcontroler.SetAngle(ETTailControl::ANGLE_DRIVE);\r
context.SetETLineTracer(&tracer);\r
TerminateTask();\r
\r
TASK(Task4ms)\r
{\r
-// if(touch.isPressed()){\r
-// ActivateTask(TaskMain);\r
-// TerminateTask();\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