Подтвердить что ты не робот

Как ограничить скорость с помощью BMW JSDK на 116i программно с Java?

Я экспериментирую с BMW Java SDK на новом инновационном пакете BMW 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);
                }

            }
        });
    }
}

Это будет звучать только в течение двух секунд, если драйвер будет работать быстрее, чем позволяет профиль драйвера.

Мой вопрос - есть ли возможность на самом деле ограничить скорость (не только глупый сигнал)?

4b9b3361

Ответ 1

Как вы замедляете использование несовершенного человека? Ты тормоз! То же самое с BMW 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);

Ответ 3

Я думаю (и надеюсь), что это, скорее всего, невозможно, и причины в том, что производители автомобилей столкнулись бы с множеством юридических проблем, если бы они допустили "неосновные" гаджеты, такие как JVM, встроенные в развлечения/навигация системы для вмешательства в работу двигателя или рулевого управления. Это гораздо хуже, чем риск для вашего браузера.

Машины по принципу "по очереди" достаточно страшны, так как они не доступны для доступа к конечному пользователю/хакеру.

Ответ 4

Ваша большая проблема заключается в том, что вы не учитываете текущее передаточное отношение, когда получаете скорость двигателя. Вы смотрите на скорость, равную 190, в то время как тахометр будет возвращаться где-то между 700 и 7000. Вам нужна функция, которая учитывает обороты двигателя, передаточное отношение и диаметр шины, и возвращает фактическую скорость.

Или вы можете получить скорость автомобиля со спидометра или GPS.