OSDN Git Service

Replace samples.
[nxt-jsp/etrobo-atk.git] / nxtOSEK / samples_c++ / cpptest1 / cpptest1.cc
1 //\r
2 // cpptest1.cc\r
3 //\r
4 // Sample for C++ and LEJOS-OSEK\r
5 //\r
6 // Written 20-jan-2008 by rwk\r
7 //\r
8 // Copyright 2007, 2008 by Takashi Chikamasa and Robert W. Kramer\r
9 //\r
10 \r
11 #include <Motor.h>\r
12 #include <TouchSensor.h>\r
13 \r
14 //\r
15 // To properly interface with LEJOS-OSEK, we need to use C linkage between our\r
16 // code and LEJOS-OSEK\r
17 //\r
18 \r
19 extern "C" {\r
20 \r
21   #include "ecrobot_interface.h"\r
22 \r
23   // Port configration for Sensor and Motor\r
24   \r
25   Motor motor(NXT_PORT_C);\r
26   TouchSensor touch(NXT_PORT_S4);\r
27 \r
28   //\r
29   // Main task (thread) declarations\r
30   //\r
31   // You need one DeclareTask( ) per task/thread\r
32   //\r
33 \r
34   DeclareTask(MotorTask);\r
35   DeclareTask(TouchTask);\r
36 \r
37   //\r
38   // User tasks go here.\r
39   //\r
40 \r
41   enum { FORWARD,STOP };\r
42 \r
43   int robotAction = STOP;\r
44 \r
45   TASK(MotorTask)\r
46   {\r
47 \r
48     if (robotAction == FORWARD)\r
49     {\r
50       motor.setPower(75);\r
51       motor.forward();\r
52     }\r
53     else if (robotAction == STOP)\r
54     {\r
55       motor.stop();\r
56     }\r
57 \r
58     //\r
59     // your task should end like this unless it's a one-shot task\r
60     //\r
61 \r
62     TaskType t;\r
63     GetTaskID(&t);\r
64     ChainTask(t);\r
65   }\r
66 \r
67   TASK(TouchTask)\r
68   {\r
69 \r
70     if (touch.isPressed())\r
71     {\r
72         robotAction = FORWARD;\r
73     }\r
74     else\r
75     {\r
76         robotAction = STOP;\r
77     }\r
78 \r
79     //\r
80     // your task should end like this unless it's a one-shot task\r
81     //\r
82 \r
83     TaskType t;\r
84     GetTaskID(&t);\r
85     ChainTask(t);\r
86   }\r
87         \r
88 }\r