Ist es möglich, eine Taste von Arduino aus zu drücken, und mein Computer erhält ein Schlüsselereignis?

7

Meine Idee scheint einfach:

Ich verbinde eine Schaltfläche mit Arduino, schreibe dann Code und lade ihn auf Arduino hoch. Dann öffne ich den Notizblock (oder einen anderen Editor) auf meinem Computer. Wenn ich die Taste drücke, wird im Notizblock ein Zeichen "A" angezeigt.

Ich habe es mit meinem Arduino uno versucht und benutze die Serial.write/printFunktion, um eine Aan die serielle Schnittstelle zu senden 9600, aber es scheint, dass das Zeichen Anur in der GUI des seriellen Monitors angezeigt wird.

Meine Frage ist:

  1. Ist "Arduino uno" in Ordnung, um dies zu implementieren?
  2. Wenn nicht, welches andere Board soll ich verwenden?
  3. Ist Serial.write/printdie richtige Funktion?
  4. Oder soll ich die Keyboard.???Funktion nutzen?
  5. Muss ich eine Anwendung schreiben, die auf dem Computer ausgeführt wird, die serielle Schnittstelle überwacht und ein echtes Schlüsselereignis ausgibt? (Das ist traurig)
Freilauf
quelle

Antworten:

9

Das Uno ist dafür nicht das beste Board. Möglicherweise können Sie mit dem Virtual USB- Projekt etwas erreichen, aber es gibt einige Boards, die dafür besser geeignet sind.

Das sind der Arduino Leonardo, Micro und Due. In diesen können Sie die Tastaturbibliothek genauso verwenden, wie Sie jetzt die serielle Bibliothek verwenden. Diese Seite enthält ein Beispiel, das Ihrem Projekt sehr ähnlich ist:

void setup() {
  // make pin 2 an input and turn on the 
  // pullup resistor so it goes high unless
  // connected to ground:
  pinMode(2, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
  //if the button is pressed
  if(digitalRead(2)==LOW){
    //Send the message
    Keyboard.print("Hello!");
  }
}
Sachleen
quelle
4

Es gibt ein Mikro, das speziell für die Tastaturemulation entwickelt wurde. Ich habe (noch) nicht damit experimentiert, aber es ist sehr beliebt in der Welt der Flugsimulatoren, in der diese Mikros mit Tasten und Schaltern sowie Drehgebern ausgestattet sind, um ein Cockpit zu simulieren . Diese Eingaben werden in Tastatureingaben umgewandelt (soweit ich sehen kann).

Hier finden Sie einige allgemeine Projekte: https://www.pjrc.com/teensy/projects.html

Einige weitere tastaturspezifische Dinge: https://www.pjrc.com/teensy/usb_keyboard.html

Weitere Informationen zum Teenager in der Arduino-Umgebung: https://www.pjrc.com/teensy/teensyduino.html

Genauer gesagt, was Sie suchen, könnte dies sehr nützlich sein: https://www.pjrc.com/teensy/td_keyboard.html

Ich lenke dich nicht von Arduino weg, es ist nur etwas anderes, das du untersuchen musst

Madivad
quelle
1
Gehen Sie für Teensy in der Tat. Sie sind klein, billig und können wie "offizielle" Arduinos verwendet werden. Sie können den Editor von Arduino weiterhin verwenden, sodass sich außer dem Board nichts ändert. Sie erhalten nicht nur eine Keyboard-Emulation, sondern können auch so tun, als wären Sie eine Maus, ein MIDI-Interface und viele andere Dinge.
Tom
1

Ihr Beispiel beschreibt das Sammeln von Text - entspricht dies Ihrem Ziel oder müssen Sie irgendeine Art von Schlüsselereignis generieren? Wenn Sie keine Systemereignisse generieren müssen, sollte jeder Terminalemulator (nicht nur die Arduino IDE) in der Lage sein, denselben Port abzuhören und alles, was er empfängt, in einer Datei zu protokollieren.

JRobert
quelle
Ich brauche es, um eine Art Schlüsselereignis zu sein. Mein letztes Ziel ist es, eine benutzerdefinierte Tastatur von Arduino zu erstellen
Freewind
0

Überprüfen Sie dieses Video, Arduino UNO als USB-Tastatur (HID-Gerät) [Anything Arduino] (Folge 6) , da ich denke, dass dies das ist, wonach Sie suchen.

Über das Youtube-Video erhalten Sie Links zur Bibliotheksseite und zu den Schaltplänen.

Sie müssen eine kleine Schnittstelle erstellen, um Ihr Arduino mit einem PC zu verbinden. Ich habe es für Uno und Micro bekommen, aber andere Arduinos mit der neuesten Firmware wären in Ordnung.

Tas
quelle
1
Wenn Sie auf eine externe Quelle verlinken, ist es hilfreich, wenn Sie zusammenfassen, worum es bei dem Link (in diesem Fall das Video) geht oder wie er zur Lösung des Problems beiträgt. Dies ist besonders nützlich, wenn der Link "verrottet". Wir versuchen hier eine dauerhafte Ressource aufzubauen, versuchen Sie, in Ihren Antworten langfristig zu denken.
dlu
Wenn Sie Ihre Antwort bearbeiten könnten, um die Links in Ihrer Antwort bereitzustellen , wäre dies eine gute Idee, sowie eine Kopie der Schaltpläne unter Angabe der Quelle, sofern das Urheberrecht dies zulässt, falls das Video gelöscht wird.
Greenonline
-1

Ich denke, Sie müssen auch installieren processing.

Siehe diesen Link

Damit können Sie die Computerseite der Anwendung programmieren.

Mausy5043
quelle
Meinen Sie damit, dass ich einige Programmiersprachen verwenden muss, um ein Programm zu schreiben, das auf der Computerseite ausgeführt wird? Muss ich die Verarbeitungssprache verwenden? Ich fand es interessant, aber ich bin mir sicher, warum es bei Arduino etwas Besonderes ist?
Freewind
3
Die Verarbeitung ist zwar eine wertvolle Ergänzung Ihres Arsenals, wenn Sie Arduino verwenden, für Ihre Zwecke jedoch nicht erforderlich. Stattdessen werden die Dinge zu komplex, wenn nicht unmöglich.
Tom
-2

Ich habe das gleiche Problem Ich habe eine 12-Tasten-Tastatur mit Arduino gebaut und es funktioniert sehr gut mit USB. Jetzt muss ich ein Bluetooth-Modul anstelle von USB verwenden, aber ich kann keinen Code finden, der es mir ermöglicht, Presse von Arduino an meinen PC zu senden .

Hier ist mein Code, den ich für mein Bluetooth-Modul CH-6 ändern muss. Vielen Dank für Ihre Hilfe.

#include <Keyboard.h>
#include <Keypad.h>




const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the kpd
byte colPins[COLS] = {8, 7, 6}; //connect to the column pinouts of the kpd

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

unsigned long loopCount;
unsigned long startTime;

void setup() {
    Serial.begin(9600);
    loopCount = 0;
    startTime = millis();

}


void loop() {

    loopCount++;
    if ( (millis()-startTime)>5000 ) {
        startTime = millis();
        loopCount = 0;
    }

    // Fills kpd.key[ ] array with up-to 10 active keys.
    // Returns true if there are ANY active keys.
    if (kpd.getKeys())
    {
        for (int i=0; i<LIST_MAX; i++)   // Scan the whole key list.
        {
            if ( kpd.key[i].stateChanged )   // Only find keys that have changed state.
            {
                switch (kpd.key[i].kstate) {  // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
                    case PRESSED:
                    Keyboard.write(kpd.key[i].kchar);  



                    //Serial.print(kpd.key[i].kchar); //active keys number
                break;
                }
            }
        }
    }
}  // End loop
George
quelle
2
@MichelKeijzers Diese Antwort sollte zum Löschen gewählt, nicht bearbeitet und aus der LQP-Warteschlange entfernt werden.
gre_gor
@gre_gor Du hast absolut Recht, ich habe es bearbeitet und anschließend (wieder) gelöscht.
Michel Keijzers