Also persönlich hab ich das noch nie benutzt/gebraucht, aber Beschleunigungssensoren gibt es durchaus einige für Arduino und der erste, den ich da so gefunden hab (ADXL345) sollte denke ich auch gut hierfür geeignet sein. Mehr als 16G wird man wohl nicht messen müssen :D.
flipper tastatur
-
-
wie @Seppl1, du hast mit sowas keine erfahrung? jetzt bin ich aber mal tief von dir enttäuscht *g*
auf jeden fall gehe ich somit davon aus, dass sich das zeug im sketch so einstellen lässt, dass ich nicht alle 5 sek. tilte, nur weil ich die tastatur böse anschaue oder ähnliches.ging der auch? ist zwar ein adxl335 und mir ist der unterschied eh ned klar.
AZDelivery GY-61 ADXL335 Beschleunigungssensor Winkel Sensor Modul kompatibel mit Arduino : Amazon.de: Gewerbe, Industrie & Wissenschaft [Anzeige]
ich weiß, der preis ist heiß *g*. aber wenn schon schina-schrott, dann wenigstens vom einzigen mir seit längeren bekannten de-lageristen und vor allem mit prime (1 chat genügt und die amazonen kommen über die *g*)weißt du da schon, ob die lage des einbaues wichtig ist, oder kann ich den in eine ecke meiner tastatur stecken, wie und wo gerade platz ist?
brauchen tu ich eigentlich ja eh nur die y-achse (vielleicht könnte man x noch mitnehmen, wenn mans ganz genau machen will), und theoretisch könnte ich da ja auch für x oder z verdrahten, wenn das platzmäßig besser wäre, oder?was übrigens die tasten angeht:
selber schaffe ich die meisten tasten:
up (mittelkonsole)
down (mittelkonsole)
left (mittelkonsole)
right (mittelkonsole)
esc (mittelkonsole)
return (mittelkonsole)
return (rechte seite für kugel start)
links shift (flipper links)
rechts shift (flipper rechts)
space sollte der sensor werden (der ist unten 2 mal eingetragen, weil ich ja links und rechts je einmal space aufgerufen hab in zukunf TILT)hilfe brauch ich bei:
tilt (sensor mittelkonsole, 1 oder 2 achsen?)
2 tasten für "tippen" des namens bei highscorebis jetzt hab ich
Code
Alles anzeigen#include <Keyboard.h> /* flipper gross */ // --------------------------------- // KEYS #define RT1_KEY 0xB0 #define RT2_KEY 0xB0 #define ESC_KEY 0xB1 #define LSP_KEY 0x20 <-- das sollte de3r sensor übernehmen #define RSP_KEY 0x20 <-- das sollte de3r sensor übernehmen #define LSH_KEY 0x81 #define RSH_KEY 0x85 #define LE_KEY 0xD8 #define RI_KEY 0xD7 #define UP_KEY 0xDA #define DN_KEY 0xD9 #define N1_KEY BUCHSTABENFOLGE ??? #define N2_KEY BUCHSTABENFOLGE ??? // PINS #define RT1_PIN 2 #define ESC_PIN 3 #define LSP_PIN 4 <-- das sollte de3r sensor übernehmen #define RSP_PIN 5 <-- das sollte de3r sensor übernehmen #define LSH_PIN 6 #define RSH_PIN 7 #define LE_PIN 10 #define RI_PIN 16 #define UP_PIN 14 #define DN_PIN 15 #define RT2_PIN (weiß i no ned) #define N1_PIN (weiß i no ned) #define N2_PIN (weiß i no ned) // --------------------------------- // Button helper class for handling press/release and debouncing class button { public: const char key; const uint8_t pin; button(uint8_t k, uint8_t p) : key(k), pin(p) {} void press(boolean state) { if (state == pressed || (millis() - lastPressed <= debounceTime)) { return; // Nothing to see here, folks } lastPressed = millis(); state ? Keyboard.press(key) : Keyboard.release(key); pressed = state; } void update() { press(!digitalRead(pin)); } private: const unsigned long debounceTime = 30; unsigned long lastPressed = 0; boolean pressed = 0; } ; // Button objects, organized in array button buttons[] = { {RT1_KEY, RT1_PIN}, {RT2_KEY, RT2_PIN ???}, {ESC_KEY, ESC_PIN}, {LSP_KEY, LSP_PIN}, <-- das sollte de3r sensor übernehmen {RSP_KEY, RSP_PIN}, <-- das sollte de3r sensor übernehmen {LSH_KEY, LSH_PIN}, {RSH_KEY, RSH_PIN}, {LE_KEY, LE_PIN}, {RI_KEY, RI_PIN}, {UP_KEY, UP_PIN}, {DN_KEY, DN_PIN}, {N1_KEY, N1_PIN}, ??? {N2_KEY, N2_PIN} ??? }; const uint8_t NumButtons = sizeof(buttons) / sizeof(button); const uint8_t ledPin = 17; void setup() { // Safety check. Ground pin #1 (RX) to cancel keyboard inputs. pinMode(1, INPUT_PULLUP); if (!digitalRead(1)) { failsafe(); } // Set LEDs Off. Active low. pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); TXLED0; for (int i = 0; i < NumButtons; i++) { pinMode(buttons[i].pin, INPUT_PULLUP); } } void loop() { for (int i = 0; i < NumButtons; i++) { buttons[i].update(); } } void failsafe() { for (;;) {} // Just going to hang out here for awhile :D }
aja, wenn ma schon dabei sind: ich gönne mir diesmal knöpfchen aus metall (hoffe nur, die sind nicht zu schwergängig):
für die flipper: Gebildet 2pcs 22mm 2A/12V/24V/125V/250V Momentan Taster Schraubklemmen Edelstahl Metall wasserdichte Taste(Hoher Kopf) : Amazon.de: Baumarkt [Anzeige]
für den rest: Gebildet 10 Stücke wasserdichte Drucktaster Momentanen Edelstahl Taster EIN Aus 12mm 2A/12V/24V/125V/250V(Hervorstehend) : Amazon.de: Baumarkt [Anzeige] -
-
-
ging der auch? ist zwar ein adxl335 und mir ist der unterschied eh ned
Auslesen sollte kein Problem sein, man braucht aber pro Achse für die man die Beschleunigung auslesen will einen Analog Input. Der Pro Micro sollte aber genug haben.
Was ich nicht so richtig einschätzen kann ist, ob 3g, also knapp 30m/s^2 reichen. Du könntest dir vielleicht mal die App "phyphox" auf dem Handy installieren und bei "Beschleunigung mit g" bzw. "Beschleunigung ohne g" testen, bei welchem Wert es ungefähr auslösen sollte.
weißt du da schon, ob die lage des einbaues wichtig ist, oder kann ich den in eine ecke meiner tastatur stecken, wie und wo gerade platz ist?
Nach Bauchgefühl würde ich sagen solange er irgendwo in der Nähe der Tastatur ist, passt das. Wenn du ihn jetzt ans linke "Lenkerende" setzen würdest und dann rechts rüttelst, würde es vermutlich eher nicht funktionieren (würde unter sonstigen Vibrationen untergehen), aber so sollte das OK sein.
hilfe brauch ich bei:
tilt (sensor mittelkonsole, 1 oder 2 achsen?)
2 tasten für "tippen" des namens bei highscoreBezüglich Tilt warte ich mal, ob dir die 3g reichen, je nachdem welcher Sensor es wird, muss man die unterschiedlich auslesen.
Sollen die 2 Tasten 2 underschiedliche Zeichenfolgen senden, oder wieso 2 bzw. was sollen die genau machen?
-
-
1) der sensor kommt in die mitte, wahrscheinlich abgesetzt vom arduino, weil der seitlich schräg sitzen wird. mittiger geht's dann nicht mehr *g*
das ist jetzt mal so geplant in etwa (sicht von hinten, unten):
der arduino und der usb-stecker sind das rote teil im blauen gehäuse. der sensor wird dann mittiger (irgendwo bei den grünen tastern), im 90° winkel zur blauen platte kommen.2) ich lieg meistens beim anschubsen irgendwo um die 5 bis 7 g - manches mal hab ich auch 10 g geschafft. ich hab aber keinen dunst, wie weit die 2 arme des flippers dann die werte beeinflussen würden.
ich überlege gerade, ob ich den sensor nicht von oben gesehen wie ein karo einbauen sollte. dann könnte man x und y miteinander verrechnen eventuell?
z auf jeden fall ignoriert er wunderbar. da komm ich selten über 1 g.3) bei den zeichenfolgen-tasten sollen 2 namen rein kommen. dann muss man nicht mal mehr beim highscore was tippen. bis auf das starten des flippers kann ich bis inkl. beenden alles per flipper-tastatur erledigen.
nachtrag:
falls es interessiert, so sieht das bis jetzt aus (das braune zeug simuliert mir die tischplatte): -
ich lieg meistens beim anschubsen irgendwo um die 5 bis 7 g - manches mal hab ich auch 10 g geschafft.
Nur um 100%ig sicher zu gehen: Die App hat dir also bis zu 100 m/s^2 angezeigt?
Könntest du mal noch "normale" Bewegungen simulieren, und schauen wie viel es dann maximal anzeigt? Wenn das unter 3g bleibt, würde der Sensor ja im Prinzip auch reichen.
-
-
also nochmal von vorne - war da sicher etwas dämlich im kopf *g*
versuchs aufbau: meine aktuelle flipper-tastatur mir handy drauf gelegt.
grob gesagt: y und z sind da vertauscht, weils handy mehr steht als liegt.
wie man sieht, hab ich schon in weiser voraussicht genau platz für mein handy geschaffen *lach*knöpfe drücken:
x: -5 bis 5 m/s2
y: 4 bis 8 m/s2
z: 0 bis 10 m/s2tilten:
x: -4 bis 4 m/s2
y: 5 bis 15 m/s2
z: -10 bis 20 m/s2 -
Sehr professioneller Experimentaufbau . Dann sollte der Sensor ja reichen.
-
-
ich kann also meinen ausgewählten amazonas-sensor kaufen? nur, um 100% sicher zu gehen. nicht dass ich das falsche kauf *g*.
jojo, ich stehe schon immer für professionellen, immer nachvollziehbaren experimental aufbau. viele universitäten wollen mich dafür töten
-
ich kann also meinen ausgewählten amazonas-sensor kaufen? nur, um 100% sicher zu gehen. nicht dass ich das falsche kauf *g*.
Ja
-
-
sodale, dann hätten wir mal bestellt ... die taster kommen am donnerstag, der sensor am dienstag (theoretisch *g*)
wenn du mir sagst, an welche pins der sensor soll, dann werd ich den mal mit dem arduino vermählen und ein gscheits plätzchen für die 2 suchen. wahrscheinlich löte ich die dinger doch zusammen. währe weniger drahtgedöns.
ich werd's wohl auch so einbauen, dass alle 3 achsen richtig liegen (also x nach rechts schaut und z nach oben und y nach hinten). dann muss hier niemand umdenken.ich fasse nochmal zusammen @Seppl1:
hardware:
1 x KeeYees Pro Micro ATmega32U4 5V 16MHz Entwicklerboard Modul für Arduino Leonardo Board (im anhang ein entsprechendes bild)
1 x AZDelivery GY-61 ADXL335 Beschleunigungssensor Winkel Sensor Modul kompatibel mit Arduinobutton belegung:
1 x LS_KEY am linken arm (taste "left shift" hex: 0x81)
1 x RS_KEY am rechten arm (taste "right shift" hex: 0x85)
1 x R1_KEY am rechten arm (taste "return" hex: 0xB0)
1 x R2_KEY in der mittelkonsole (taste "return" hex: 0xB0)
1 x EC_KEY in der mittelkonsole (taste "esc" hex: 0xB1 )
1 x UP_KEY in der mittelkonsole (taste "pfeil hoch" hex: 0xDA)
1 x DN_KEY in der mittelkonsole (taste "pfeil runter" hex: 0xD9)
1 x LF_KEY in der mittelkonsole (taste "pfeil links" hex: 0xD8)
1 x RT_KEY in der mittelkonsole (taste "pfeil rechts" hex: 0xD7)
1 x "name 1" in der mittelkonsole (soll eine tastenfolge für 3 bis 10 tasten - keine sonderzeichen oder space nötig - abspielen)
1 x "name 2" in der mittelkonsole (soll eine tastenfolge für 3 bis 10 tasten - keine sonderzeichen oder space nötig - abspielen)
1 x sensor
--> bei platzmangel hänge ich die 2 returns auch zusammen
--> wenn's gar nicht anders geht, verzichte ich auch auf die 2 "namen buttons"nachtrag:
ich hab mal einen "universellen" halter angedacht. so kann ich dan arduino nach deinen wünschen um 180° wenden
-
Pins hat der Pro Micro auf jeden Fall genug und welchen du wofür nutzt ist auch fast egal. Einzige Vorgabe ist, dass der Sensor für jede Achse einen analogen Input braucht, also einen der "grünen" Pins.
-
-
naja, so a bissi logik bei der pinbelegung wäre sicher auch ned das dämlichste.
dann wäre - wenn ichs auf den arduino "nach innen" stecken will - das intelligenteste wohl:
vcc - per stift auf arduino vcc
x - per stift auf arduino a3
y - per stift auf arduino a2
z - per stift auf arduino a1
gnd - per draht wo es grade passt am arduino
soweit so gut für dich?aussehen tut die sache derzeit (theoretisch) wie folgt:
jetzt ist nicht nur horizontal um 180° zu wenden, sondern auch um 360° drehbar. wir sollten also genug möglichkeiten haben, dass ganze auch mechanisch zu tunen, wenn's nötigt wäre.
von links hinten auf die tastatur gesehen sieht man einen gedruckten halter, auf den der arduino dann aufgeklebt wird. rechts hält der stecker des usb-kabels alles fest.
der sensor würde jetzt nach oben vom arduino weg stehen.btw - sag mal @Seppl1:
mir ist grade das premium feature für das projekt durch meine 3 gehirnzellen geschossen! ist's möglich einen weiteren taster so zu programmieren, dass er mir das spiel unter windoof startet und vor dem start den audio ausgang auswählt?schande ... ich sehe grad, die rüttelfunktion geht in 3 richtungen, also nicht nur "anstoßen von vorne", sondern auch noch "anstoßen von links/rechts". könnte man das mit bedenken, aber links/rechts leicht abstellbar machen, falls das dann doch nicht mit dem drücken der flippertasten funzt.
nachtrag "setvol":
man könnte für den audio kanal wohl das tool SetVol - free command line utility to set your Windows master volume level (rlatour.com) verwenden, denk ich. ist das einzige, dass ich gefunden hab, dass nicht mit einem gui arbeitet.
der befehl wäre dann bei mir: "setvol device ohrWiXXer"
dann noch gleich ein "steam://rungameid/442120" danach, und pinball fx3 sollte auch anrennen.
eigentlich könnte man das doch auch gleich beim anstecken der tastatur ausführen, oder? -
heute war ich brav *g*
nachdem sowohl der sensor als auch die taster gekommen sind und ich schon ein paar kleinigkeiten gedruckt habe -->DAS ist nun ein anderes kaliber als meine kleine baby-tastatur! *bg* meine ideen scheinen zu funzen. das ist alles nur mal zusammen gesteckt und die haupt-träger-teile fehlen alle noch. trotzdem hält sich das alles schon in sich ein bisschen. das motiviert zum weiter machen.
der einzig negative punkt: ich muss den alten monitorständer vom ersten flipper missbrauchen, ich hab einfach sonst nix, was in der größe passt und als ständer missbraucht werden könnte.nachtrag @Seppl1
wegen der befehls sequenz beim anstecken (sofern das geht) --> "setvol device ohrWiXXer" und "steam://rungameid/442120"
ich könnte auch ne bat machen, die dann aufgerufen werden müsste. wäre sicher simpler für dich zu machen und vor allem auch für mich einfacher, weil ich dann je compi ja nur eine bat mit gleichen namen hinterlegen müsste, die natürlich computerspezifisch schaltet. -
-
sodale ... der entwurf ist nun mal endgültig fertig (soweit man das bei meinen entwürfen mal sagen kann *g*). zumindest bin ich jetzt mal halbwegs zufrieden damit.
- neu ist die platte fürs logo.
- die flipper-knöpfe habe ein größeres gehäuse bekommen, damit ich diese hässliche lötstelle mit schrumpfschlauch rechts verstecken kann
- einen knopf hab ich noch auf der befehlsplatte hinzugefügt. einfach, weil er hier rum liegt und man weiß ja nie ...
- ein paar kleine verbesserungen, der einfacheren druckbarkeit geschuldet, hab ich auch noch gemacht (*)
zu tun nicht gar nicht mehr viel:
- logoplatte und logo drucken (wochenende)
- die platte mit den befehlstasten drucken (heute)
- die beiden vergrößerten knopfhalter außen drucken (heute oder we)
- arduino programmieren (je nach (bier)laune von seppl1 *g*)
*) wobei ich sagen muss, das petg von "das filament" kanns echt super. gestern abend aus 6 stk. 2 cm tiefen sacklöchern mit 5 mm durchmesser, liegend gedruckt, den support (mit boden- und dach-ebenen) einfach mal so mit einen kleinen schraubenzieher aus den löchern geholt.
an meiner vorsicht, geduld oder den super ausgeklügelten cura-einstellungen hats sicher nicht gelegen. großes kino! könnte man locker als werbe video verkaufen. schade, dass ich keines gemacht hab ...nachtrag für @Seppl1
wenn dies praktikabel ist - derzeit hab ichs so verlötet
endgültige tasten:
1 x RS_KEY am rechten arm (taste "right shift" hex: 0x85)
1 x LS_KEY am linken arm (taste "left shift" hex: 0x81)
1 x R1_KEY am rechten arm (taste "return" hex: 0xB0)
1 x N1_KEY in der mittelkonsole (soll eine tastenfolge für 3 bis 10 tasten - keine sonderzeichen oder space nötig - abspielen)
1 x N2_KEY in der mittelkonsole (soll eine tastenfolge für 3 bis 10 tasten - keine sonderzeichen oder space nötig - abspielen)
1 x R2_KEY in der mittelkonsole (taste "return" hex: 0xB0)
1 x EC_KEY in der mittelkonsole (taste "esc" hex: 0xB1 )
1 x XX_KEY in der mittelkonsole (taste "???" hex: ???? )1 x UP_KEY in der mittelkonsole (taste "pfeil hoch" hex: 0xDA)
1 x RT_KEY in der mittelkonsole (taste "pfeil rechts" hex: 0xD7)
1 x LF_KEY in der mittelkonsole (taste "pfeil links" hex: 0xD8)
1 x DN_KEY in der mittelkonsole (taste "pfeil runter" hex: 0xD9)belegungsplane am arduino:
vcc sensor vcc arduino 2 RS_KEY analog 3 sensor x arduino 3 LS_KEY analog 2 sensor y arduino 4 R1_KEY analog 1 sensor z arduino 5 N1 (tastenfolge) arduino 6 N2 (tastenfolge) arduino 15 UP_KEY arduino 7 R2_KEY arduino 14 RT_KEY arduino 8 EC_KEY arduino 16 LF_KEY arduino 9 XX_KEY arduino 10 DN_KEY -
Also, anbei mal eine erste Version.
- Aktuell wird nach den Strings Enter gedrückt, falls das nicht so sein soll, einfach das "println" jeweils durch "print" ersetzen.
- Generell ist der Teil zu den Strings nicht unbedingt schön (insb. falls er jemals erweitert werden sollte), aber er sollte funktionieren.
- Man muss sicher noch mit "minBump" einstellen, wie sensibel der Beschleunigungssensor sein soll. Könnte mir vorstellen, dass es so noch etwas zu sensibel ist und der Wert höher sein sollte.
- Wenn du die Tastatur einsteckst, solltest du sie hinstellen und kurz ruhig stehen lassen, dann wird dieser Wert für die Beschleunigung (die Erdbeschleunigung) als Referenz verwendet. Da alle 3 Sensoren gleich behandelt werden, sollte es aktuell auch relativ egal sein, wie der Sensor positioniert ist.
- Nach einem Tilt wird 2s jede Beschleunigung ignoriert, den Wert könnte man vermutlich noch runter setzen, aber ich denke Tilt wird nicht so oft benötigt?
- Wegen dem Starten/Ausführen von nem Batch Skript: Ich denke da ist es sinnvoller einen Service zu erstellen, der das Skript ausführt, wenn das USB-Gerät erkannt wird. Unter Linux wäre das kein Problem, wie das unter Windows funktioniert kann ich dir aber nicht sagen. Dabei sollte man aber beachten, dass die USB VendorID und ProductID standardmäßig bei jedem Pro Micro gleich sein wird, also evtl. braucht es noch etwas anderes um genau diese Gerät zu identifizieren, sonst startet es auch bei deinem HandGamer.
C
Alles anzeigen#include <Keyboard.h> /* flipper gross */ // --------------------------------- // KEYS #define RS_KEY 0x85 #define LS_KEY 0x81 #define R_KEY 0xB0 #define EC_KEY 0xB1 #define XX_KEY 0x00 #define UP_KEY 0xDA #define RT_KEY 0xD7 #define LF_KEY 0xD8 #define DN_KEY 0xD9 #define SP_KEY 0x20 // STRINGS #define N1_STRING "BUCHSTABENFOLGE1" #define N2_STRING "BUCHSTABENFOLGE2" // PINS #define RS_PIN 2 #define LS_PIN 3 #define R1_PIN 4 #define N1_PIN 5 #define N2_PIN 6 #define R2_PIN 7 #define EC_PIN 8 #define XX_PIN 9 #define SENSE_X_PIN A3 #define SENSE_Y_PIN A2 #define SENSE_Z_PIN A1 #define UP_PIN 15 #define RT_PIN 14 #define LF_PIN 16 #define DN_PIN 10 // --------------------------------- // Button helper class for handling press/release and debouncing class button { public: const char key; const uint8_t pin; button(uint8_t k, uint8_t p) : key(k), pin(p) {} void press(boolean state) { if (state == pressed || (millis() - lastPressed <= debounceTime)) { return; // Nothing to see here, folks } lastPressed = millis(); state ? Keyboard.press(key) : Keyboard.release(key); pressed = state; } void update() { press(!digitalRead(pin)); } private: const unsigned long debounceTime = 30; unsigned long lastPressed = 0; boolean pressed = 0; }; class sensor { public: const int pin; int ref; int minBump; sensor(int p, in mB) : pin(p), minBump(mB) {} int readraw() { return analogRead(pin); } void setref() { ref = readraw(); } bool hit() { return (abs(readraw() - ref) > minBump); } void tilt() { if (!(hit()) || (millis() - lastHit <= debounceTime)) {return;} lastHit = millis(); Keyboard.press(SP_KEY); Keyboard.release(SP_KEY); } private: const unsigned long debounceTime = 2000; unsigned long lastHit = 0; }; void failsafe() { for (;;) {} // Just going to hang out here for awhile :D } void typeName(int pin) { if (digitalRead(pin)) {return;} if (pin == N1_PIN) { Keyboard.println(N1_STRING); } else if (pin == N2_PIN) { Keyboard.println(N2_STRING); } delay(1500); } // Button objects, organized in array button buttons[] = { {RS_KEY, RS_PIN}, {LS_KEY, LS_PIN}, {R_KEY, R1_PIN}, {R_KEY, R2_PIN}, {EC_KEY, EC_PIN}, {UP_KEY, UP_PIN}, {RT_KEY, RT_PIN}, {LF_KEY, LF_PIN}, {DN_KEY, DN_PIN}, }; sensor sensors[] = { {SENSE_X_PIN, 100}, {SENSE_Y_PIN, 100}, //{SENSE_Z_PIN, 100}, }; const uint8_t NumButtons = sizeof(buttons) / sizeof(button); const uint8_t NumSensors = sizeof(sensors) / sizeof(sensor); const uint8_t ledPin = 17; const unsigned long hitDebounceTime = 2000; unsigned long lastHit = 0; bool anyHit() { for (int i=0; i < NumSensors; i++) { if (sensors[i].hit()) { return 1; } } return 0; } void anyTilt() { if (!(anyHit()) || (millis() - lastHit <= hitDebounceTime)) {return;} lastHit = millis(); Keyboard.press(SP_KEY); Keyboard.release(SP_KEY); } void setup() { // Safety check. Ground pin #1 (RX) to cancel keyboard inputs. pinMode(1, INPUT_PULLUP); if (!digitalRead(1)) { failsafe(); } // Set LEDs Off. Active low. pinMode(ledPin, OUTPUT); digitalWrite(ledPin, HIGH); TXLED0; for (int i = 0; i < NumButtons; i++) { pinMode(buttons[i].pin, INPUT_PULLUP); } delay(2000); // Wait for device to be at rest after plugging it in before setting reference g force. for (int i = 0; i < NumSensors; i++) { pinMode(sensors[i].pin, INPUT); // not really necessary, just to be sure sensors[i].setref(); } pinMode(N1_PIN, INPUT_PULLUP); pinMode(N2_PIN, INPUT_PULLUP); } void loop() { for (int i = 0; i < NumButtons; i++) { buttons[i].update(); } anyTilt(); typeName(N1_PIN); typeName(N2_PIN); }
-
-
danke dir vielmals!!! wieder ein projekt, dass ohne dir sowieso sinnlos wäre!
muss nur noch die 3 taster li und re neu in sich und am arduino an-löten und alles zusammen stecken, dann kann ich zumindest mal testen. am wochenende wird das was, weil morgen hab ich keine zeit.Aktuell wird nach den Strings Enter gedrückt, falls das nicht so sein soll, einfach das "println" jeweils durch "print" ersetzen.
mal schauen, was das game zu sagt. ich denke, ich werde dann wohl den return-button extra drücken müssen. so wäre zumindest der "normale" verlauf im spiel (und die menü führung des spiels ist da ein wenig ... eigen). aber wenn er den auch den string + ret frisst, werd ich mich ned beschweren *g*.
Man muss sicher noch mit "minBump" einstellen, wie sensibel der Beschleunigungssensor sein soll. Könnte mir vorstellen, dass es so noch etwas zu sensibel ist und der Wert höher sein sollte.
ah, der ist sicher sehr wichtig. könnte man das auch für x und y extra einstellen? denke, x ist nicht so sensibel wie y und z könnte man sowieso total ignorieren.
Wenn du die Tastatur einsteckst, solltest du sie hinstellen und kurz ruhig stehen lassen, dann wird dieser Wert für die Beschleunigung (die Erdbeschleunigung) als Referenz verwendet. Da alle 3 Sensoren gleich behandelt werden, sollte es aktuell auch relativ egal sein, wie der Sensor positioniert ist.
o.k.
Nach einem Tilt wird 2s jede Beschleunigung ignoriert, den Wert könnte man vermutlich noch runter setzen, aber ich denke Tilt wird nicht so oft benötigt?
naja, man schubbst ja im echten leben den flipper an, dadurch kann die kugel zusätzlich beeinflusst werden. tut man's zu oft, wird getiltet, also deine eingaben wegen "cheatens" gesperrt. die 2 s sind also wahrscheinlich zu viel. wer zu oft anstößt: selber schuld ... denke, die "trägheit" wie schnell der sensor reagiert ist für meine tastatur viel wichtiger.
für mehr "echtheit" ists auch wichtig, dass ich die richtungen unterscheiden kann, also x+, x- und y. ist zwar rein technisch ned so wichtig, aber würde mehr in richtung "simulation" gehen.
am liebsten würd ich die tastatur nämlich frei schwenkbar aufhängen - zumindest in y- richtung (dann geht tilten ohne gegen den monitor fliegende tastatur *g*). x wird das größte problem, weil ich zw. tilt und flippen unterscheiden muss. drum auch der fokus auf die "trägheit" des auslösens des sensors. denke, da wird wohl ein kompromiss gefunden werden müssen.Wegen dem Starten/Ausführen von nem Batch Skript: Ich denke da ist es sinnvoller einen Service zu erstellen, der das Skript ausführt, wenn das USB-Gerät erkannt wird. Unter Linux wäre das kein Problem, wie das unter Windows funktioniert kann ich dir aber nicht sagen. Dabei sollte man aber beachten, dass die USB VendorID und ProductID standardmäßig bei jedem Pro Micro gleich sein wird, also evtl. braucht es noch etwas anderes um genau diese Gerät zu identifizieren, sonst startet es auch bei deinem HandGamer.
wies genau rennt mit usb-erkennung weiß ich auch ned bei win - name des sticks ginge wohl, aber wie genau???
ich fände es aber deutlich einfacher, wenn man den batch aufruft. das kann ich, da kann ich mich dann gut genug aus, ohne dich zu nerven. also wenn das ginge ...nachtrag: wie weit darf ich minBump eigentlich drehen? 0 bis ??'?'
debounceTime hab ich mal auf 1000 gestellt (ohne testen) gibt's da auch min max? -
könnte man das auch für x und y extra einstellen? denke, x ist nicht so sensibel wie y und z könnte man sowieso total ignorieren.
Hab den Code gerade minimal abgeändert. Z ist deaktiviert und jetzt kannst du in Zeile 115/116 einstellen, ab wann es triggern soll.
für mehr "echtheit" ists auch wichtig, dass ich die richtungen unterscheiden kann, also x+, x- und y. ist zwar rein technisch ned so wichtig, aber würde mehr in richtung "simulation" gehen.
Auslesen lässt sich das natürlich problemlos, aber was willst du damit anfangen? Letztendlich wird doch nur die Leertaste gedrückt, oder? Vielleicht musst du mir mal noch genauer erklären welche Bewegungen es so gibt. Ich hatte bisher angenommen, es gibt einfach nur "dran rütteln".
ich fände es aber deutlich einfacher, wenn man den batch aufruft. das kann ich, da kann ich mich dann gut genug aus, ohne dich zu nerven. also wenn das ginge ...
Wenn es eine Tastenkombination zum öffnen der Kommandozeile gibt, könnte der Arduino die eingeben und danach den Befehl zum ausführen der Batch.
-
-
Hab den Code gerade minimal abgeändert. Z ist deaktiviert und jetzt kannst du in Zeile 115/116 einstellen, ab wann es triggern soll.
in welchen zahlenberiechen bewege ich mich da von - bis?
Auslesen lässt sich das natürlich problemlos, aber was willst du damit anfangen? Letztendlich wird doch nur die Leertaste gedrückt, oder? Vielleicht musst du mir mal noch genauer erklären welche Bewegungen es so gibt. Ich hatte bisher angenommen, es gibt einfach nur "dran rütteln".
hehe, dacht auch lange, dass es nur eine richtung gibt. aber das game stellt nicht nur "space" für das anstoßen von vorne zur verfügung sondern auch "lshift+strg" und "rshift+strg" (kann man zum glück ändern) für anstoßen von links und rechts zur verfügung.
je nach tisch kann das auch verschiedene auswirkungen auf den kugellauf haben. speziell, wenn du die "original" nachgebauten tische der firma williams spielst.
hab ich lange nicht gemacht, weil die tische nur hochkant brauchbar kommen. aber seit ich draufgekommen bin, wie leicht ich meinen monitor hochkant drehen kann, bzw. dass ich auf meinem surface tablet das game sowieso am besten hochkant spiele ...Wenn es eine Tastenkombination zum öffnen der Kommandozeile gibt, könnte der Arduino die eingeben und danach den Befehl zum ausführen der Batch.
eigentlich brauchst du dazu keine cmd. du kannst die bat aufrufen, wie jede exe oder deren verknüpfung. bspl. wäre also für hier: pfad zum aufrufen ---> C:\Users\the ratman\Spiele\pbfx3.bat
theoretisch müsste der aufruf im arduino also so gehen:
in der bat schreib ich dann, was immer ich lustig bin z.b.:
neues (funzendes) bat-beispiel im nachtrag
wenn es den also eine möglichkeit gibt, aus dem arduino raus die bat zu starten, reicht das vollkommen. nur wie das in dem fall geht, weiß ich wieder mal nicht *g*nachtrag:
für alle, die hier mitlesen: ich habs nicht gheschafft mit dem tool "setvol" das audiodevice zu wechseln. drum hab ich das tool "nircmd" am laufen. das macht, was es soll.
somit funktioniert folgende bat-datei für mich: -
@Seppl1 test gemacht:
ZitatArduino: 1.8.16 (Windows 10), Board: "Arduino Leonardo"
flipper_xxl:66:19: error: 'in' has not been declared
sensor(int p, in mB) : pin(p), minBump(mB) {}
^~
Mehrere Bibliotheken wurden für "Keyboard.h" gefunden
Benutzt: C:\Users\the ratman\Documents\Arduino\libraries\Keyboard
Nicht benutzt: C:\Program Files (x86)\Arduino\libraries\Keyboard
exit status 1
'in' has not been declared
Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.er gibt dazu die zeile
sensor(int p, in mB) : pin(p), minBump(mB) {}
an -
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!