代码之家  ›  专栏  ›  技术社区  ›  lexicore

如何用Java JSDK以116i编程速度限制Java?

  •  22
  • lexicore  · 技术社区  · 16 年前

    我正在试用宝马JAVA SDK对新的宝马116i创新包进行实验。基本的事情,如打开和关闭灯,启动和停止电机工作正常。我现在要做的是写一辆汽车,它将速度限制在驾驶员配置文件中配置的最大值。驾驶员身份将通过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);
                    }
    
                }
            });
        }
    }
    

    如果驾驶员的速度超过了驾驶员配置文件允许的速度,这只会嘟嘟响两秒钟。

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

    4 回复  |  直到 9 年前
        1
  •  9
  •   Jeremy Meo    11 年前

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

    Brake brake = (Brake) mode.getDevice(Devices.BRAKE);
    brake.apply(Brake.TO_THE_METAL);
    
        2
  •  7
  •   Pops Atula    14 年前
    Wrench wrench = (Wrench) Toolkit.getToolkit().get(Instruments.WRENCH);
    wrench.hit(driver);
    
        3
  •  3
  •   Thilo    16 年前

    我认为(并希望)这很可能是不可能的,原因是如果汽车制造商允许“非核心”设备(如内置在娱乐/导航系统中的JVM)干扰电机或转向控制装置,那么他们将面临很多法律问题。这是一个比您的普通浏览器漏洞更糟糕的安全风险。

    电传飞车足够可怕,因为它没有终端用户/黑客可接近的部分。

        4
  •  3
  •   Gabe Timothy Khouri    16 年前

    你的大问题是,当你得到发动机转速时,你没有考虑到当前的传动比。你看到的速度是190,而转速表将返回700到7000之间。您需要一个函数来获取发动机转速、传动比和轮胎直径,并返回实际速度。

    或者你可以从速度计或GPS上获取汽车的速度。