Beiträge von Seppl1

    ich müsste für die achse eine richtung, also pos oder neg ausschalten. hau ich dem ding nämlich eine vor den latz, löst er 2 mal aus.

    Da du bei SENSE_Y_NEG_KEY 0 hast, ist das eigentlich schon deaktiviert. Du könntest vielleicht mal die debounceTime (Zeile 109) vergrößern. Falls du die lieber für jede Achse separat einstellen willst, braucht es eine kleine Codeänderung.

    Also, der Reihe nach:


    dir sind nicht zufällig dehnmesstreifen (oder ähnliches) in erschwinglich preislicher art bekannt, die man an so 'nen arduino dran machen könnte?

    Nicht wirklich. Piezos erzeugen ja eine Spannung, wenn sie Druck abbekommen bzw. minimal verformt werden. Die werden bei Arduinos z.B. als Vibrationssensor verwendet, aber wenn man da z.B. ein Gummiband befestigen könnte, müsste das eine Spannung abhängig vom Zug am Band ausgeben. Allerdings nur so rein theoretisch.
    Wenn du googelst findest du aber bestimmt auch Dehnmessstreifen die man mit nem Arduino auslesen kann.


    wegen meines start-programms - müsste da einfach als zeile 1 "Keyboard.println(" C:\Users\the ratman\Spiele\pbfx3.bat");" rein?

    [bv] Naja, auf jeden Fall nicht in Zeile 1. Aber wenn man es ans Ende der setup Funktion setzt, wird nichts anderes passieren, als ob du diese Zeichenfolge einfach per Tastatur eintippen und Enter drücken würdest. Also wenn du schon die Kommandozeile offen hast, würde das sogar funktionieren, aber im Allgemeinen nicht. Man müsste aber im Prinzip nur noch per Tastenkürzel die Kommandozeile öffnen, dann könnte das hinhauen.


    wenn der sensor auslöst, was er grade wirklich super macht, dann drückt quasi der arduino z.b. die space-taste nicht lange genug.

    Das ist schnell gelöst: Du musst nur zwischen Keyboard.press() und Keyboard.release() in Zeile 101 und 104 jeweils noch eine Zeile mit delay(50); einfügen. Kannst auch mit dem Wert noch etwas rumspielen, das ist einfach wieviele Millisekunden es gedrückt bleibt.

    Also, dass es ständig "m" schreibt, liegt sicher an den noch nicht gesetzten Referenzwerten.

    Der 2. Code schreibt nur in die Konsole, die Textdatei würde nämlich sehr schnell sehr lang werden. Wenn dir das aber lieber ist musst du nur in Zeile 44, 53 und 55 Serial.println durch Keyboard.println ersetzen.

    Der 2. Code wird nach dem einstecken sofort anfangen ständig eine Zahl zu schreiben. Wenn die Tastatur ruhig steht sollte das immer (nahezu) der gleiche Wert sein, den trägst du dann als Referenzwert für die x-Achse ein. (Im ersten Code Zeile 46, im 2. Code Zeile 22). Solange dieser Referenzwert noch nicht stimmt, wird es auch ständig "negative hit" oder "positive hit" schreiben.
    Danach kannst du testen, ob der Grenzwert zum triggern i.O. ist, dafür am Besten in Zeile 44 (2. Code) das Serial.println (bzw. Keyboard.println) auskommentieren. Dann sollte es nur bei einem erkannten Hit entsprechend "positive/negative hit" schreiben. Wenn dir das zu früh/spät kommt den Wert in Zeile 47 (1. Code) bzw. 23 (2. Code) ändern.

    Dann machst du das Gleiche nochmal für die y-Achse, also im 2. Code in Zeile 69/70 die x-Achse auskommentieren und y aktivieren.

    Ne, ich meine das "rütteln" von links/rechts. Du hattest geschrieben, das ist standardmäßig "lshift+strg" und "rshift+strg". Kannst du das auf jeweils eine einzelne Taste abändern?

    Keine Sorge, mich gibt's noch. [bs] War nur die letzten Tage ziemlich beschäftigt bzw. wollte in meiner freien Zeit dann nicht noch mehr vor dem Computer sitzen.


    Kannst du die Schubser von links/rechts auf einzelne Tasten legen? In dem Fall sollte es mit dem folgenden Code funktionieren.

    • Wenn du die Tasten vergeben hast, musst du in Zeile 18-23 die jeweiligen Keys für Haue von links/rechts/vorne... eintragen. Wenn eine Richtung nicht verwendet wird, sollte der Wert auf 0 gesetzt werden.
    • In Zeile 47-52 müssen Referenzwert und Grenzwert für die jeweilige Achse gesetzt werden. Um das besser zu bestimmen kannst du den zweiten Code weiter unten verwenden, damit der Sensor dir jede Malträtierung per serieller Schnittstelle berichtet. Genauer gesagt wird er ständig den aktuellen Sensorwert ausgeben und wenn getriggert wird kommt eine entsprechende Meldung.


    So, jetzt bin ich gespannt ob der Code funktioniert [ag]

    Hey. Sorry, dass ich mich so lange nicht gemeldet habe, war viel los diese Woche.

    Ich werde mich heute oder morgen mal an den Code setzen, damit anstupsen in jede Richtung separat erkannt wird. Welche Werte du dann eintragen musst, kann ich nicht sagen, da werd ich vielleicht noch Code schreiben, der beim bestimmen der Werte hilft.

    Könnte es vielleicht auch sein, dass einfach nur die Lötverbindung nicht gut ist? Dann würde der Arduino zufällige Werte auslesen und die dann häufig als Stoß interpretieren.

    wenn ich das zeug flashe, geht's - ich krieg zwar keine zahlen oder so, aber die spaces kommen, wie sie sollen und ohne nachträglichen "tick".

    Ja, stimmt. Für die Zahlen hätte man noch mehr ändern müssen.


    stecke ich den arduino aber ab und wieder an, dann tickt der space wieder.

    Hast du nach dem einstecken daran gedacht, ihn ein paar Sekunden ruhig liegen zu lassen? Bei jedem einstecken wird nämlich der Referenzwert ermittelt und dafür muss er (2s nach dem einstecken) ruhig liegen. Wenn die Position/Stellung vom Sensor nicht mehr verändert wird, könnte man den Referenzwert natürlich auch fest einprogrammieren.

    Ersetze mal in Zeile 81/82
    Keyboard.press(SP_KEY);
    Keyboard.release(SP_KEY);
    durch
    Keyboard.println(ref);

    Dann mach einen Texteditor auf und schließ den Arduino an. Wenn du ihn dann schüttelst, sollte er statt einem Leerzeichen den Referenzwert in den Editor schreiben. Wenn er dann alle 2s den selben Wert schreibt, ist was am Code falsch. Wenn aber nach den ersten 2s ein anderer Wert alle 2s geschrieben wird, dann verliert er beim schütteln die Stromversorgung.

    Aktuell machen auf jeden Fall nur positive Werte Sinn. -30 bis +30m/s^2 entsprechen einer Spannung zwischen 0 und 3,3V. Der Arduino kann 0-5V mit 10bit Genauigkeit lesen, also 1024 Werte. Spannungen zwischen 0 und 3,3V entsprechen also Werten zwischen 0 und 576. D.h. 1m/s^2 entspricht ungefähr Wert 11,25. Ein paar Beispielwerte:


    m/s^2Sensorwert
    -300
    -20112
    -10225
    0337
    2360
    4382
    6405
    8427
    10450
    20562
    30576


    So wie es momentan implementiert ist, muss die Differenz zur "Ruhebeschleunigung" größer sein, als der eingestellte Wert. Wenn der Sensor in Ruhe z.B. waagerecht steht, müsste er 0m/s^2 spüren. Dann bedeutet 100 also, dass es also einfach bei 100 auslöst, also grob bei +/-10m/s^2. Wenn er aber senkrecht steht spürt er in Ruhe die Erdbeschleunigung von knapp 10m/s^2, dann würde er bei 100 also bei 0 oder 20m/s^2 auslösen.

    Ich weiß nicht, was ich gestern gerechnet hatte, aber ich denke du könntest es mal im Bereich 40-50 versuchen.

    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.