如何使用Java以编程方式在116i上限制BMW JSDK的速度?

lex*_*ore 22 java rfid carlet

我正在使用新的BMW 116i创新套件试验BMW Java SDK.打开和关闭灯,启动和停止电机等基本功能都可以正常工作.我现在要做的是编写一个将速度限制在驱动程序配置文件中配置的最大速度的carlet.通过RFID阅读器照常检测驾驶员身份.

我的问题是虽然我可以从转速表读取速度,但我无法真正限制速度.这是我到目前为止所做的工作:

public class SpeenControllingCarlet extends GenericCarlet {

    public void start(final VehicleModel model) throws CarletException {
        RfidReader rfidReader = (RfidReader) model
                .getDevice(Devices.DRIVER_RFID_READER);
        Rfid rfid = rfidReader.getRfid();
        DriverProfile driverProfile = model.getDriverProfileRegistry()
                .getDriverProfile(rfid.toString());
        if (driverProfile == null) {
            return;
        }
        final Double maxAllowedSpeed = Double.valueOf(driverProfile
                .getCustomAttribute("maxAllowedSpeed", "190"));
        Tachometer tachometer = (Tachometer) mode.getDevice(Devices.TACHOMETER);
        tachometer.addSpeedListener(new SpeedListener() {
            public void onSpeedChanged(SpeedChangedEvent speedChangedEvent) {
                if (speedChangedEvent.getCurrentSpeed() > maxAllowedSpeed)
                {
                    Horn horn = (Horn) mode.getDevice(Devices.HORN);
                    horn.beep(440, 2000);
                }

            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

如果驱动程序比驱动程序配置文件允许的速度快,则只会发出两秒钟的哔声.

我的问题是 - 是否有可能实际限制速度(不仅仅是愚蠢的嘟嘟声)?

Vla*_*hev 9

你如何使用不完美的人类减速?你刹车!与BMW SDK相同:

Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
brake.apply(Brake.TO_THE_METAL);
Run Code Online (Sandbox Code Playgroud)

  • 为什么不?!?这就是JVM一直在做的事情! (2认同)

mvm*_*vmn 7

Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
wrench.hit(driver);
Run Code Online (Sandbox Code Playgroud)