/* IrTest.java (c) 2007 Nils Springob <nils@nicai-systems.de> */ import nanovm.ctbot.drivers.Display; import nanovm.ctbot.drivers.DistanceSensor; import nanovm.ctbot.drivers.IrReceiver; import nanovm.ctbot.drivers.Leds; import nanovm.lang.Math; import nanovm.util.Formatter; import ctbot.utils.*; class NavigatorTest { private static final int IR_DEV = 0x0040; private static final int IR_MASK = 0x07ff; private static final int IR_COMAMND_0 = 0*IR_DEV + 0; private static final int IR_COMAMND_1 = 0*IR_DEV + 1; private static final int IR_COMAMND_2 = 0*IR_DEV + 2; private static final int IR_COMAMND_3 = 0*IR_DEV + 3; private static final int IR_COMAMND_4 = 0*IR_DEV + 4; private static final int IR_COMAMND_5 = 0*IR_DEV + 5; public static void updatePos(){ Odometry.update(); Display.gotoXY(0,1); Display.print(Formatter.format(Odometry.x, "x=%+8.3f")); Display.gotoXY(0,2); Display.print(Formatter.format(Odometry.y, "y=%+8.3f")); Display.gotoXY(0,3); Display.print(Formatter.format(nanovm.lang.Math.toDegrees(Odometry.ori), "ori=%+4.0f")); Display.gotoXY(12,1); Display.print(Formatter.format(FreeDist.left, "l=%4.2f ")); Display.gotoXY(12,2); Display.print(Formatter.format(FreeDist.right, "r=%4.2f ")); } public static void execute(){ updatePos(); Leds.set(Leds.WHITE); if (Navigator.work()){ if (Navigator.nextGoal!=null) { if (Navigator.nextGoal.subGoal!=null) Leds.set(Leds.YELLOW); else if (Navigator.nextGoal.nextGoal!=null) Leds.set(Leds.ORANGE); else Leds.set(Leds.RED); } else Leds.set(Leds.WHITE); }else{ Leds.set(Leds.GREEN); } } public static void main(String[] args) { Leds.set(Leds.WHITE); Display.clear(); Display.gotoXY(0, 0); Display.print("DriverTest"); DistanceSensor.setEnabled(true); int lastcmd = 0; while(true) { int cmd = IrReceiver.getCommand(); if ((cmd!=0) & (cmd!=lastcmd)) { lastcmd=cmd; switch(cmd & IR_MASK) { case IR_COMAMND_0: Display.gotoXY(10, 0); Display.print("STOP"); while(Navigator.popGoal()!=null); break; case IR_COMAMND_1: Display.gotoXY(10, 0); Display.print("HOME"); Navigator.appendGoal(new NaviGoalRoughlyPos(0.0f, 0.0f, 0.05f, false)); Navigator.appendGoal(new NaviGoalFinePos(0.0f, 0.0f, 0.05f)); Navigator.appendGoal(new NaviGoalOri(0.0f, 0.04f)); break; case IR_COMAMND_2: Display.gotoXY(10, 0); Display.print("BACK"); Navigator.appendGoal(new NaviGoalOri(Math.PI, 0.04f)); break; case IR_COMAMND_3: Display.gotoXY(10, 0); Display.print("POS3"); Navigator.appendGoal(new NaviGoalRoughlyPos(0.2f, 0.2f, 0.05f, false)); break; case IR_COMAMND_4: Display.gotoXY(10, 0); Display.print("POS4"); Navigator.appendGoal(new NaviGoalRoughlyPos(0.4f, 0.1f, 0.05f, false)); break; case IR_COMAMND_5: Display.gotoXY(10, 0); Display.print("POS5"); Navigator.appendGoal(new NaviGoalRoughlyPos(1.0f, 0.0f, 0.05f, false)); break; default: Display.gotoXY(10, 0); Display.print("ir="+(cmd & IR_MASK)); } } execute(); } } }