Tja, was soll ich berichten? 8 stunden und ne lange Nacht haben mich dann zu dem Ergebnis gebracht, doch kein "Laie" zu sein was programmieren angeht -.-
Da ich ehrlich gesagt einwenig sauer bin, wird sich das hier sicher niederschlagen.
Zunächst war ich auf der Suche nach dem Fehler. Problem war, dass ich keine Ahnung hatte, was denn das SharpDevelop-Programm nach Anleitung aus dem RN-Wissen Artikel überhaupt an den MC sendet. Und die Kommunikation eines reservierten Com-Ports zu überwachen ist wohl kein einfaches Unterfangen.
Also habe ich mit allen möglichen Tricks versucht, die Werte in Variablen zu speichern, die dann bei der nächsten Eingabe im Terminalfenster (neuer Durchlauf) ausgegeben werden... so kam ich dann dem Problem letzendlich entscheidend näher. Und zwar folgendes:
Das Beispiel aus dem RN-Wissen ist NICHT funktionsfähig. Mag es daran liegen, das netterweise unten ein "Update" eingefügt wurde, welches ein Problem behebt das in der eigentlich beschriebenen Lösung nämlich überhaupt nicht vorgesehen ist = Die Übersendung der X und Y Achse.
Das Sharp-Develop-Programmm (der fertige Joysticktest funkioniert nicht = stürzt sofort ab) sendet NUR die jeweiligen Werte, ohne Bezeichnung ob es X oder Y Achse ist. Mh, solche "Updates" erinnern mich eigentlich mehr an MS...
So fand ich also nach langer Frickelei heraus, wie man die jeweilige Bezeichnungen mitsendet, und schon ergab sich die eigentlich erdachte Lösung... fast.
Hier mal der funktionierende Teil-Code meiner SharpDevelop-Version:
Code:
GetData() 'Joystick Position erfassen
label1.Text="Joystick: X = "+state.X.ToString()+" Y = "+state.Y.ToString() ' Anzeigen wo der Joystick grad ist
if serialport1.IsOpen then 'folgenden Code nur ausführen wenn auch eine Verbindung besteht
serialPort1.Write(chr(88))
SerialPort1.Write(state.X) 'per RS232 die aktuelle Joystick X Position senden
serialPort1.Write(chr(13)) ' "Enter drücken"
SerialPort1.Write(state.Y) 'per RS232 die aktuelle Joystick Y Position senden
serialPort1.Write(chr(13)) ' "Enter drücken"
end if
Hinzugekommen ist "serialPort1.Write(chr(88))", was heißt, es wird ein "X" gesendet. Die Profis werden sich direkt die Frage stellen, wo denn dann das "Y" bleibt.. ja hier gibts die Antwort.
Nachdem ich beide Bezeichnungen eingefügt hatte, funktionierte die X-Achse perfekt, die Y-Achse nur im positiven einstelligen Bereich.
Was nicht funktioniert war die negative Y-Achse. Warum ließ sich dann auch rausfinden. Die Auswertung zeigte, dass bei negativer Y-Achse nur der Wert "Y-" gesendet wurde.
Letzendlich habe ich dieses Problem, verzeiht mir meine geringe Ahnung, nicht beheben können und mich stattdessen für die Lösung entschieden, die oben dargestellt ist. Nämlich das "Y" nicht mitzusenden, damit die zwei Stellen für den Y-Wert genutzt werden können. Im Prinzip bleibt dabei die Gewissheit beide Achsen nicht zu vertauschen, da wenn kein "X" im Sting ist, muss es eben "Y" sein.
Das Codebeispiel im Bascom sieht dann so aus:
Code:
Input "" , Geschwxy 'Irgendeinen Datenstring vom PC empfangen
Isitx = Instr(geschwxy , "X") 'Wenn ein "X" im String ist, dann wird die Variable "IsItX" auf 1 gesetzt
Isity = Instr(geschwxy , "Y") 'Wenn ein "Y" im String ist, dann wird die Variable "IsItY" auf 1 gesetzt
If Isitx = 1 Then 'Wenn ein X im String war, dann...
Geschwxstr = Mid(geschwxy , 2) 'Schneide die erste Stelle (das "X") des empfangenen Strings ab.
Geschwx = Val(geschwxstr) 'Konvertiere den Rest des Strings in einen Integer
Else
Geschwystr = Geschwxy
Geschwy = Val(geschwystr)
End If
So, nachdem ich mir die Nacht um die Ohren gehaun habe um ein Laienhaftes Beispiel "fast" Laiensicher zu machen, stellt sich mir die Frage, ob sowas eigentlich keinem auffällt, oder ob hier nur "Profis" zu Gast sind, die solche Beispiele mit einem Lächeln überhauptnicht beachten.
Andererseits ist es bereits das 2. Beispiel aus dem RN-Wissen was mich Stunden und Tage gekostet hat, fehlende Informationen und Fehler im Code zu finden und anzupassen. Ehrlich gesagt eine wirklich deprimierende Erfahrung was das Vertrauen angeht, dass von den Neulingen in die hier angebotenen Code-Beispiele gesetzt wird.
Lesezeichen