Hallo Zusammen,
ich habe ein kleines Problem und hoffe sehr das ihr mir weiterhelfen könnt. Konkret geht es darum, dass ich Joystickeingaben (Cyborg Evo) per Visual Basic Express 2010 einlese und diese dann über den Serial Port an einen Arduino Mega sende, um dort Servos zu bewegen. Das funktioniert solange wunderbar, solange ich nur 2 Werte übergebe. Also X und Y Achse oder Y und Z Achse und so weiter. Sobald ich versuche 3 Servos anzusteuern wird meine Z Achse ignoriert.
Hier mal die meiner Meinung nach wichtigsten Teile des Visual Basic Codes:
Code:Public Class Form1 Private myJoystick As joystick Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try myJoystick = New joystick(Me.Handle, -1000, 0, 0, 100) 'erstellt eine neue Instanz der Joystick-Klasse Catch ex As Exception MsgBox(ex.Message) End Try SerialPort1.Open() End Sub Private Sub pollingTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pollingTimer.Tick Try myJoystick.poll() SerialPort1.Write(myJoystick.StatusInformation.Position.Y.ToString - 1500 & myJoystick.StatusInformation.Rotation - 2501 & myJoystick.StatusInformation.Position.X.ToString) 'hier liegt mein Problem!! Catch ex As Exception Label7.Text = "" + ex.Message.ToString End Try End Sub
In der Zeile "SerialPort1.Write..." liegt auch das Problem Position.X und Position.Y werden übergeben, "Rotation" aber nicht.
Wobei auch alle Paarkombinationen funktionieren (siehe oben) also es nicht an der Übergabe von "Rotation" an sich liegen kann sondern eben wahrscheinlich am Einlesen am Arduino.
polling Timer fragt alle 100ms
und hier der Arduino Code:
Code:#include <Servo.h> Servo Servo1; Servo Servo2; Servo Servo3; void setup (){ Servo1.attach(9); Servo2.attach(10); Servo3.attach(11); Serial.begin(9600); } void loop() { int i; char X_buffer[4]; //Max. Zahl "9999" int incomingpos = 0; while(incomingpos == 0) { if (Serial.available()) { Serial.flush(); delay(5); i=0; while(i<5) { X_buffer[i] = Serial.read(); i++; } Serial.flush(); incomingpos = atoi(X_buffer); Serial.println(incomingpos); //Servo Lenkung if ((incomingpos >= -1000) && (incomingpos <= 0)) { incomingpos = map(incomingpos, -1000, 0, 0, 179); // x Achse Servo1.write(incomingpos); delay(10); } // Regler Beschleunigung else if ((incomingpos <= -1501) && (incomingpos >= -2500)) { incomingpos = map(incomingpos, -1501, -2501, 0, 179); // y Achse Servo2.write(incomingpos); delay(10); } // Servo Lenkung parralell (z-Achese) else if ((incomingpos <= 2501) && (incomingpos >=3500)) { incomingpos = map(incomingpos, -2501, -3501, 0, 179); // z Achse Servo3.write(incomingpos); delay(10); } } incomingpos = 0; } }
Wäre super wenn sich jemand die Zeit nimmt um den Code zu checken. Komme seit einer Woche nicht voran.
Über jeden Hinweis bin ich sehr dankbar und falls noch Infos fehlen gerne laut schreien.
Grüße
dulone







Zitieren

Lesezeichen