Mouse.move macht Probleme oder habe ich einen Denkfehler ?

Hallo,
ich habe ein Programm geschrieben um einen gewissen Ablauf mit der Tastatur und Maus mit dem Leonardo zu machen.

void setup()
{
  Keyboard.begin();
  Mouse.begin();
  delay(10000);
}

void loop()
{
  Keyboard.press('W');
  delay(1000);
  Keyboard.releaseAll();
  Mouse.click(MOUSE_LEFT);
  delay(50);
  Mouse.move(0,-300);
  Mouse.click(MOUSE_LEFT);
  delay(50);
  Mouse.move(0,+300);
  
  delay(200);
  
}

Meine Taste W wird noch für 1 Sekunde gedrückt, aber dann kommt der Fehler:
Die Maus soll 300 nach unten gehen, links klicken und dann 300 wieder hoch gehen.
Doch stattdessen geht sie 300 runter (richtig) aber dann auch nochmal 300 runter statt hoch .
Die Referenz Seite zu Mouse.move() gibt nichts brauchbares
Was ist mein Problem ? Wie muss ich es umcoden ?

hi,

vielleicht stört ihn das + im zweiten move...

gruß stefan

Mir fällt auch nichts anderes als Stefan ein.
Zu diesem Beispiel ist der Unteschied nur das Pluszeichen.
Grüße Uwe

Könntest du mal probieren, jeweils dreimal 100 Pixel in die entsprechende Richtung zu gehen?

Vielleicht fehlt einfach nur der wheel- Parameter?
Mouse.move(0,300,0);

Ob da ein Plus oder minus ist , ist dem Compiler wie es aussieht egal, ohne Vorzeichen geht er runter,
bei anderen Zahlen z.B 600 auch 600 Pixel runter bei 20 halt 20, der Wheelparameter ändert nichts.
Ich bekomm ihn nicht hoch.

Könntest du mal probieren, jeweils dreimal 100 Pixel in die entsprechende Richtung zu gehen?

Wie soll ich das machen ?

Statt deines obigen Codes einfach den hier nehmen:

void setup() {
  Keyboard.begin();
  Mouse.begin();
  delay(10000);
}

void loop() {
  Keyboard.press('W');
  delay(1000);
  Keyboard.releaseAll();
  Mouse.click(MOUSE_LEFT);
  delay(50);
  Mouse.move(0,-100);
  Mouse.move(0,-100);
  Mouse.move(0,-100);
  Mouse.click(MOUSE_LEFT);
  delay(50);
  Mouse.move(0,100);
  Mouse.move(0,100);  
  Mouse.move(0,100);

  delay(200);
  
}

Hi,

ich glaube mich schwach zu erinnern irgendwo gelesen zu haben, daß in Y-Richtung positive Werte "nach unten" und negative Werte "nach oben" bedeuten ?!?

Grüßle Bernd

  Mouse.move(0,-300);

Die Argumente von Mouse.move() sind vom Typ signed char, können also nur Werte von -128 bis 127 aufnehmen. Deshalb schlägt sth77 den Dreifach-Call vor.

Danke dann hat sich ja jetzt alles gelöst
@ Bernd es ist genau umgekehrt :slight_smile:
@ Vielen Dank das wäre dann meine nächste Frage gewesen :smiley: Alles darüber wird zu -128 bzw 127

Danke für die guten Antworten

pylon:

  Mouse.move(0,-300);

Die Argumente von Mouse.move() sind vom Typ signed char, können also nur Werte von -128 bis 127 aufnehmen. Deshalb schlägt sth77 den Dreifach-Call vor.

Hallo pylon

Die Idee ist mir auch gekommen ich habe aber auf der Seite http://arduino.cc/en/Reference/MouseMove
gelesen:

Syntax
Mouse.move(xVal, yPos, wheel);

Parameters
xVal: amount to move along the x-axis - int
yVal: amount to move along the y-axis - int
wheel: amount to move scroll wheel - int

und darum die Paramete als int interpretiert.
Wenn man dann in
arduino1.0.4/hardware/arduino/core/arduino/HID.cpp nachschaut dann findet man:

void Mouse_::move(signed char x, signed char y, signed char wheel)

Werde Fragen den Fehler in der Seite vom http://arduino.cc/en/Reference/MouseMove auszubessern
Grüße Uwe

Ich hatte das irgendwo noch im Hinterkopf, dass der Wertebereich eingeschränkt war, daher mein Lösungsansatz. Beim Nachschauen in der Referenz wurde ich dann doch stutzig, dass da int stand. Naja, nun sind wir alle etwas schlauer geworden. :wink:

Alles darüber wird zu -128 bzw 127

Nein, "schlimmer" :

byte x = 300; ist das gleiche wie byte x = 172;

char x = -300; ist das gleiche wie char x = -44;

--> Überlauf wird abgeschnitten. Bei Bytes : 256 == 0 , oder --mit Vorzeichen-- 129 == -127