PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : INPUT- Befehl "reagiert" nicht?



Diron
11.01.2009, 21:19
Hallo,

schlage mich nun seit ein paar Tagen mit dem RN-Beispiel "Joystick zur Steuerung eines Roboters" rum. Natürlich funktioniert es malwieder nicht auf Anhieb *grummel*

Meine Analyse hat nun ergeben, dass das Problem beim Input-Befehl des Bascom-Codes liegen muss. Der Controller hält dort an und wartet auf eine Eingabe... komischerweise vergebens!?!

Die Eingabe über "Inkey" funktionert, genauso wie die Kommunikation über die Com-Schnittstelle, jedoch wird keine Eingabe akzeptiert, die somit das Programm weiterlaufen lässt. Sowohl vom Joystick, wie auch von der Tastatur.

Habe ich nur ein Verständnisproblem oder woran könnte es noch liegen. Muss das Code-Beispiel aus dem RN-Wissen nochmals angepasst werden?

Habe auch das Beispiel aus der Bascom-Hilfe versucht... dort das gleiche Problem. Hier kam mir noch eine Frage:
Wenn der Input-Befehl mit einem Text (Input "Hallo" , X) vesehen wird, geh ich dann recht in der Annahme, das "Hallo" müsste beim warten auf eine Eingabe auch angezeigt werden? Das wird es nämlich nicht !?!

Danke schonmal für Hilfe...

Bascom-Version: 1.11.8.7 (Demo)
Controller: Atmega2560 über USB (COM#4)

holzi
12.01.2009, 04:37
Guten morgen,
poste doch bitte einmal hier Deinen Code.

Peter

Diron
12.01.2009, 13:17
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:


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:


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.

Diron
12.01.2009, 13:24
Hallo Peter,

so musste mich erstmal auskotzen...
Nachdem ich soweit gekommen bin suche ich noch nach der Lösung für das 2Stellen-Problem. Wie oben beschrieben sendet SharpDevelop nur 2 Stellen der Y-Achse... also geht bei negativer Achse nur "-9" darüber wirds "-1" da die zweite Zahlenstelle fehlt. Hast du ne Ahnung woran das liegen könnte?
Der Fehler liegt dabei auf jeden Fall im Sharpdevelop, da der Test übers Terminalprogramm funktioniert.

Vitis
12.01.2009, 14:38
in Deinem Bascom Code ist dann noch n Problemchen verbaut,
die Variablen werden nie zurückgesetzt, sprich wenn die Kiste
einmal läuft, dann für immer ...

If Isitx = 1 Then
Isitx = 0

else
Isity = 0

behebt das Problem


unterm Strich würd ich sagen die Vorteile des Wiki überwiegen die VORteile
und n Echo für den Serialport zum Debuggen seh ich bei meinen Projekten
in der Anfangsphase eh vor ... zur Sicherheit \:D/

EDIT: Mist, Nachteile hatte ich geschrieben ... die VORTEILE überwiegen!!

Diron
12.01.2009, 15:32
Hallo Vitis,

du wirst lachen, aber ich hab mich schon zutodegesucht was das angeht, denn:
Die Variablen werden zurückgesetzt... bei jedem Durchgang! Frag mich nicht wie, aber hat mich auch schon gewundert.

Vitis
12.01.2009, 21:53
nun, warum die variablen zurückgesetzt werden
kann ich dir vom Codeschnipsel her nicht sagen,
da müsst ich den ganzen Code sehen ...
kann auch sein, dass n Rest irgendwo ausgelöst wird.

Willa
13.01.2009, 07:47
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.
LOL, ich kann mein Beispiel ja auch einfach wieder löschen, dann brauchst du nicht mehr Stunden um das umzusetzen sondern mehrere Wochen (so wie ich als ich mir das zusammengefrickelt habe und dann, nach mit viel Arbeit, einen Artikel darüber geschrieben habe damit Leute wie du weniger Arbeit haben). Ich bin nicht dein Servicedienstleister, ok? Natürlich ist mein Beitrag kein Rundumsorglospaket das man nur mal eben per Copy und Paste auf eine Platine wirft.
In meinem Roboter (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=35398) funktioniert die Ansteuerung, bei vielen anderen Usern funktionierts auch ohne Probleme. Ich sehe es jetzt als DEINE Pflicht an einen Beitrag zum Wiki zu machen und den Artikel zu verbessern falls da wirklich irgendwo ein Fehler sein sollte.


so musste mich erstmal auskotzen... [/url]

Willa
28.02.2009, 21:22
Anscheinend hält es Diron nicht für nötig etwas zum Wiki beizutragen.
Ich rege mich zwar schon wieder auf wenn ich diesen Thread lese, aber trotzdem habe ich das Wiki Beispiel nochmal erweitert. Erweitert nicht verbessert.... Denn funktionsfähig war es, das habe ich nochmal kontrolliert.

du wirst lachen, aber ich hab mich schon zutodegesucht was das angeht, denn:
Die Variablen werden zurückgesetzt... bei jedem Durchgang! Frag mich nicht wie, aber hat mich auch schon gewundert.
Da würde es helfen mal in der Bascomhilfe nachzugucken was INSTR() denn überhaupt macht!!


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...
Es wurde auch NIEMALS IRGENDWO behauptet dass die Beispiel .exe etwas anderes macht?! Das zusätzliche senden von "X" und "Y" ist eine zusätzliche Idee gewesen.
Bevor jemand wieder rumnörgelt wäre es nett wenn er einfach den Artikel von oben nach unten durchliest und nicht unten anfängt und dann feststellt dass oben was ganz anderes steht.
Über konstruktive Kritik & Verbesserungsvorschläge freut sich der von mir angefangene Artikel sicherlich sehr!

:-&

Vitis
01.03.2009, 11:30
Reg Dich nicht auf, es gibt immer welche die
Wiki mit Drag & Drop verwechseln ...
Mir hat das Wiki schon oft geholfen, Danke auch an alle
Artikelverfasser!!

Das ist für mich auch das Manko an den Wiki Artikeln.
Wenn einer n Problem hier im Forum erfragt muss er sich
schon mal Gedanken um die Fragestellung machen, was nicht
selten schon hilft das Problem zu lösen ... dann noch n
Denkanstoß in die richtige Richtung und schon kann jener sein
Problem selbst lösen und hat was dabei gelernt.

Take it easy ;)