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