Skip to content

Commit a53ea31

Browse files
committed
Initial commit of RCX Java API
1 parent 61f6e04 commit a53ea31

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+15318
-2
lines changed

COPYRIGHT

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
Copyright (C) 1998-2002 Dario Laverde
2+
3+
This library is free software; you can redistribute it and/or
4+
modify it under the terms of the GNU Lesser General Public
5+
License as published by the Free Software Foundation; either
6+
version 2 of the License, or (at your option) any later version.
7+
8+
This library is distributed in the hope that it will be useful,
9+
but WITHOUT ANY WARRANTY; without even the implied warranty of
10+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11+
Lesser General Public License for more details.
12+
13+
You should have received a copy of the GNU Lesser General Public
14+
License along with this library; if not, write to the Free Software
15+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
1-
# RCX-Java-API
2-
A platform-independent Java library used to develop RCX applications
1+
# RCX Java API
2+
A platform-independent Java library used to develop RCX applications
3+
4+
[Archive of Original Website](http://web.archive.org/web/20070628162541/http://www.escape.com/~dario/java/rcx/)
5+
6+
Please refer to the archived website for instructions and usage.

applet/RCXApplet.java

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import java.applet.*;
2+
import java.awt.*;
3+
4+
public class RCXApplet extends Applet
5+
{
6+
private RCXControl controlPanel;
7+
8+
public void init() {
9+
setBackground(Color.yellow);
10+
11+
String portName = getParameter("rcxport");
12+
13+
controlPanel = new RCXControl(portName);
14+
add(controlPanel);
15+
}
16+
}
17+

applet/RCXControl.java

+194
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
import java.awt.*;
2+
import java.awt.event.*;
3+
import java.io.*;
4+
import java.util.*;
5+
import rcx.RCXPort;
6+
import rcx.RCXErrorListener;
7+
import rcx.Motor;
8+
import rcx.Sensor;
9+
import rcx.SensorConstants;
10+
11+
public class RCXControl extends Panel implements ActionListener,
12+
RCXErrorListener, Runnable
13+
{
14+
private String portName;
15+
private RCXPort rcxPort;
16+
private Thread thisThread;
17+
private boolean isRunning;
18+
private Panel topPanel,bottomPanel;
19+
private TextField sensorField1,sensorField2,sensorField3;
20+
private Panel motorPanel1,motorPanel2,motorPanel3;
21+
private Button motor1fwd,motor1bwd,motor1stop,motor1float;
22+
private Button motor2fwd,motor2bwd,motor2stop,motor2float;
23+
private Button motor3fwd,motor3bwd,motor3stop,motor3float;
24+
private int s1value,s1prevalue,s2value,s2prevalue,s3value,s3prevalue;
25+
26+
public RCXControl(String portname) {
27+
28+
portName = portname;
29+
30+
topPanel = new Panel();
31+
topPanel.setLayout(new FlowLayout(FlowLayout.CENTER,4,4));
32+
bottomPanel = new Panel();
33+
bottomPanel.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
34+
motorPanel1 = new Panel();
35+
motorPanel1.setLayout(new BorderLayout(5,5));
36+
motorPanel2 = new Panel();
37+
motorPanel2.setLayout(new BorderLayout(5,5));
38+
motorPanel3 = new Panel();
39+
motorPanel3.setLayout(new BorderLayout(5,5));
40+
41+
sensorField1 = new TextField(9);
42+
sensorField1.setEditable(false);
43+
sensorField1.setEnabled(false);
44+
sensorField2 = new TextField(9);
45+
sensorField2.setEditable(false);
46+
sensorField2.setEnabled(false);
47+
sensorField3 = new TextField(9);
48+
sensorField3.setEditable(false);
49+
sensorField3.setEnabled(false);
50+
51+
motor1fwd = new Button("forward");
52+
motor1fwd.addActionListener(this);
53+
motor2fwd = new Button("forward");
54+
motor2fwd.addActionListener(this);
55+
motor3fwd = new Button("forward");
56+
motor3fwd.addActionListener(this);
57+
motor1bwd = new Button("backward");
58+
motor1bwd.addActionListener(this);
59+
motor2bwd = new Button("backward");
60+
motor2bwd.addActionListener(this);
61+
motor3bwd = new Button("backward");
62+
motor3bwd.addActionListener(this);
63+
motor1stop = new Button("stop");
64+
motor1stop.addActionListener(this);
65+
motor2stop = new Button("stop");
66+
motor2stop.addActionListener(this);
67+
motor3stop = new Button("stop");
68+
motor3stop.addActionListener(this);
69+
motor1float = new Button("float");
70+
motor1float.addActionListener(this);
71+
motor2float = new Button("float");
72+
motor2float.addActionListener(this);
73+
motor3float = new Button("float");
74+
motor3float.addActionListener(this);
75+
76+
topPanel.add(sensorField1);
77+
topPanel.add(sensorField2);
78+
topPanel.add(sensorField3);
79+
80+
motorPanel1.add(motor1fwd,"North");
81+
motorPanel1.add(motor1bwd,"South");
82+
motorPanel1.add(motor1float,"East");
83+
motorPanel1.add(motor1stop,"West");
84+
motorPanel2.add(motor2fwd,"North");
85+
motorPanel2.add(motor2bwd,"South");
86+
motorPanel2.add(motor2float,"East");
87+
motorPanel2.add(motor2stop,"West");
88+
motorPanel3.add(motor3fwd,"North");
89+
motorPanel3.add(motor3bwd,"South");
90+
motorPanel3.add(motor3float,"East");
91+
motorPanel3.add(motor3stop,"West");
92+
93+
bottomPanel.add(motorPanel1);
94+
bottomPanel.add(motorPanel2);
95+
bottomPanel.add(motorPanel3);
96+
97+
setLayout(new BorderLayout());
98+
add(topPanel,"North");
99+
add(bottomPanel,"South");
100+
setBackground(Color.yellow);
101+
102+
thisThread = new Thread(this);
103+
thisThread.start();
104+
}
105+
106+
public void run() {
107+
rcxPort = new RCXPort(portName);
108+
rcxPort.addRCXErrorListener(this);
109+
110+
Sensor.S1.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT,
111+
SensorConstants.SENSOR_MODE_PCT);
112+
Sensor.S2.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT,
113+
SensorConstants.SENSOR_MODE_PCT);
114+
Sensor.S3.setTypeAndMode(SensorConstants.SENSOR_TYPE_LIGHT,
115+
SensorConstants.SENSOR_MODE_PCT);
116+
isRunning=true;
117+
118+
sensorField1.setText("0");
119+
sensorField2.setText("0");
120+
sensorField3.setText("0");
121+
122+
while(isRunning) {
123+
// this delay can be adjusted or eliminated
124+
try{Thread.sleep(1000);}catch(Exception e) { }
125+
126+
s1value=Sensor.S1.readValue();
127+
if(s1value!=s1prevalue) {
128+
s1prevalue=s1value;
129+
sensorField1.setText(Integer.toString(s1value));
130+
}
131+
s2value=Sensor.S2.readValue();
132+
if(s2value!=s2prevalue) {
133+
s2prevalue=s2value;
134+
sensorField2.setText(Integer.toString(s2value));
135+
}
136+
s3value=Sensor.S3.readValue();
137+
if(s3value!=s3prevalue) {
138+
s3prevalue=s3value;
139+
sensorField3.setText(Integer.toString(s3value));
140+
}
141+
}
142+
}
143+
144+
public void actionPerformed(ActionEvent e) {
145+
Object obj = e.getSource();
146+
if(obj==motor1fwd) {
147+
Motor.A.forward();
148+
}
149+
else if(obj==motor1bwd) {
150+
Motor.A.backward();
151+
}
152+
else if(obj==motor1stop) {
153+
Motor.A.stop();
154+
}
155+
else if(obj==motor1float) {
156+
Motor.A.flt();
157+
}
158+
else if(obj==motor2fwd) {
159+
Motor.B.forward();
160+
}
161+
else if(obj==motor2bwd) {
162+
Motor.B.backward();
163+
}
164+
else if(obj==motor2stop) {
165+
Motor.B.stop();
166+
}
167+
else if(obj==motor2float) {
168+
Motor.B.flt();
169+
}
170+
else if(obj==motor3fwd) {
171+
Motor.C.forward();
172+
}
173+
else if(obj==motor3bwd) {
174+
Motor.C.backward();
175+
}
176+
else if(obj==motor3stop) {
177+
Motor.C.stop();
178+
}
179+
else if(obj==motor3float) {
180+
Motor.C.flt();
181+
}
182+
}
183+
184+
public void receivedError(String error) {
185+
System.err.println("Error: "+error);
186+
close();
187+
}
188+
189+
public void close() {
190+
isRunning=false;
191+
if(rcxPort!=null)
192+
rcxPort.close();
193+
}
194+
}

applet/RCXControlApp.java

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import java.awt.*;
2+
import java.awt.event.*;
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class RCXControlApp extends Frame implements WindowListener
7+
{
8+
private RCXControl controlPanel;
9+
10+
public static void main(String[] args) {
11+
if(args.length>0) {
12+
new RCXControlApp(args[0]);
13+
} else System.out.println("Usage: RCXControlApp portname");
14+
}
15+
16+
public RCXControlApp(String portName) {
17+
super("RCX Control Application");
18+
19+
addWindowListener(this);
20+
21+
controlPanel = new RCXControl(portName);
22+
setLayout(new FlowLayout());
23+
24+
add(controlPanel);
25+
26+
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
27+
setBounds(screen.width/5,screen.height/5,280,150);
28+
setVisible(true);
29+
}
30+
31+
public void windowActivated(WindowEvent e) { }
32+
public void windowClosed(WindowEvent e) { }
33+
public void windowDeactivated(WindowEvent e) { }
34+
public void windowDeiconified(WindowEvent e) { }
35+
public void windowIconified(WindowEvent e) { }
36+
public void windowOpened(WindowEvent e) { }
37+
public void windowClosing(WindowEvent e) {
38+
if(controlPanel !=null)
39+
controlPanel.close();
40+
System.exit(0);
41+
}
42+
}

applet/RCXSensorEmulation.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import java.awt.*;
2+
import java.awt.event.*;
3+
import java.io.*;
4+
import java.util.*;
5+
import rcx.Sensor;
6+
7+
public class RCXSensorEmulation implements Runnable
8+
{
9+
private Thread thisThread;
10+
private boolean isRunning;
11+
12+
public RCXSensorEmulation() {
13+
thisThread = new Thread(this);
14+
thisThread.start();
15+
}
16+
17+
public void run() {
18+
isRunning=true;
19+
while(isRunning) {
20+
try {Thread.sleep(1000);} catch(Exception e) { }
21+
switch((int)(Math.random()*5)+1) {
22+
case 1: Sensor.S1.setPreviousValue((int)(Math.random()*1024)+1);
23+
break;
24+
case 2: Sensor.S2.setPreviousValue((int)(Math.random()*1024)+1);
25+
break;
26+
case 3: Sensor.S3.setPreviousValue((int)(Math.random()*1024)+1);
27+
break;
28+
case 4: try {Thread.sleep(3000);} catch(Exception e) { }
29+
break;
30+
}
31+
}
32+
}
33+
34+
public void stop() {
35+
isRunning=false;
36+
}
37+
}
38+

applet/RCXSimpleTest.java

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import rcx.RCXPort;
2+
import rcx.RCXErrorListener;
3+
4+
public class RCXSimpleTest implements RCXErrorListener {
5+
6+
public static void main(String[] args) {
7+
String cmd = null;
8+
if(args.length>0)
9+
cmd = args[0];
10+
new RCXSimpleTest(cmd);
11+
}
12+
13+
public RCXSimpleTest(String cmd) {
14+
15+
RCXPort port = new RCXPort(cmd);
16+
port.addRCXErrorListener(this);
17+
18+
// set motor A direction (forwards)
19+
port.send("e181");
20+
// turn motor A on
21+
port.send("2181");
22+
23+
// play sound
24+
port.send("5105");
25+
26+
//delay for a sec
27+
try { Thread.sleep(1000); } catch(Exception e) { }
28+
29+
// turn motor A off (float, 2141 is stop)
30+
port.send("2141");
31+
}
32+
33+
public void receivedMessage(byte[] message) {
34+
35+
// simply convert to String and print the message
36+
StringBuffer strbuffer = new StringBuffer();
37+
for(int loop = 0; loop < message.length; loop++) {
38+
int abyte = (int) message[loop];
39+
if (abyte < 0) abyte += 256;
40+
strbuffer.append(Integer.toHexString(abyte) + " ");
41+
}
42+
System.out.println("Response: " + strbuffer.toString());
43+
}
44+
45+
public void receivedError(String error) {
46+
System.err.println("Error: " + error);
47+
}
48+
}

0 commit comments

Comments
 (0)