My problem is the action() methods of the other behaviors are never called even when their takeControl() methods return true. Are there known problems with the subsumption implementation?
Any help or guidance would be appreciated.
Mike
--------------
- Code: Select all
import lejos.subsumption.*;
import lejos.nxt.*;
import java.io.*;
public class DriveForward implements Behavior {
public boolean takeControl() {
return true;
}
public void suppress() {
LCD.drawString("Forward suppress", 0, 4);
Motor.B.stop();
Motor.C.stop();
}
public void action() {
LCD.drawString("Forward action ", 0, 4);
Motor.B.forward();
Motor.C.forward();
}
}
- Code: Select all
import lejos.subsumption.*;
import lejos.nxt.*;
import java.io.*;
public class TouchObject implements Behavior {
public TouchSensor touch = new TouchSensor(SensorPort.S2);
public boolean takeControl() {
return touch.isPressed();
}
public void suppress() {
LCD.drawString("TchObj suppress", 0, 3);
Motor.B.stop();
Motor.C.stop();
}
public void action() {
LCD.drawString("TchObj action ", 0, 3);
// Back up:
Motor.B.backward();
Motor.C.backward();
try{Thread.sleep(1000);}catch(Exception e) {}
// Rotate by causing only one wheel to stop:
Motor.B.stop();
try{Thread.sleep(300);}catch(Exception e) {}
Motor.C.stop();
}
}
- Code: Select all
import lejos.subsumption.*;
import lejos.nxt.*;
import java.io.*;
public class DetectObject implements Behavior {
public UltrasonicSensor sonic = new UltrasonicSensor(SensorPort.S1);
public boolean takeControl() {
int distance = sonic.getDistance();
return distance < 30;
}
public void suppress() {
LCD.drawString("DetObj suppress", 0, 2);
Motor.B.stop();
Motor.C.stop();
}
public void action() {
LCD.drawString("DetObj action ", 0, 2);
// Back up:
Motor.B.backward();
Motor.C.backward();
try{Thread.sleep(1000);}catch(Exception e) {}
// Rotate by causing only one wheel to stop:
Motor.B.stop();
try{Thread.sleep(1000);}catch(Exception e) {}
Motor.C.stop();
}
}
- Code: Select all
import lejos.subsumption.*;
import lejos.nxt.*;
public class TankBot {
public static void main(String [] args) {
LCD.clear();
Behavior b1 = new DriveForward();
Behavior b2 = new TouchObject();
Behavior b3 = new DetectObject();
Behavior [] bArray = {b1, b2, b3};
Arbitrator arby = new Arbitrator(bArray);
arby.start();
}
}
