كيفية الحد من السرعة مع BMW JSDK على 116i برمجيا من جافا؟

StackOverflow https://stackoverflow.com/questions/2557423

  •  23-09-2019
  •  | 
  •  

سؤال

أنا أجرب 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);
                }

            }
        });
    }
}

سيؤدي ذلك إلى صفير لمدة ثانيتين إذا ذهب السائق بشكل أسرع مما يسمح به ملف تعريف السائق.

سؤالي هو - هل هناك إمكانية ل حد السرعة (وليس فقط صفير سخيفة)؟

هل كانت مفيدة؟

المحلول

كيف تبطئ باستخدام الإنسان غير الكامل؟ أنت الفرامل! نفس الشيء مع BMW SDK:

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

نصائح أخرى

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

أعتقد (وآمل) أن هذا غير ممكن على الأرجح ، والأسباب هي أن مصنعي السيارات سيكونون في الكثير من المتاعب القانونية إذا سمحوا للأدوات "غير الأساسية" مثل JVM مدمجة في نظام الترفيه/الملاحة مع ضوابط المحرك أو التوجيه. هذا خطر أمني أسوأ بكثير من استغلال متصفحك المتوسط.

سيارات الذبابة مخيفة بما فيه الكفاية لأنها بدون أجزاء مستخدم/قراصنة يمكن الوصول إليها.

مشكلتك الكبيرة هي أنك لا تأخذ نسبة التروس الحالية في الاعتبار عند الحصول على سرعة المحرك. أنت تنظر إلى سرعة مثل 190 ، بينما ستعود Tach إلى مكان ما بين 700 و 7000. تحتاج إلى وظيفة تأخذ RPMs للمحرك ونسبة الترس وقطر الإطارات ، وإرجاع السرعة الفعلية.

أو يمكنك الحصول على سرعة السيارة من عداد السرعة أو GPS.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top