logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Rozwiązano] Błąd w kodzie dla Arduino Micro w projekcie Button Box - Assetto Corsa

konradbartosz09 07 Paź 2023 17:37 327 7
REKLAMA
  • #1 20761899
    konradbartosz09
    Poziom 3  
    Posty: 5
    Cześć
    Jestem początkujący z Arduino. Ktoś wie jak naprawić ten błąd?



    //BUTTON BOX
    //USE w ProMicro
    //Tested in WIN10 + Assetto Corsa
    //AMSTUDIO
    //20.8.17

    #include <Keypad.h>
    #include <Joystick.h>

    #define ENABLE_PULLUPS
    #define NUMROTARIES 4
    #define NUMBUTTONS 24
    #define NUMROWS 5
    #define NUMCOLS 5


    byte buttons[NUMROWS][NUMCOLS] = {
    {0,1,2,3,4},
    {5,6,7,8,9},
    {10,11,12,13,14},
    {15,16,17,18,19},
    {20,21,22,23},
    };

    struct rotariesdef {
    byte pin1;
    byte pin2;
    int ccwchar;
    int cwchar;
    volatile unsigned char state;
    };

    rotariesdef rotaries[NUMROTARIES] {
    {0,1,24,25,0},
    {2,3,26,27,0},
    {4,5,28,29,0},
    {6,7,30,31,0},
    };

    #define DIR_CCW 0x10
    #define DIR_CW 0x20
    #define R_START 0x0

    #ifdef HALF_STEP
    #define R_CCW_BEGIN 0x1
    #define R_CW_BEGIN 0x2
    #define R_START_M 0x3
    #define R_CW_BEGIN_M 0x4
    #define R_CCW_BEGIN_M 0x5
    const unsigned char ttable[6][4] = {
    // R_START (00)
    {R_START_M, R_CW_BEGIN, R_CCW_BEGIN, R_START},
    // R_CCW_BEGIN
    {R_START_M | DIR_CCW, R_START, R_CCW_BEGIN, R_START},
    // R_CW_BEGIN
    {R_START_M | DIR_CW, R_CW_BEGIN, R_START, R_START},
    // R_START_M (11)
    {R_START_M, R_CCW_BEGIN_M, R_CW_BEGIN_M, R_START},
    // R_CW_BEGIN_M
    {R_START_M, R_START_M, R_CW_BEGIN_M, R_START | DIR_CW},
    // R_CCW_BEGIN_M
    {R_START_M, R_CCW_BEGIN_M, R_START_M, R_START | DIR_CCW},
    };
    #else
    #define R_CW_FINAL 0x1
    #define R_CW_BEGIN 0x2
    #define R_CW_NEXT 0x3
    #define R_CCW_BEGIN 0x4
    #define R_CCW_FINAL 0x5
    #define R_CCW_NEXT 0x6

    const unsigned char ttable[7][4] = {
    // R_START
    {R_START, R_CW_BEGIN, R_CCW_BEGIN, R_START},
    // R_CW_FINAL
    {R_CW_NEXT, R_START, R_CW_FINAL, R_START | DIR_CW},
    // R_CW_BEGIN
    {R_CW_NEXT, R_CW_BEGIN, R_START, R_START},
    // R_CW_NEXT
    {R_CW_NEXT, R_CW_BEGIN, R_CW_FINAL, R_START},
    // R_CCW_BEGIN
    {R_CCW_NEXT, R_START, R_CCW_BEGIN, R_START},
    // R_CCW_FINAL
    {R_CCW_NEXT, R_CCW_FINAL, R_START, R_START | DIR_CCW},
    // R_CCW_NEXT
    {R_CCW_NEXT, R_CCW_FINAL, R_CCW_BEGIN, R_START},
    };
    #endif

    byte rowPins[NUMROWS] = {21,20,19,18,15};
    byte colPins[NUMCOLS] = {14,16,10,9,8};

    Keypad buttbx = Keypad( makeKeymap(buttons), rowPins, colPins, NUMROWS, NUMCOLS);

    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
    JOYSTICK_TYPE_JOYSTICK, 32, 0,
    false, false, false, false, false, false,
    false, false, false, false, false);

    void setup() {
    Joystick.begin();
    rotary_init();}

    void loop() {

    CheckAllEncoders();

    CheckAllButtons();

    }

    void CheckAllButtons(void) {
    if (buttbx.getKeys())
    {
    for (int i=0; i<LIST_MAX; i++)
    {
    if ( buttbx.key.stateChanged )
    {
    switch (buttbx.key[i].kstate) {
    case PRESSED:
    case HOLD:
    Joystick.setButton(buttbx.key[i].kchar, 1);
    break;
    case RELEASED:
    case IDLE:
    Joystick.setButton(buttbx.key[i].kchar, 0);
    break;
    }
    }
    }
    }
    }


    void rotary_init() {
    for (int i=0;i<NUMROTARIES;i++) {
    pinMode(rotaries[i].pin1, INPUT);
    pinMode(rotaries[i].pin2, INPUT);
    #ifdef ENABLE_PULLUPS
    digitalWrite(rotaries[i].pin1, HIGH);
    digitalWrite(rotaries[i].pin2, HIGH);
    #endif
    }
    }


    unsigned char rotary_process(int _i) {
    unsigned char pinstate = (digitalRead(rotaries[_i].pin2) << 1) | digitalRead(rotaries[_i].pin1);
    rotaries[_i].state = ttable[rotaries[_i].state & 0xf][pinstate];
    return (rotaries[_i].state & 0x30);
    }

    void CheckAllEncoders(void) {
    for (int i=0;i<NUMROTARIES;i++) {
    unsigned char result = rotary_process(i);
    if (result == DIR_CCW) {
    Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);
    };
    if (result == DIR_CW) {
    Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);
    };
    }
    }














    Arduino:1.6.12 (Windows 10), Płytka:"Arduino Micro"

    ARDUINO_BUTTON_BOXV2:95: error: expected ')' before ',' token

    Joystick(JOYSTICK_DEFAULT_REPORT_ID,

    ^

    ARDUINO_BUTTON_BOXV2:96: error: no matching function for call to 'Joystick::Joystick()'

    JOYSTICK_TYPE_JOYSTICK, 32, 0,

    ^~~~~~~~~~~~~~~~~~~~~~

    In file included from C:\Users\konra\Desktop\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino:8:0:

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:7:17: note: candidate: Joystick::Joystick(int, int, int)

    public: Joystick(int, int, int);

    ^~~~~~~~

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:7:17: note: candidate expects 3 arguments, 0 provided

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:6:7: note: candidate: constexpr Joystick::Joystick(const Joystick&)

    class Joystick {

    ^~~~~~~~

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:6:7: note: candidate expects 1 argument, 0 provided

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:6:7: note: candidate: constexpr Joystick::Joystick(Joystick&&)

    C:\Users\konra\Documents\Arduino\libraries\Joystick\src/Joystick.h:6:7: note: candidate expects 1 argument, 0 provided

    ARDUINO_BUTTON_BOXV2:96: error: expected unqualified-id before numeric constant

    JOYSTICK_TYPE_JOYSTICK, 32, 0,

    ^~

    C:\Users\konra\Desktop\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void setup()':

    ARDUINO_BUTTON_BOXV2:101: error: expected unqualified-id before '.' token

    Joystick.begin();

    ^

    C:\Users\konra\Desktop\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllButtons()':

    ARDUINO_BUTTON_BOXV2:122: error: expected unqualified-id before '.' token

    Joystick.setButton(buttbx.key[i].kchar, 1);

    ^

    ARDUINO_BUTTON_BOXV2:126: error: expected unqualified-id before '.' token

    Joystick.setButton(buttbx.key[i].kchar, 0);

    ^

    C:\Users\konra\Desktop\ARDUINO_BUTTON_BOXV2\ARDUINO_BUTTON_BOXV2.ino: In function 'void CheckAllEncoders()':

    ARDUINO_BUTTON_BOXV2:157: error: expected unqualified-id before '.' token

    Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

    ^

    ARDUINO_BUTTON_BOXV2:157: error: expected unqualified-id before '.' token

    Joystick.setButton(rotaries[i].ccwchar, 1); delay(50); Joystick.setButton(rotaries[i].ccwchar, 0);

    ^

    ARDUINO_BUTTON_BOXV2:160: error: expected unqualified-id before '.' token

    Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

    ^

    ARDUINO_BUTTON_BOXV2:160: error: expected unqualified-id before '.' token

    Joystick.setButton(rotaries[i].cwchar, 1); delay(50); Joystick.setButton(rotaries[i].cwchar, 0);

    ^

    exit status 1
    expected ')' before ',' token

    Ten raport powinien zawierać więcej informacji jeśli w
    File -> Preferencje zostanie włączona opcja "Pokaż
    szczegółowe informacje podczas kompilacji"
    [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
  • REKLAMA
  • REKLAMA
  • #3 20761952
    konradbartosz09
    Poziom 3  
    Posty: 5
    Pokazuje błąd w tej ninijce

    Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,
  • #4 20762002
    Jack80dev
    Poziom 12  
    Posty: 434
    Ocena: 20
    Nie jestem ekspertem, ale może w tej linii czegoś brakuje.
    Czy tu nie powinno być definicji zmiennej Joystick_? Nie ma tam jednak przypisania (=).
  • REKLAMA
  • #5 20764848
    gps79
    Poziom 37  
    Posty: 2186
    Pomógł: 494
    Ocena: 786
    Zainstaluj tę bibliotekę w Arduino:
    https://github.com/MHeironimus/ArduinoJoystickLibrary

    Instalacja:
    1. Download https://github.com/MHeironimus/ArduinoJoystickLibrary/archive/master.zip
    2. In the Arduino IDE, select Sketch > Include Library > Add .ZIP Library.... Browse to where the downloaded ZIP file is located and click Open. The Joystick library's examples will now appear under File > Examples > Joystick.
  • #6 20786655
    konradbartosz09
    Poziom 3  
    Posty: 5
    Dziękuję za pomoc. Udało się.
  • REKLAMA
  • #8 20786683
    konradbartosz09
    Poziom 3  
    Posty: 5
    Rozwiązano

Podsumowanie tematu

✨ Użytkownik zadał pytanie dotyczące błędu w kodzie Arduino Micro w projekcie Button Box dla gry Assetto Corsa. W odpowiedziach zasugerowano, że problem może wynikać z niepoprawnej definicji zmiennej Joystick_ oraz zbędnego przecinka w definicji tablicy ttable. Zasugerowano również zainstalowanie biblioteki ArduinoJoystickLibrary, co pomogło użytkownikowi rozwiązać problem.
Wygenerowane przez model językowy.
REKLAMA