\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
#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
#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
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
\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