Question

J'expérimente avec la BMW Java SDK sur la nouvelle BMW 116i Innovation Package. les choses de base comme éteindre les lumières sur et en dehors, démarrer et arrêter l'amende de travail du moteur. Ce que je suis en train de faire est maintenant d'écrire un carlet qui limiterait la vitesse au maximum configuré dans le profil du pilote. l'identité du pilote sera détecté comme d'habitude via un lecteur RFID.

Mon problème est que si je peux lire la vitesse du compte-tours, je ne peux pas vraiment limiter la vitesse. Voici ce que j'ai travail à ce jour:

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

            }
        });
    }
}

Ce sera juste un bip pendant deux secondes si le pilote va plus vite que le profil du pilote permet.

Ma question est - est-il possible de réellement limite la vitesse (pas seulement stupide bip sonore)

Était-ce utile?

La solution

Comment ralentir en utilisant l'humain imparfait? Vous frein! Même avec BMW SDK:

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

Autres conseils

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

Je pense (et espère) que cela est très probablement pas possible, et les raisons sont que les constructeurs automobiles seraient beaucoup d'ennuis juridiques si elles autorisaient gadgets « non-core » comme une machine virtuelle Java intégrée dans le divertissement / navigation système d'interférer avec les commandes de moteur et de direction. C'est un risque de sécurité bien pire que d'exploiter votre navigateur moyenne.

voitures Fly-by-wire sont assez effrayant car il est sans pièces utilisateur final / pirate informatique accessible.

Le grand problème est que vous ne prenez pas le rapport courant en compte lorsque vous obtenez la vitesse du moteur. Vous êtes à la recherche à une vitesse de 190 comme, tandis que le tach va revenir quelque part entre 700 et 7000. Vous avez besoin d'une fonction qui prend le régime du moteur, rapport de vitesse, et le diamètre du pneu, et retourne la vitesse réelle.

Ou vous pourriez obtenir la vitesse de la voiture de l'indicateur de vitesse ou GPS.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top