VB2010E / Mindsqualls / LEGO Mindstorms NXT

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von newcat.

    VB2010E / Mindsqualls / LEGO Mindstorms NXT

    Hallo!
    Ich hoffe hier einen netten Menschen zu finden, der mir bei meinen "Experimenten" mit LEGO Mindstorms NXT / Visual Basic 2010 Express / Mindstorms helfen kann.
    Eine kleine Problembeschreibung vorweg: Vor ein paar Tagen haben mein kleiner Sohn und ich ein bekannte Auktionsplattform durchstöbert, um ein "neues" Spielzeug für Vater und
    Sohn zu finden. Es kam wie es kommen musste (Danke noch mal an die macher von Transformers/ Star Wars und wie sie alle heißen mögen), Sohnemann´s Blick wurde von einem Roboter aus Dänemarks Steinen gefesselt. Es war alles das dabei. Papa war auch noch der Höchstbietende. Dem neuen Spielzeug stand als nur noch die Zeit des Versandes im weg.
    Auch das war dank der heutigen Lieferzeiten der Paketdienste nicht das böse an der "Geschichte". Das Paket traf ein, Söhnchen und Vati lagen auf dem Wohnzimmerteppich und bauten. Selbst das programmieren war kein Problem.
    Allerdings habe ich eine Kleinigkeit Übersehen. (viele Eltern werden jetzt die Hände über dem Kopf zusammen schlagen und die Tragweite meiner Unbedachten Äußerung erkennen)
    Ich sagte zu meinem Sohnemann: "Den Roboter kannst du mit DEINEM COMPUTER steuern!" (-Ich höre wie ein raunen durch die Menge der Leser geht ...-)
    So viel zur Problembeschreibung, damit ihr die Tragweite und auch tränenreiche Tragweite Meines Problemes erkennt. :)

    Das eigentliche Problem: Ich habe mich vor Jahren mal eine zeitlang mit Visual Basic 6 beschäftigt. Ich habe mich auch schon mit Visual Basic 2010 Express rumgeschlagen. Eine Fernsteuerung des NXT´s von LEGO per PC war nicht das Problem. Vorwärts, Rückwärts, ein bisschen Piepen klappt mit Vati´s Programm super. Allerdings gibt es bei dem Bausatz Touch-Sensoren. Die wollen nicht so, wie Ich (und Sohnemann) es wollen: Während der kleine Robi vor eine Wand fährt, wird einer der Touch-Sensoren gedrückt und Robi soll nicht weiter vor die Wand fahren. Im Anhang finden ihr das, was ich unter VB2010E programmiert habe. Allerdings kommt nicht die Meldung:"Sensor 1 gedrückt!"
    Könnt ihr mir da wohl weiter helfen?

    ----->

    Option Strict On
    Imports NKH.MindSqualls
    Imports WinUsbWrapper

    Public Class Form1
    Dim NXTBrick1 As NxtBrick = New NxtBrick(NxtCommLinkType.USB, 4) 'NXT Objekt deklarieren, Verbindungsart = Bluetooth, ComPortNr
    Dim TS1 As NxtTouchSensor = New NxtTouchSensor() ' Touchsensor Objekt erstellen

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub


    Private Sub cmdConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdConnect.Click
    If cmdConnect.Text = "Verbinden" Then

    Try
    ' Verbinden
    NXTBrick1.Connect()

    If NXTBrick1.IsConnected = True Then
    With cmdConnect
    .Text = "mit NXT verbunden"
    .ForeColor = Color.Green
    End With

    ' Sensoren
    NXTBrick1.Sensor1 = TS1
    TS1.PollInterval = 50
    AddHandler TS1.OnPolled, AddressOf TS1OnPolled
    End If
    Catch
    MsgBox("Fehler: Keine Verbindung zum NXT möglich!")
    End Try
    Else
    ' Trennen
    NXTBrick1.Disconnect()

    With cmdConnect
    .Text = "Verbinden"
    .ForeColor = Color.Black
    End With

    End If
    End Sub

    Private Sub TS1OnPolled(ByVal polledItem As NxtPollable) 'polling für touch sensor

    Try

    If TS1.IsPressed = True Then
    'irgendwas machen wenn der sensor gedrückt ist
    MsgBox("Sensor 1 gedrückt!")
    Beep()
    Else
    'irgendwas machen wenn der sensor nicht gedrückt ist
    End If
    Catch ex As Exception
    MsgBox("Fehler:" + ex.Message + " !!!") 'fehler melden
    End Try

    End Sub
    End Class


    Lieben Gruß,
    Falko

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Falko77“ ()

    Hallo Falko,
    ohne mich jetzt intensiv mit Lego Mindstorms beschäftigt zu haben (ich hatte damals die Verison wo man per Infrarot die Programme übertragen habe) bin ich über diese Zeile gestolpert:

    Falko77 schrieb:

    NXTBrick1.Sensor1 = TS1


    Du hast TS1 als New NxtTouchSensor definiert und du sagst ihm das NXTBrick1.Sensor1 das TS1 Objekt sein soll rein theoretisch müsste es aber umgekehrt sein.

    Visual Basic-Quellcode

    1. TS1 = NXTBrick1.Sensor1


    Vielleicht klappt es so ansonsten musst du auf die Profis warten :)

    lg
    mfG.
    Stephan
    Hast du schonmal ausprobiert, ob das OnPolled-Event aufgerufen wird? Also bspw. einfach mal ne MsgBox direkt am Anfang vom OnPolled-Sub. Und ist der Touchsensor auch wirklich in Port 1 eingesteckt (ja ich weiß, klingt im ersten Moment dumm, aber ich spreche aus Erfahrung :D )

    Und funktioniert der Connect richtig? Vllt. auch einfach mal mit Breakpoints durchgehen, s. hier: Haltepunkte (Im Video ab so ca. 1:40)
    Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer
    Hallo! Danke für eure Tipps. Ich habe dann mal einen gang zurück geschaltet und nur einen Sensor angeschlossen.
    Die "Fehlerquelle" also minimiert. Somit habe ich auch ausgeschlossen, das ich in meinem OnPolled-Event NICHT
    ankomme. Habe eine MsgBox eingebaut und siehe da, bei Tastendruck auf Sensor 1 kommt diese auch. (Habe auch
    gleich alle Ports, Kabel und Sensoren dabei durch probiert!)
    Soweit funktioniert das also. Allerdings ein habe ich jetzt zwei "Auffälligkeiten" beobachten können:

    1. Damit der einzelne Sensor reagiert, muss ich mit meinem Programm einmal zum NXT verbinden / wieder
    disconnecten und wieder neu Verbinden, damit der Sensor in meinem Programm reagiert.

    2. Das Programm schmiert nach einer unbestimmten Zeit einfach ab

    Zu 2.: Wenn ich nur einen Sensor verwende, schmiert das Programm nicht ab.
    Könntest du die Projektmappe zippen (ohne die Unterordner bin und obj) und hier hochladen?

    Falko77 schrieb:

    2. Das Programm schmiert nach einer unbestimmten Zeit einfach ab

    Leider habe ich meinen NXT gerade nicht da, aber mal als Vermutung in den Raum geschmissen - es könnte sein, dass die API einfach "zu alt" ist und damit Probleme macht. Sollte nicht, ist aber möglich.

    Es gibt ja auch noch eine Menge andere Möglichkeiten, den NXT zu programmieren und mit dem NXT zu kommunizieren - https://de.wikipedia.org/wiki/Lego_Mindstorms_NXT#Ferngesteuerte_Programmierung.

    Du könntest z. B. mal AForge.NET ausprobieren. Ist allerdings möglicherweise etwas komplexer als Mindsqualls. Aber wiegesagt - muss nicht an der API liegen. Ich würde es gerne testen, aber habe meinen NXT erst nächste Woche wieder.
    Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer