我与宝马的Java SDK的新BMW 1161创新包装试验。基本的东西,如打开和关闭灯光,启动和停止发动机工作正常。我试图现在要做的是,写一个卡尔莱特这将速度限制在驱动器配置文件中配置最高。驾驶员身份将经由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);
                }

            }
        });
    }
}

这将只是两秒钟蜂鸣如果驾驶员变得比驾驶员简档允许更快

我的问题是 - ?有没有可能真正的限制的速度(不只是愚蠢的鸣叫)

有帮助吗?

解决方案

你如何放慢使用不完善的人?你刹车!同样与BMW SDK:

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

其他提示

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

我觉得(和希望),这极有可能是不可能的,原因是汽车制造商将在很多法律上的麻烦,如果他们允许“非核心”小玩意像一个JVM内置娱乐/导航系统干扰与电机或转向控制。这是比一般的浏览器利用一个更糟糕的安全风险。

飞翔线控车吓人足够,因为它是没有终端用户/黑客访问部分。

您最大的问题是,你没有考虑当前齿轮比进去时,你得到的发动机转速。你正在寻找的像190的速度,而转速将会700和7000之间的某处返回你需要一个函数,发动机转速,变速比,和轮胎直径,并返回实际速度。

或者你也可以从里程表或GPS获取车子的速度。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top