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

2022-09-01 23:37:13

我正在新的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);
                }

            }
        });
    }
}

如果驱动程序的速度快于驱动程序配置文件允许的速度,则只会发出两秒钟的蜂鸣音。

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


答案 1

你如何放慢使用不完美的人的速度?你刹车!与宝马SDK相同:

Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
brake.apply(Brake.TO_THE_METAL);

答案 2
Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
wrench.hit(driver);

推荐