• 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
Arduino UNO R3 - kontroler gier - dioda i przyciski
#11
(01-07-2018, 22:59)alientv napisał(a): Czyli podsumują na tej płytce ( uno r3 ) dam radę podłączyć 20 przycisków on - off , 4 diody które się zapalą po wciśnięciu przycisku ( lub zmianie pozycji dźwigienki )  i wyświetlacz który przekaże mi info z gry z wyświetlacza pojazdu w postaci 8 cyfr ?

Możesz podłączyć i 100 i 200 i więcej używają ekspanderów. Przy tej ilości, ekspandery to jedyne sensowne wyjście. Jeśli jednak chcesz podłączyć 20..30 IO to zamiast ekspanderów rozsądniej (taniej i szybciej napiszesz niezawodny program) użyć uC z większą ilością portów IO.
 
Odpowiedź
#12
(01-07-2018, 22:59)alientv napisał(a): Czyli podsumują na tej płytce ( uno r3 ) dam radę podłączyć 20 przycisków on - off , 4 diody które się zapalą po wciśnięciu przycisku ( lub zmianie pozycji dźwigienki )  i wyświetlacz który przekaże mi info z gry z wyświetlacza pojazdu w postaci 8 cyfr ?

Jest to możliwe zrobić, ale nie twierdzę, że ja lub Ty umiałbyś  to zrobić, albo że będzie działał jakoś super responsywnie.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#13
(02-07-2018, 12:11)kaczakat napisał(a):
(01-07-2018, 22:59)alientv napisał(a): Czyli podsumują na tej płytce ( uno r3 ) dam radę podłączyć 20 przycisków on - off , 4 diody które się zapalą po wciśnięciu przycisku ( lub zmianie pozycji dźwigienki )  i wyświetlacz który przekaże mi info z gry z wyświetlacza pojazdu w postaci 8 cyfr ?

Jest to możliwe zrobić, ale nie twierdzę, że ja lub Ty umiałbyś  to zrobić, albo że będzie działał jakoś super responsywnie.

Na ta chwilę mam podpiętą płytkę jako kontroler i tak jest wykrywana, wgrany szkic do 17 przycisków które działają bez zarzutu łącznie z zapaleniem diody ( podłączenie jak na foto ) , niestety nie wiem jak edytować szkic i jak podpiąć jeszcze dwa przyciski. Wyświetlacz jest w drodze z chin Wink Zostało mi wolne gniazdo 13 oraz -1 tx0 rx


Załączone pliki
.bmp   arduino.bmp (Rozmiar: 1.13 MB / Pobrań: 3)
 
Odpowiedź
#14
(02-07-2018, 15:00)alientv napisał(a): Zostało mi wolne gniazdo 13 oraz -1 tx0 rx
Czyli realnie tylko 13. Arduino nie ma debugera i używanie 0 i 1 nie jest najlepszym pomysłem bo one robią za namiastkę debugera. Geniusze czy osoby mające nadmiar wolnego czasu debugera nie potrzebują, ja się do nich nie zaliczam (ani do jednych, ani do drugich) więc tych pinów nie tykach chyba, że robię na KA-NUCLEO albo innym Discavery od STM-a.

(02-07-2018, 15:00)alientv napisał(a): Na ta chwilę mam podpiętą płytkę jako kontroler i tak jest wykrywana, wgrany szkic do 17 przycisków które działają bez zarzutu łącznie z zapaleniem diody ( podłączenie jak na foto ) , niestety nie wiem jak edytować szkic
Wrzuć tan szkic na forum. Jak będę miał wolną chwile to zerknę jak dodać jeden przycisk.
 
Odpowiedź
#15
#include "UnoJoy.h"

void setup(){
setupPins();
setupUnoJoy();
}

void loop(){
// Always be getting fresh data
dataForController_t controllerData = getControllerData();
setControllerData(controllerData);
}

void setupPins(void){
// Set all the digital pins as inputs
// with the pull-up enabled, except for the
// two serial line pins
for (int i = 2; i <= 12; i++){
pinMode(i, INPUT);
digitalWrite(i, HIGH);
}
pinMode(A0, INPUT);
digitalWrite(A0, HIGH);
pinMode(A1, INPUT);
digitalWrite(A1, HIGH);
pinMode(A2, INPUT);
digitalWrite(A2, HIGH);
pinMode(A3, INPUT);
digitalWrite(A3, HIGH);
pinMode(A4, INPUT);
digitalWrite(A4, HIGH);
pinMode(A5, INPUT);
digitalWrite(A5, HIGH);
}

dataForController_t getControllerData(void){

// Set up a place for our controller data
// Use the getBlankDataForController() function, since
// just declaring a fresh dataForController_t tends
// to get you one filled with junk from other, random
// values that were in those memory locations before
dataForController_t controllerData = getBlankDataForController();
// Since our buttons are all held high and
// pulled low when pressed, we use the "!"
// operator to invert the readings from the pins
controllerData.triangleOn = !digitalRead(2);
controllerData.circleOn = !digitalRead(3);
controllerData.squareOn = !digitalRead(4);
controllerData.crossOn = !digitalRead(5);
controllerData.dpadUpOn = !digitalRead(6);
controllerData.dpadDownOn = !digitalRead(7);
controllerData.dpadLeftOn = !digitalRead(8);
controllerData.dpadRightOn = !digitalRead(9);
controllerData.l1On = !digitalRead(10);
controllerData.l2On = !digitalRead(A0);
controllerData.l3On = !digitalRead(A1);
controllerData.r1On = !digitalRead(11);
controllerData.r2On = !digitalRead(A2);
controllerData.r3On = !digitalRead(A3);
controllerData.selectOn = !digitalRead(12);
controllerData.startOn = !digitalRead(A4);
controllerData.homeOn = !digitalRead(A5);

// Set the analog sticks
// Since analogRead(pin) returns a 10 bit value,
// we need to perform a bit shift operation to
// lose the 2 least significant bits and get an
// 8 bit number that we can use

// And return the data!
return controllerData;
}
 
Odpowiedź
#16
Poniżej struktura obsługiwanych wejść:
Kod:
    typedef struct dataForController_t{
            uint8_t triangleOn : 1;  // Each of these member variables
        uint8_t circleOn : 1;    //  control if a button is off or on
        uint8_t squareOn : 1;    // For the buttons,
        uint8_t crossOn : 1;     //  0 is off
        uint8_t l1On : 1;        //  1 is on
        uint8_t l2On : 1;        
        uint8_t l3On : 1;        // The : 1 here just tells the compiler
        uint8_t r1On : 1;        //  to only have 1 bit for each variable.
                                //  This saves a lot of space for our type!
        uint8_t r2On : 1;
        uint8_t r3On : 1;
        uint8_t selectOn : 1;
        uint8_t startOn : 1;
        uint8_t homeOn : 1;
        uint8_t dpadLeftOn : 1;
        uint8_t dpadUpOn : 1;
        uint8_t dpadRightOn : 1;

        uint8_t dpadDownOn : 1;
       uint8_t padding : 7;     // We end with 7 bytes of padding to make sure we get our data aligned in bytes
                               
        uint8_t leftStickX : 8;  // Each of the analog stick values can range from 0 to 255
        uint8_t leftStickY : 8;  //  0 is fully left or up
        uint8_t rightStickX : 8; //  255 is fully right or down
uint8_t rightStickY : 8; //  128 is centered.
Zdaje się wszystkie wejścia wykorzystałeś.
Pisałeś jednak, że chcesz aby zwarcie jednego przycisku generowało kod aktywności dwu. Jeśli chcesz taką funkcję uzyskać to nie ma problemu.
 
Odpowiedź
#17
chodzi mi o to żeby mieć 20 aktywnych przycisków i każdy działał jako oddzielna funkcja w grze
tak jak jest teraz wykrywany jkako kontroler w ustawieniach urządzeń w panelu sterowania pokazuje mi 14 plus krzyż ( 4 dodatkowe ) a musi być 20, nie wiemna ile jest to zrozumiałe
tak jak tu na pierwszym obrazku jest 14 plus krzyż
http://tecnomente.altervista.org/wp-cont...nojoy2.png
a chciałbym tak jak tu ( tyle że 20 )
https://forum.arduino.cc/index.php?actio...ach=155269
 
Odpowiedź
#18
To masz dwie drogi:
- znaleźć stosowną bibliotekę
- zmodyfikować istniejącą
 
Odpowiedź
#19
a może wiersz jak dopisać migającą diodę do któregoś z przycisków ?
 
Odpowiedź
#20
(05-07-2018, 16:34)alientv napisał(a): a może wiersz jak dopisać migającą diodę do któregoś z przycisków ?
Chodzi o miganie LED sterowanie z HOST-a czy po naciśnięciu przycisku na uno r3 (czy innego Arduino) ?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości