Erstes Zeichen aus UDP-Befehl als "Tastaturbefehl" an Rechner senden

Hallo,

ich habe einen Sketch erstellt, der immer dann den Druck einer Leertaste an den Rechner übergibt, wenn ein beliebiger UDP-Befehl reinkommt.

Wie müsste ich diesen Sketch umbauen, so dass immer das erste Zeichen eines eingehenden UDP-Befehls per “Tastaturbefehl” an den Rechner gesendet werden würde?

Gruß Chris

#include <SPI.h>         // needed for Arduino versions later than 0018
#include <Ethernet2.h>
#include <EthernetUdp2.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008


// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 2, 31);

int packetSize;

unsigned int localPort = 8888;      // local port to listen on

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

const byte led = 13;

void setup()
{
  Ethernet.begin(mac, ip);
  Udp.begin(localPort);
  Keyboard.begin();
  pinMode(led, OUTPUT);
}

void loop()
{
  // if there's data available, read a packet
  packetSize = Udp.parsePacket();
  if (packetSize)
  {
    Keyboard.press(' ');            // Das erste Byte auslesen und nur dieses als Tastaturbefehl ausgeben
    delay(100);                     // Kurz warten
    Keyboard.releaseAll();          // Taste loslassen
  }
  delay(10);
  ledOut();
}

void ledOut()
{
  static unsigned long lastTime = 0;
  if (packetSize) lastTime = millis();  // Sobald ein UDP-Befehl eingegangen ist..
  if(millis() - lastTime < 1000) digitalWrite(led, HIGH);
  else digitalWrite(led, LOW);
}

Wie müsste ich diesen Sketch umbauen

Du müsstest dir EthernetUdp2.h ansehen, ob du da noch mehr ausser per
Udp.parsePacket die Paketgröße 0 / > 0 ermitteln kannst.

Ich kann EthernetUdp2.h bei mir auf dem Rechner leider nicht finden, hab aber dafür das hier im Netz gefunden.

Wie ich über UDP.read(packetBuffer, MaxSize) lediglich das erste Zeichen extrahieren kann, verstehe ich nicht und würden die restlichen Zeichen irgendwann den Eingangsbuffer "verstopfen"?

Gruß Chris

Nach deiner verlinkten Dokumentation sollte ein UDP.read() ein Zeichen nach dem anderen zurückgeben, zuerst also das erste.

Ich kann EthernetUdp2.h bei mir auf dem Rechner leider nicht finden

#include <SPI.h>         // needed for Arduino versions later than 0018

#include <Ethernet2.h>
#include <EthernetUdp2.h>        // UDP library from: bjoern@cs.stanford.edu 12/30/2008

Dein Compiler kann das, zum Glück :wink:
Es gibt normalerweise mindestens 2 Libraries Ordner:
einen da wo die arduino.exe ist,
und einen in “Dokumente”, bei deinen sketchen. Üblicherweise C:\Users<chris_oder_so>\Documents\Arduino\libraries\ …

Ich hab keine arduino.exe, da Mac. In meinem Sketchordner unter libraries liegt jedenfalls ebenfalls kein Ordner mit einer EthernetUdp2.h darin.

Gruß Chris

Mac, da haben wir es mal wieder :slight_smile: :slight_smile:

Lass doch mal den Finder auf der Platte suchen.

Oder schau dir mal die Beispiele der Lib an, vielleicht wirst du da schlauer.

Keyboard.press(packetBuffer[0]); sollte dir das erste Zeichen schicken.

Hi

Da du von Ethernet2 schreibst, nehme ich mal an, dass du einen Arduino von arduino.org verwendest und damit die IDE 1.7.x

Geh mal in den Finder und dort auf Programme und dann einen "Rechtsklick" auf das Arduino Programmsymbol. Dann kannst du im Dropdown "Paketinhalt zeigen" auswählen und findest dann unter /Contents/Java/libraries/Ethernet2/src die Ethernet2.h

Grüsse
Peter