import nanovm.nibobee.drivers.Clock;
import nanovm.nibobee.drivers.Motor;
import nanovm.nibobee.drivers.Sensor;
/** NibobeeObstacleExample.java
*
*
* @see code based on nicai-systems c-library
* @author Torsten Röhl <informatics4kids.de>
*/
class NibobeeObstacleExample {
static final int MODE_STOP = 1;
static final int MODE_DRIVE = 2;
static final int MODE_BACK = 3;
static final int MODE_STEER_R = 4;
static final int MODE_STEER_L = 5;
static final int MODE_AVOID_R = 6;
static final int MODE_AVOID_L = 7;
static int counter_ms = 0;
static public int perform_check(int mode) {
if ((Sensor.getLeft() != 0) && (Sensor.getRight() != 0)) {
if ((Sensor.getLeft() == -1) && (Sensor.getRight() == -1)) {
mode = MODE_BACK;
} else {
mode = MODE_STOP;
}
}
return mode;
}
static public int do_stop() {
if ((Sensor.getLeft() == 0) && (Sensor.getRight() == 0)) {
return MODE_DRIVE;
}
return MODE_STOP;
}
static public int do_drive() {
if (Sensor.getRight() == 1)
return MODE_STEER_L;
if (Sensor.getLeft() == 1)
return MODE_STEER_R;
if (Sensor.getRight() == -1)
return MODE_AVOID_L;
if (Sensor.getLeft() == -1)
return MODE_AVOID_R;
return MODE_DRIVE;
}
static public int do_back() {
if (Sensor.getLeft() == 0)
return MODE_AVOID_L;
if (Sensor.getRight() == 0)
return MODE_AVOID_R;
return MODE_BACK;
}
static public int do_steer_r() {
if (Sensor.getLeft() == 0)
return MODE_DRIVE;
return MODE_STEER_R;
}
static public int do_steer_l() {
if (Sensor.getRight() == 0)
return MODE_DRIVE;
return MODE_STEER_L;
}
static public int do_avoid_r() {
if (counter_ms == 0) {
counter_ms = 1000;
} else {
counter_ms--;
}
if (counter_ms > 0) {
return MODE_AVOID_R;
} else {
return MODE_DRIVE;
}
}
static public int do_avoid_l() {
if (counter_ms == 0) {
counter_ms = 1000;
} else {
counter_ms--;
}
if (counter_ms > 0) {
return MODE_AVOID_L;
} else {
return MODE_DRIVE;
}
}
public static void main(String[] args) {
final int MODE_STOP = 1;
final int MODE_DRIVE = 2;
final int MODE_BACK = 3;
final int MODE_STEER_R = 4;
final int MODE_STEER_L = 5;
final int MODE_AVOID_R = 6;
final int MODE_AVOID_L = 7;
int speed_l = 500;
int speed_r = 500;
int mode = 2;
while (1 == 1) {
Clock.delayMilliseconds(1);
mode = perform_check(mode);
switch (mode) {
case MODE_STOP:
mode = do_stop();
break;
case MODE_DRIVE:
mode = do_drive();
break;
case MODE_BACK:
mode = do_back();
break;
case MODE_STEER_R:
mode = do_steer_r();
break;
case MODE_STEER_L:
mode = do_steer_l();
break;
case MODE_AVOID_R:
mode = do_avoid_r();
break;
case MODE_AVOID_L:
mode = do_avoid_l();
break;
}
switch (mode) {
case MODE_STOP:
speed_l = 0;
speed_r = 0;
break;
case MODE_DRIVE:
speed_l = 500;
speed_r = 500;
break;
case MODE_BACK:
speed_l = -500;
speed_r = -500;
break;
case MODE_STEER_R:
speed_l = 600;
speed_r = 400;
break;
case MODE_STEER_L:
speed_l = 400;
speed_r = 600;
break;
case MODE_AVOID_R:
speed_l = -400;
speed_r = -600;
break;
case MODE_AVOID_L:
speed_l = -600;
speed_r = -400;
break;
}
Motor.setPWM(speed_l, speed_r);
}
}
}