Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Kłopoty z zaprogramowaniem Arduino Leonardo jako kierownicy

mikekowalski 07 Lut 2018 17:11 285 2
  • #1 07 Lut 2018 17:11
    mikekowalski
    Poziom 4  

    Witam,
    od pewnego czasu chciałem zrobić kierownicę do grania w ETS 2, czasami Asseto Corsa i wykorzystać do tego moje Arduino Leonardo. Znalazłem bibliotekę Joystick, ale miała ona zbyt mało osi analogowych, więc znalazłem wersje 2.0 https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-2.0 która ma dokładniejsze odczyty oraz więcej osi, ale nie mogę jej zrozumieć czy mógłby ktoś napisać program albo chociaż wzór lub wytłumaczył w jaki sposób ma to zrobić. Potrzebuje gazu, hamulca, sprzęgła, samej kierownicy która jest zamontowana na potencjometrze wieloobrotowym(10 obrotów)i chciałbym programowo ograniczyć go aby miał po 2,5 obrotów w każdą strone oraz analogowy hamulec ręczny. Skrzynie biegów napisze sam. Z góry dziękuje za pomoc.

    0 2
  • #2 07 Lut 2018 17:35
    rs6000
    Poziom 28  

    W załączonej bibliotece masz sporo przykładów https://github.com/MHeironimus/ArduinoJoystickLibrary/tree/version-2.0/Joystick/examples - przeglądałeś je ? zerknij po kolei na każdy, przeanalizuj, i dojdziesz sam do rozwiązania.

    Pozdr

    0
  • #3 08 Lut 2018 13:15
    mikekowalski
    Poziom 4  

    No właśnie nie moge zrozumieć, ale dziękuje za odpowiedź.
    Dodano po 19 [godziny] 36 [minuty]:

    Code:
    #include <Joystick.h>
    

    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
    8, 0,
    true, true, true,
    false, false, false,
    true, true,
    true, true, true);

    int steer = A0;
    int gas = A1;
    int brake = A2;
    int clutch = A3;
    int handbrake = A5;

    void setup() {
    pinMode(2, INPUT_PULLUP);
    pinMode(3, INPUT_PULLUP);
    pinMode(4, INPUT_PULLUP);
    pinMode(5, INPUT_PULLUP);
    pinMode(6, INPUT_PULLUP);
    pinMode(7, INPUT_PULLUP);
    pinMode(8, INPUT_PULLUP);
    pinMode(9, INPUT_PULLUP);
    pinMode(A0, INPUT);
    pinMode(A1, INPUT);
    pinMode(A2, INPUT);
    pinMode(A3, INPUT);
    pinMode(A4, INPUT);

    Joystick.begin();

    Joystick.setSteeringRange(240, 783);

    }
    const int pinToButtonMap = 2;

    int lastButtonState[8] = {0, 0, 0, 0, 0, 0, 0, 0};


    void loop() {

    for (int index = 0; index < 8; index++)
    {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
    Joystick.setButton(index, currentButtonState);
    lastButtonState[index] = currentButtonState;
    }
    }
    //Ster
    int steerValue = analogRead(steer);
    Joystick.setSteering(steerValue);


    //Gaz
    int gasValue = analogRead(gas);
    Joystick.setAccelerator(gasValue);


    //Brake
    int brakeValue = analogRead(brake);
    Joystick.setBrake(brakeValue);


    //Clutch
    int clutchValue = analogRead(clutch);
    Joystick.setThrottle(clutchValue);


    //Handbrake
    int handbrakeValue = analogRead(handbrake);
    Joystick.setRudder(handbrakeValue);
    }

    Witam, czy czy dobrze napisałem ten kod? Bo nie działa :(

    0