C#-Programm soll mit dem NXT kommunizieren, aber...

Mindstorms und Delphi, Basic...
Läuft etwas nicht? für den NXT

Moderator: Moderatoren

HiTek
Schreibt viel
Schreibt viel
Beiträge: 75
Registriert: 5. Mai 2010 10:46

C#-Programm soll mit dem NXT kommunizieren, aber...

Beitragvon HiTek » 14. Jun 2013 17:14

Hallo Mindstormsfreunde,

bei meinem neuen Projekt soll ein C#-Programm, das auf meinem Computer läuft über USB mit dem NXT kommunizieren. Angedacht ist eine Kommunikation über Strings, die in die Mailboxen des NXT geschrieben und von dort auch wieder ausgelesen werden können. Leider habe ich jetzt zunächst einmal das Problem, das ich die Message nicht vom Computer auf den NXT-Bildschirm kriege. Die Programme auf dem Computer und dem NXT laufen und die USB-Schnittstelle wird angesteuert, aber nichts passiert. Mein Bildschirm bleibt leer. Bestimmt mache ich irgend etwas falsch, aber was???

Der C#-Code, der auf meinem Computer läuft:

Code: Alles auswählen

using NKH.MindSqualls;
using WinUsbWrapper;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace MindSquallsTest
{
    public partial class MindSquallsTest : Form
    {
       
        NxtBrick nxtBrick;
               
        public MindSquallsTest()
        {
            InitializeComponent();
        }

        // Folgende Methode stellt die Verbindung zwischen PC und NXT-Baustein her
        private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                // Create a NXT brick,
                // and use USB to communicate with it.
                nxtBrick = new NxtBrick(NxtCommLinkType.USB, 0);
                lbConnection.Text = "Connected!";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Fehler");
                lbConnection.Text = ex.ToString();
            }
        }

        // Folgende Methode gibt den Namen des NXT aus
        private void btnGetName_Click(object sender, EventArgs e)
        {
            // Query the device info, and write out the NXT's name.
            String reply = nxtBrick.Name;
            //NxtGetDeviceInfoReply? reply = nxtBrick.GetDeviceInfo();
            if (reply != "")
                lbTest.Text = reply;
            else
                lbTest.Text = "Keine Reaktion!";
        }

        // Den NXT umbenennen
        private void btnRename_Click(object sender, EventArgs e)
        {
            if (tbName.Text != "")
            {
                nxtBrick.Name = tbName.Text;
             
            }
        }

        // Den Motor eine Umdrehung laufen lassen
        private void btnMotor_Click(object sender, EventArgs e)
        {
            // Create a motor.
            NxtMotor motor = new NxtMotor();

            // Attach it to port B of the NXT brick.
            nxtBrick.MotorA = motor;

            motor.Run(75, 360);

           
        }

        // Etwas an die Mailbox 1 senden
        private void btnSend_Click(object sender, EventArgs e)
        {
            string message = tbSend.Text;
            if ((message != "")&&(message.Length<59))
            {
                //nxtCommunicationProtocol.MessageWrite(NxtMailbox.Box1, message);
                nxtBrick.CommLink.MessageWrite(NxtMailbox.Box1, message);
            }


           
        }

       
       
       
    }
}


Und die beigefügte Datei zeigt mein Klickibunti-Programm.

Ich würde mich über eure Hilfe riesig freuen. Mindsqualls-Leute vor. Und vielen Dank schon mal für die Hilfe.

Grüße, HiTek
Dateianhänge
MessageEmpfangenNXT.jpg
MessageEmpfangenNXT.jpg (101.49 KiB) 2172 mal betrachtet

HiTek
Schreibt viel
Schreibt viel
Beiträge: 75
Registriert: 5. Mai 2010 10:46

Re: C#-Programm soll mit dem NXT kommunizieren, aber...

Beitragvon HiTek » 14. Jun 2013 17:23

Ach ja, so sieht übrigens die GUI aus:
Dateianhänge
gui.jpg
gui.jpg (113.51 KiB) 2169 mal betrachtet

HiTek
Schreibt viel
Schreibt viel
Beiträge: 75
Registriert: 5. Mai 2010 10:46

Re: C#-Programm soll mit dem NXT kommunizieren, aber...

Beitragvon HiTek » 16. Jun 2013 20:38

Hallo Leute,

noch eine Ergänzung. Ich mache dasselbe jetzt mit dem Kommandozeilentool Nexttool von John Hansen von hier: http://bricxcc.sourceforge.net/utilities.html. Ich kann mich zwar mit dem NXT über USB verbinden, ich kann den Namen und die Version anzeigen. Ich kann etwas an die Mailbox 1 senden und das wieder mit nexttool empfangen. Aber das Display vom NXT bleibt leer. Vielleicht ist ja einfach mein Klickibunti-NXT-G Programm schuld. Könnte das mal jemand gegenchecken, ob das überhaupt richtig ist. Ich bin nämlich sonst ein Text-Code-C#- und NXC-Lego-Programmierer.

Grüße, HiTek

HiTek
Schreibt viel
Schreibt viel
Beiträge: 75
Registriert: 5. Mai 2010 10:46

Re: C#-Programm soll mit dem NXT kommunizieren, aber...

Beitragvon HiTek » 18. Jun 2013 07:44

Hallo Leute,

jetzt ist das Problem gelöst. Das C#-Programm oben stimmt. Man kann es verwenden, auch wenn die Verwendung von Mindsqualls ein bisschen Probleme macht (der Motor am Port A rotiert bei mir eben nicht 360 Grad...). Nichtsdestotrotz ist die oben angegebene Lösung brauchbar. Man kann nämlich einen PC-NXT-Datenaustausch über die Mailboxen in beide Richtungen über USB ermöglichen, was natürlich wichtig ist, wenn eine Kommunikation über Bluetooth nicht zur Verfügung stehen soll.

Leider kann man in NXT-G die Messageboxen nur abfragen, wenn die Messages über Bluetooth übertragen werden. Darum funktionierte das NXT-G Programm für den NXT nicht. Ich habe die Messages des PC auf dem NXT mit folgendem NXC-Programm empfangen:

Code: Alles auswählen

#define INBOX 1

string request;
string answer;



task main()
{
while(true)
  {
  Wait(10);
  ReceiveMessage(INBOX, true, request);   //true bedeutet hier, dass die Message aus der NXT-Mailbox gelöscht wird.
  if(StrLen(request)>0)
   {
   answer=StrCat("Hallo, ",request);
   TextOut(0,LCD_LINE1,answer);
   }
   
  }


}


Die Möglichkeiten des Programms für meine Zwecke sind ausreichend. Ich kann Strings in beide Richtungen übertragen und diese Strings aufspalten und somit Werte für Motoren, Servos, Sensoren etc. übertragen.


Zurück zu „sonstige Software und Software-Probleme“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss