Arduino als Text zu Keyboard input wandler

Hallo werte Community.

Ich habe ein Arduino UNO mit dem Atmega328P und wollte fragen ob folgendes möglich ist:
( Habe noch keine lösung gefunden)

Und zwar möchte ich den Arduino an 2 PC's anschliesen. Wenn ich jetzt von PC A einen Test an den Arduino schicke , soll dieser es als Keyboard-Tastendruck an PC b schicken (also das es für PC B aussieht das die Tasten am Keyboard gedrückt wurden).

Ist das mit dem Chip überhaupt möglich weil er nur einen UART port besitzt? oder benötige ich da einen Chip mit 2 Uart ports?

LG
Hitmare

Mit einem Leonardo sollte das möglich sein. Über die Keyboard-Bibliothek wird der am PC B als Tastatur erkannt, über die zusätzliche serielle Schnittstelle befütterst du ihn von PC A.
Pin 0 und 1 werden als Serial1 geführt, die USB-Verbindung läuft ja über das einfache Serial. Ebenso verhält es sich auch beim Arduino Micro.
http://www.arduino.cc/en/Main/arduinoBoardLeonardo

Ja, mit einem Arduino Leonardo oder Genuino MICRO und einem USB-Serial Wandler (FT232RL, CP2102, PL2032HX o CH340 ecc) ist das ohne großen Aufwand möglich.
Grüße Uwe

Hallo

Ich habe nun einen Arduino Leonardo und einen CP2021 USB to UART SPI Konverter.

Mein derzeitiger code sieht wiefolgt aus

#include <Keyboard.h>

void setup() {
  // put your setup code here, to run once:
pinMode(4, INPUT_PULLUP);
  Keyboard.begin();
  Serial1.begin(9600);
  
}

void loop() {
  // put your main code here, to run repeatedly: 
    Keyboard.print(Serial1.readString());
 
if(digitalRead(4)==LOW){
  Keyboard.print("Test4");
    //Send the message
}

}

Leider bekomme ich aber keinen text am 2ten pc an wenn ich via Arduino Serial monitor einen text eingebe

Desweiteren ist mir aufgefallen das ich einen permanenten text “getippt” bekomme wenn ich Serial1.read() verwende. Der Text ist ein sich wiederholendes " 1ß "

Wo liegt hier mein Fehler?

LG
Hitmare

Es fehlt in deinem Programm vermutlich das if (Serial.available() > 0) {…}, damit er nur tippt, wenn er auch ein Zeichen einließt.

Also

#include <Keyboard.h>

void setup() {
  // put your setup code here, to run once:
pinMode(4, INPUT_PULLUP);
  Keyboard.begin();
  Serial1.begin(9600);
  
}

void loop() {
  // put your main code here, to run repeatedly: 
    if (Serial.available() > 0) { 
              Keyboard.print(Serial1.readString());}

if(digitalRead(4)==LOW){
  Keyboard.print("Test4");
    //Send the message
}

}

Ich würde anstelle von serial1.readString() serial1.read() nehmen.

HEy. Danke für die antworten nach etlichen versuchen hab ichs halbwegs zum laufen bekommen.

Ich habe nun folgendes problem:
Nicht immer werden alle zeichen übertragen, alle 3-4 eingaben werden übergeben
Wenn ich längere strings eingeben zb. 12345-12345-12345 bekomme ich `t5ß12345ß12 herraus

Woran liegt das ?

#include <Keyboard.h>
void setup() {
  // open the serial port:
  Serial1.begin(9600);
  // initialize control over the keyboard:
  Keyboard.begin();
   Serial1.setTimeout(1);
}

void loop() {
  // check for incoming serial data:
  if (Serial1.available() > 0) {
    // read incoming serial data:
    char inChar = Serial1.read();
    // Type the next ASCII value from what you received:
    Keyboard.write(inChar);
  }
}