• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sketch i bibloteka pod kontroler z trzema przyciskami
#1
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!
 
Odpowiedź
#2
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..."
 
Odpowiedź
#3
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
 
Odpowiedź
#4
"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.
 
Odpowiedź
#5
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ć.
 
Odpowiedź
#6
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.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości