- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 10

Thema: INPUT- Befehl "reagiert" nicht?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    78

    INPUT- Befehl "reagiert" nicht?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    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)

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    24.05.2007
    Ort
    Im hohen Norden
    Beiträge
    227
    Guten morgen,
    poste doch bitte einmal hier Deinen Code.

    Peter
    _________________________________________________
    [-X Quis custodiet ipsos custodes
    Ground-Effect-Stability-Robot www.peter-holzknecht.de

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    78
    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.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    78
    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.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    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 \/

    EDIT: Mist, Nachteile hatte ich geschrieben ... die VORTEILE überwiegen!!
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    78
    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.

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    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.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    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 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]
    Viele Grüße, William
    -> http://william.thielicke.org/

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    44
    Beiträge
    1.273
    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!

    Viele Grüße, William
    -> http://william.thielicke.org/

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress