Hallo allerseits
Habe vor einen arcade Controller zu bauen als Basis benutze ich den
Arduino Leonardo. Auf ein Arduino sollen zwei Spieler mit betrieben
werden… dadurch komme ich auf ca. 24/25 tasten (erstmal nur 8 taster).
Da ich auf dem Leonardo nicht viele digitalen Inputs Pins habe benutze
ich deshalb einen Schieberegister empfohlen von dieser netten community
hier. Danke nochmals
Den Schieberegister denn ich benutze ist ein CD4021.
Hab aus der Arduino Seite eine Schaltung gefunden mit dem cd4021 und aus
einer anderen Seite einen passenden Code.
Den Code habe ich so angepasst, dass es mit 8 Tastern auf den cd4021
Register funktioniert. Damit lässt es sich wie mit einer Tastatur
schreiben und zwar die Bustaben: A b c d e f g h.
Jetzt das Problem:
1. Leider Kann ich die Tasten z.B nicht zum Spielen verwenden.
2. Die Tasten lassen sich NICHT gleichzeitig tippen. (Zum Spielen von
Combos wäre das schon nützlich)
Hier die links zu meinen Quellen:
https://www.arduino.cc/en/Tutorial/ShiftInhttp://lucidtronix.com/tutorials/15
Hier die Schaltung:
https://www.arduino.cc/en/uploads/Tutorial/ShftInExmp1_Schem.png
Hier der Code:
Außerdem gibt es die Möglichkeit eine Libary einzurichten wodurch der Pc
den Arduino als Gamepad erkennt wäre für den Arcade Controller genial .
Jedoch hab ich mit diesem Code überhaupt keine übersticht und keine
Ahnung wie ich das mit dem Schieberegister einbinden soll?
Link:
http://www.instructables.com/id/Arduino-LeonardoMicro-as-Game-ControllerJoystick/
Ich hoffe Ich konnte mein Anliegen gut schilden und hoffe auf Hilfe und
Unterstützung da meine Programmierkentnisse nicht sehr überragend sind.
Bedanke mich hiermit nochmal :)
Grüße
Christian
Christian K. schrieb:> Jetzt das Problem:> 1. Leider Kann ich die Tasten z.B nicht zum Spielen verwenden.
Wo ist das Problem? Wenn man wie mit einer Tastatur schreiben
kann, dann kann man sie auch zum Spielen verwenden.
Christian K. schrieb:> Damit lässt es sich wie mit einer Tastatur> schreiben und zwar die Bustaben: A b c d e f g h.Christian K. schrieb:> Jetzt das Problem:> ......> 2. Die Tasten lassen sich gleichzeitig tippen. (Zum Spielen von Combos> wäre das schon nützlich)
Wo ist das Problem? Ich sehe keines. Erkläre es.
Du willst ihn sicherlich als HID-Joystick Device nutzen richtig? War ja
in dem anderen Thread mal so angedacht weil du ihn ja an deinem
Raspberry nutzen magst.
Würdest du in AVR Studio programmieren hätte ich dir meine Library für
eine HID Device (Joystick) für den Mega32u4 rüberschwuchteln können :-/
Aber in der Ardunio Umgebung nutzt dir das nix. Außerdem brauchst du da
noch einen ISP Programer dafür. Da ich natürlich nicht den Arduino
Bootloader nutze.
Arduinoquäler schrieb:> Christian K. schrieb:>> Jetzt das Problem:>> 1. Leider Kann ich die Tasten z.B nicht zum Spielen verwenden.>> Wo ist das Problem? Wenn man wie mit einer Tastatur schreiben> kann, dann kann man sie auch zum Spielen verwenden.
Es geht einfach nicht! Auf word oder einem Texteditor klappt es nur im
spiel nicht.
> Christian K. schrieb:>> Damit lässt es sich wie mit einer Tastatur>> schreiben und zwar die Bustaben: A b c d e f g h.>> Christian K. schrieb:>> Jetzt das Problem:>> ......>> 2. Die Tasten lassen sich gleichzeitig tippen. (Zum Spielen von Combos>> wäre das schon nützlich)>> Wo ist das Problem? Ich sehe keines. Erkläre es.
Sorry meinte die tasten Lassen sich NICHT gleichzeitig tippen.
Rene K. schrieb:> Du willst ihn sicherlich als HID-Joystick Device nutzen richtig?> War ja> in dem anderen Thread mal so angedacht weil du ihn ja an deinem> Raspberry nutzen magst.>> Würdest du in AVR Studio programmieren hätte ich dir meine Library für> eine HID Device (Joystick) für den Mega32u4 rüberschwuchteln können :-/> Aber in der Ardunio Umgebung nutzt dir das nix. Außerdem brauchst du da> noch einen ISP Programer dafür. Da ich natürlich nicht den Arduino> Bootloader nutze.
ISP Prgrammer hab ich leider nicht ..hmm muss ich erstmal so versuchen
aber danke nochhmals^^.
wie ist der ablauf den arduino mit Avr zu programmieren?
Also bei mir, siehe oben ^^
Ist auch ein Leonardo, Pro Micro Clone. Aber ich benutze ihn halt immer
als Mega32u4 - man kommt halt nicht günstiger an nen Brett und MC ran.
;-)
Sorry für die Bildgröße, is halt grad mim Handy aufgenommen.
Draco schrieb:> Also bei mir, siehe oben ^^>> Ist auch ein Leonardo, Pro Micro Clone. Aber ich benutze ihn halt immer> als Mega32u4 - man kommt halt nicht günstiger an nen Brett und MC ran.> ;-)>> Sorry für die Bildgröße, is halt grad mim Handy aufgenommen.
Wow echt cool ;) nur leider fehlt mir der isp Programmer.... :/
Christian K. schrieb:> Sorry meinte die tasten Lassen sich NICHT gleichzeitig tippen.
Ein Korinthenkacker könnte sagen: sie lassen sich immer
gleichzeitig betätigen - nur auswerten kannst du sie nicht.
Aber es geht doch! Sogar dein Tutorial zeigt es.
--> Code Sample 1.3 Button Combination Check
Christian K. schrieb:> Es geht einfach nicht!
Toll. Und wie soll man das verstehen?
Bist du sicher dass du Student bist, oder ist das eine
beliebige Bezeichnung die du dir ausgedacht hast?
Rene K. schrieb:> Da ich natürlich nicht den Arduino Bootloader nutze.
Da bedeuted ja nicht das er nicht nutzbar wäre.
Man kann durchaus ein lauffähiges Hexfile mit AVRSTudio
erzeugen und dieses mit einem Bootloader ins Flash schreiben
lassen. AVRDude. Ist sogar bei der Arduono IDE dabei.
Rene K. schrieb:> Außerdem brauchst du da noch einen ISP Programer dafür.
Braucht er nicht, da er ja auch unabhängig von der Entwicklungs-
umgebung den AVRDude benutzen kann der wiederum den Bootloader
ansprechen kann.
Avrdude ist mit dem Arduino Bootloader des Mega32u4 garnicht so simpel
wie du denkst, entweder hat man da ganz flinke Finger oder ich weiß auch
nicht... ;-) Beim Leonardo wird dies wie folgt gemacht, da die USB
Funktionalität beibehalten muss für den Bootloader (der geht ja nicht
über einen externen USB-Seriell Chip ala FTDI) der U4 lauscht über
USB-UART auf der seriellen Schnittstelle (welche übrigens beim HID-CDC
wegfallen würde) auf eine Verbindung mit, ich glaube es waren, 200 Baud
- dann springt er in den Bootloader, wechselt den COM Port und man hat
2sec Zeit in den Programmiermudos zu wechseln bevor er wieder ins
Hauptprogramm springt. Da unterscheidet sich der Leonardo deutlichst von
den anderen Arduinos.
Arduinoquäler schrieb:> Christian K. schrieb:>> Sorry meinte die tasten Lassen sich NICHT gleichzeitig tippen.>> Ein Korinthenkacker könnte sagen: sie lassen sich immer> gleichzeitig betätigen - nur auswerten kannst du sie nicht.>> Aber es geht doch! Sogar dein Tutorial zeigt es.>> --> Code Sample 1.3 Button Combination Check
hmm danke für den Hinweis muss ich mal eher austesten..
> Christian K. schrieb:>> Es geht einfach nicht!>> Toll. Und wie soll man das verstehen?
in dem sinne dass es nicht funktioniert..ich kann im spiel die tasten
belegen aber es tut sich nix!
> Bist du sicher dass du Student bist, oder ist das eine> beliebige Bezeichnung die du dir ausgedacht hast?
ich bin student im 3. semester und programmieren ist nicht so mein
fall.....hab dafür andere stärken ;)..aber gebe mein besten und will
mich da etwas versuchen was programmieren angeht.
so hab mal jetzt die leichte alternative versucht und das shift register
weggelassen die taster auf die inputs und auf ground gelegt... und ja
es funktioniert!
der code hierführ:
1
#include <Keyboard.h>
2
voidsetup(){
3
Keyboard.begin();
4
5
6
//Joystick and buttons pin allocations
7
pinMode(0,INPUT_PULLUP);//Joystick Up
8
pinMode(1,INPUT_PULLUP);//Joystick Down
9
pinMode(2,INPUT_PULLUP);//Joystick Left
10
pinMode(3,INPUT_PULLUP);//Joystick Right
11
pinMode(4,INPUT_PULLUP);//Button 1
12
pinMode(5,INPUT_PULLUP);//Button 2
13
pinMode(6,INPUT_PULLUP);//Button 3
14
pinMode(7,INPUT_PULLUP);//Button 4
15
pinMode(8,INPUT_PULLUP);//Coin
16
pinMode(9,INPUT_PULLUP);//Start
17
}
18
19
20
voidloop(){
21
22
23
// Button labels:
24
intjoystickUp=digitalRead(0);
25
intjoystickDown=digitalRead(1);
26
intjoystickLeft=digitalRead(2);
27
intjoystickRight=digitalRead(3);
28
intbutton1=digitalRead(4);
29
intbutton2=digitalRead(5);
30
intbutton3=digitalRead(6);
31
intbutton4=digitalRead(7);
32
intcoin=digitalRead(8);
33
intstart=digitalRead(9);
34
35
36
// Joystick Up - Arrow Up Key
37
if(joystickUp==LOW){
38
Keyboard.press(218);
39
}
40
else{
41
Keyboard.release(218);
42
}
43
44
45
// Joystick Down - Arrow Down Key
46
if(joystickDown==LOW){
47
Keyboard.press(217);
48
}
49
else{
50
Keyboard.release(217);
51
}
52
53
54
// Joystick Left - Arrow Left Key
55
if(joystickLeft==LOW){
56
Keyboard.press(216);
57
}
58
else{
59
Keyboard.release(216);
60
}
61
62
63
// Joystick Right - Arrow Right Key
64
if(joystickRight==LOW){
65
Keyboard.press(215);
66
}
67
else{
68
Keyboard.release(215);
69
}
70
71
72
// Button 1 - Left CTRL
73
if(button1==LOW){
74
Keyboard.press(128);
75
}
76
else{
77
Keyboard.release(128);
78
}
79
80
81
// Button 2 - Left ALT
82
if(button2==LOW){
83
Keyboard.press(130);
84
}
85
else{
86
Keyboard.release(130);
87
}
88
89
90
// Button 3 - Left CTRL
91
if(button3==LOW){
92
Keyboard.press(32);
93
}
94
else{
95
Keyboard.release(32);
96
}
97
98
99
// Button 4 - Left CTRL
100
if(button4==LOW){
101
Keyboard.press(129);
102
}
103
else{
104
Keyboard.release(129);
105
}
106
107
108
// Coin - 5
109
if(coin==LOW){
110
Keyboard.press(53);
111
}
112
else{
113
Keyboard.release(53);
114
}
115
116
117
// Start - 1
118
if(start==LOW){
119
Keyboard.press(49);delay(100);
120
}
121
else{
122
Keyboard.release(49);
123
}
124
125
}
jemand ne idee vielleicht das Schieberegister hier im code einzubinden?
Christian K. schrieb:> jemand ne idee vielleicht das Schieberegister hier im code einzubinden?
Deine Hardware funktioniert?
Kannst du dir die eingelesenen Werte des Schieberegisters am Terminal
anzeigen lassen?
Christian K. schrieb:> Wow echt cool ;) nur leider fehlt mir der isp Programmer.... :/
Steht doch vor dir.
In der Arduino IDE unter Menü Beispiele - 11.ArduinoISP
STK500-Besitzer schrieb:> Christian K. schrieb:>> jemand ne idee vielleicht das Schieberegister hier im code einzubinden?>> Deine Hardware funktioniert?> Kannst du dir die eingelesenen Werte des Schieberegisters am Terminal> anzeigen lassen?
welchen code meinst du jetzt? ...der erste code ist mit dem register und
der 2. code ist ohne register und direkt mit den digipins verbunden.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang