4 // Test of C++ and LEJOS-OSEK with TurtleBot II
\r
6 // Written 20-jan-2008 by rwk
\r
8 // Copyright 2007, 2008 by Takashi Chikamasa and Robert W. Kramer
\r
12 #include <SonarSensor.h>
\r
15 // To properly interface with LEJOS-OSEK, we need to use C linkage between our
\r
16 // code and LEJOS-OSEK
\r
21 #include "ecrobot_interface.h"
\r
23 // Port configration for Sensor and Motor
\r
25 Motor leftMotor(NXT_PORT_A);
\r
26 Motor rightMotor(NXT_PORT_B);
\r
27 SonarSensor sonar(NXT_PORT_S1);
\r
30 // Main task (thread) declarations
\r
32 // You need one DeclareTask( ) per task/thread
\r
35 DeclareTask(LeftMotorTask);
\r
36 DeclareTask(RightMotorTask);
\r
37 DeclareTask(SonarTask);
\r
40 // LEJOS OSEK callback hooks
\r
43 void ecrobot_device_initialize(void)
\r
48 void ecrobot_device_terminate(void)
\r
53 //===========================================================================
\r
54 // User tasks go here.
\r
57 enum { FORWARD,BACKWARD,LEFT_TURN,RIGHT_TURN,STOP };
\r
59 int robotAction = FORWARD;
\r
61 void showMessage(char* msg)
\r
64 display_goto_xy(0, 0);
\r
65 display_string(msg);
\r
72 leftMotor.setPower(75);
\r
74 if (robotAction == FORWARD || robotAction == RIGHT_TURN)
\r
76 leftMotor.forward();
\r
78 else if (robotAction != STOP)
\r
80 leftMotor.backward();
\r
88 // your task should end like this unless it's a one-shot task
\r
96 TASK(RightMotorTask)
\r
99 rightMotor.setPower(75);
\r
101 if (robotAction == FORWARD || robotAction == LEFT_TURN)
\r
103 rightMotor.forward();
\r
105 else if (robotAction != STOP)
\r
107 rightMotor.backward();
\r
115 // your task should end like this unless it's a one-shot task
\r
125 int d = sonar.getDistance();
\r
129 robotAction = STOP;
\r
130 showMessage("STOP");
\r
134 robotAction = BACKWARD;
\r
135 showMessage("BACKWARD");
\r
139 robotAction = STOP;
\r
140 showMessage("STOP");
\r
144 robotAction = LEFT_TURN;
\r
145 showMessage("LEFT_TURN");
\r
149 robotAction = STOP;
\r
150 showMessage("STOP");
\r
154 d = sonar.getDistance();
\r
156 robotAction = RIGHT_TURN;
\r
157 showMessage("RIGHT_TURN");
\r
161 robotAction = STOP;
\r
162 showMessage("STOP");
\r
166 if (d > sonar.getDistance())
\r
168 robotAction = LEFT_TURN;
\r
169 showMessage("LEFT_TURN");
\r
173 robotAction = STOP;
\r
174 showMessage("STOP");
\r
180 robotAction = FORWARD;
\r
181 showMessage("FORWARD");
\r
185 // your task should end like this unless it's a one-shot task
\r