Pergunta

Estou experimentando o BMW Java SDK no novo pacote de inovação BMW 116i. Coisas básicas como ligar e desligar as luzes, iniciando e interrompendo o motor funcionam bem. O que estou tentando fazer agora é escrever um carlet que limitaria a velocidade ao máximo configurado no perfil do driver. A identidade do driver será detectada como de costume via RFID Reader.

Meu problema é que, embora eu possa ler a velocidade do tacômetro, não posso realmente limitar a velocidade. Aqui está o que eu tenho trabalhado até agora:

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);
                }

            }
        });
    }
}

Isso vai apenas um sinal sonoro por dois segundos se o motorista for mais rápido que o perfil do driver permitir.

Minha pergunta é - existe a possibilidade de realmente limite A velocidade (não apenas bipe boba)?

Foi útil?

Solução

Como você diminui a velocidade usando o humano imperfeito? Você freio! O mesmo com o BMW SDK:

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

Outras dicas

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

Eu acho (e espero) que isso seja muito provavelmente possível, e as razões são que os fabricantes de automóveis estejam com muitos problemas legais se permitissem que aparelhos "não essenciais", como uma JVM incorporada no sistema de entretenimento/navegação para interferir com o motor ou controles de direção. Esse é um risco de segurança muito pior do que a sua exploração média do navegador.

Os carros voadores são assustadores o suficiente, pois são sem peças acessíveis ao usuário final/hacker.

Seu grande problema é que você não está levando em consideração a relação de transmissão atual quando obtém a velocidade do motor. Você está olhando para uma velocidade de 190, enquanto o tach retornará entre 700 e 7000. Você precisa de uma função que requer RPMs do motor, relação de transmissão e diâmetro do pneu e retorne a velocidade real.

Ou você pode obter a velocidade do carro do velocímetro ou GPS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top