Arduino Polska Forum
Sketch i bibloteka pod kontroler z trzema przyciskami - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Jak zacząć z Arduino (https://forum.arduinopolska.pl/dzial-jak-zacz%C4%85%C4%87-z-arduino)
+--- Wątek: Sketch i bibloteka pod kontroler z trzema przyciskami (/watek-sketch-i-bibloteka-pod-kontroler-z-trzema-przyciskami)



Sketch i bibloteka pod kontroler z trzema przyciskami - GTR - 04-07-2021

Witam!

Na wstępie zaznaczę iż zaczynam swoją zabawę z Arduino, więc na pierwszy ogień chciałem zrobić coś prostego. Jest to kontroler przeznaczony do gier, wyposażony w trzy przyciski, jednak nie potrafię napisać, tudzież znaleźć i edytować sketcha.

Ściągnąłem bibliotekę Joystick z tego linku: https://github.com/MHeironimus/ArduinoJoystickLibrary

Jak wspomniałem moje urządzenie jest zbudowane z trzech przycisków, po jednym pinie z każdego przycisku wspólnie zalutowałem do GND, zaś sygnały z tych przycisków odpowiednio do pinów/miejsc A3, A1 oraz 15.

Najbliżej sukcesu byłem używając aplikacji SimHub, która ma wbudowany swego rodzaju kofigurator Ardunio i wszystko działało, jednak jestem estetą i nie podoba mi się to, że w sofcie jest około 20 przycisków, z czego tylko 3 są używane. Chciałem napisać sketch do tego projektu, jednak kompletnie nie wiem o co chodzi. Wgrałem przykładowy szkic pod nazwą "Joystick Button" ale po zweryfikowaniu i wgraniu nic nie działa, a dodatkowo widzę że w sofcie pojawiło się jeszcze więcej przycisków, pomimo że w szkicu są określone tylko 4 przyciski. Tutaj pytanie - czy za ilością przycisków w sofcie odpowiada biblioteka?

Dodam, że próbowałem zmienić pinMode. Tam gdzie figurują cyfry 9, 10 i 11 zmieniłem na A3, A1 i 15, ale podejrzewam że to na nic bo nic to nie dało, jedynie pierwsze 3 przyciski były "wciśnięte" cały czas w sofcie.

Kod:
#include <Joystick.h>

Joystick_ Joystick;

void setup() {
  // Initialize Button Pins
  pinMode(9, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  // Initialize Joystick Library
  Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 9;

// Last state of the button
int lastButtonState[4] = {0,0,0,0};

void loop() {

  // Read pin values
  for (int index = 0; index < 4; index++)
  {
    int currentButtonState = !digitalRead(index + pinToButtonMap);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
    }
  }

  delay(50);
}


Mam nadzieję że udało mi się sprecyzować o co chodzi, jeśli nie postaram się to opisać dokładniej. Pozdrawiam!


RE: Sketch i bibloteka pod kontroler z trzema przyciskami - kaczakat - 04-07-2021

A jakiego Arduino używasz. Bo generalnie joystyki wymagają:
"...This library can be used with Arduino IDE 1.6.6 (or above) to add one or more joysticks (or gamepads) to the list of HID devices an Arduino Leonardo or Arduino Micro..."


RE: Sketch i bibloteka pod kontroler z trzema przyciskami - GTR - 04-07-2021

Racja, zapomniałem o tym - używam Pro Micro. Wcześniej po kupnie Arduino Nano nauczyłem się, żeby upewnić się że mam odpowiednią płytkę do moich projektów, w tym przypadku chodzi głównie o mikrokontroler atmega32u4 Smile


RE: Sketch i bibloteka pod kontroler z trzema przyciskami - kaczakat - 04-07-2021

"Dodam, że próbowałem zmienić pinMode. Tam gdzie figurują cyfry 9, 10 i 11 zmieniłem na A3, A1 i 15, ale podejrzewam że to na nic bo nic to nie dało, jedynie pierwsze 3 przyciski były "wciśnięte" cały czas w sofcie."
Czyli jednak soft działa i joy jest wykrywany. W tym programie ktoś sobie wymyślił tak, że robi tablicę na stany czterech przycisków, numer początkowy 9 i do tego dodaje index tablicy + 0 lub +1, co w sumie daje piny 9,10,11,12
int currentButtonState = !digitalRead(index + pinToButtonMap) i potem jeśli stan się zmienił przypisuje to
Joystick.setButton(index, currentButtonState); // tutaj jest to co widzi program w PC
lastButtonState[index] = currentButtonState;. // Tu jest zapisany poprzedni stan przycisku
Jak chcesz mieć przyciski na losowych pinach to musisz przerobić ten kod. Na pewno znajdziesz mnóstwo innych przykładów lepiej napisanych, choć jako demo biblioteki ten jest zupełnie OK.


RE: Sketch i bibloteka pod kontroler z trzema przyciskami - GTR - 04-07-2021

Właśnie nie chcę mieć na losowych pinach, chce mieć na konkretnych pinach + chce ukryć resztę nieużywanych przycisków, które widnieją w sofcie.

Tak to zlutowałem:

https://i.imgur.com/Lzr4n1J.png

A tak widnieje aktualnie na komputerze:

https://i.imgur.com/0BkDivl.png

Chciałbym zrobić to tak, aby wykrywało mi przyciski na przylutowanych pinach, jednocześnie żeby na komputerze (zdj. drugie) widniały tylko trzy przyciski, bez tych osi. Pytanie teraz jest takie, że za to zapewne odpowiada biblioteka i czy to jest warte zachodu, tzn. ile takie coś może zająć laikowi, o ile w ogóle jest możliwe abym się tego podjął. Jeśli nie to trudno, użyje tego SimHuba i będzie to działać.


RE: Sketch i bibloteka pod kontroler z trzema przyciskami - kaczakat - 05-07-2021

Niestety, albo ogarniesz kurs Arduino i nauczysz się podstaw programowania w C/C++ albo SimHub. To tylko odczyt stanu trzech pinów, jak tego nie umiesz to nic nie umiesz. Tak jakbyś na forum majsterkowiczów pytał o tutorial, z której strony trzymać młotek... Litości.