Pregunta

estoy experimentando con el BMW SDK Java en el nuevo paquete de Innovación 116i de BMW. cosas básicas como encender las luces de encendido y apagado, iniciar y detener el buen trabajo del motor. Lo que estoy tratando de hacer ahora es que para escribir un Carlet lo que limitaría la velocidad al máximo configurado en el perfil del conductor. identidad del conductor será detectado como es habitual a través de lector de RFID.

Mi problema es que, aunque puedo leer la velocidad del tacómetro, en realidad no puedo limitar la velocidad. Esto es lo que tengo trabajo hasta ahora:

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

            }
        });
    }
}

Esto solo pitido de dos segundos si el conductor va más rápido que el perfil del conductor permite.

Mi pregunta es - ¿existe una posibilidad de realidad límite la velocidad (pitido no sólo tonto)

¿Fue útil?

Solución

¿Cómo se puede frenar con el ser humano imperfecto? Se frena! Lo mismo con BMW SDK:

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

Otros consejos

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

creo (y espero) que esto es muy probable que no sea posible, y las razones son que los fabricantes de automóviles podrían estar en un montón de problemas legales si permitían aparatos "no esenciales" como una máquina virtual Java integrado en el entretenimiento / navegación sistema para interferir con los controles de motor o de dirección. Ese es un riesgo de seguridad mucho peor que la media de su navegador explotar.

coches

Fly-by-wire son lo suficientemente difícil como es, sin partes accesibles para el usuario final / hackers.

Su gran problema es que usted no está tomando la relación de transmisión actual en cuenta cuando llegue a la velocidad del motor. Usted está buscando a una velocidad de como 190, mientras que el tacómetro va a volver en algún lugar entre 700 y 7000. Se necesita una función que toma las RPM del motor, relación de transmisión, y el diámetro de los neumáticos, y vuelve velocidad real.

O usted podría conseguir la velocidad del coche del velocímetro o GPS.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top