NXT到pc蓝牙短信

时间:2013-07-22 08:45:33

标签: c# bluetooth pc nxt

如何从nxt发送蓝牙短信到电脑并在电脑上阅读?

我用这个:

     byte[] byteOut = new byte[65];
        int i = 0;
        try
        {
            byteOut[0] = (byte)(TextBox1.TextLength + 5);
            //number bytes in output message
            byteOut[1] = 0x0;
            //should be 0 for NXT
            byteOut[2] = 0x00;
            //&H0 = reply expected &H80 = no reply expected
            byteOut[3] = 0x9;
            //Send Bluetooth
            byteOut[4] = 0x0;
            //Box Number - 1
            byteOut[5] = (byte)(TextBox1.TextLength + 1);
            //message size with null terminator
            //copy bytes into output array
            for (i = 1; i <= TextBox1.TextLength; i++)
            {
                byteOut[(i + 5)] = Convert.ToByte(Asc(TextBox1.Text.Substring((i - 1), 1)));
            }

            byteOut[TextBox1.TextLength + 6] = 0x0;
            //add null terminator
            SerialPort1.Write(byteOut, 0, TextBox1.TextLength + 7);
            //send message


            // I try to use this for reading but it doesn't work good. It gets a lot                           of numbers and no text.

            char[] read1 = new char[65];

            SerialPort1.Read(read1, 0, TextBox1.TextLength + 7);

            string box1 = "";



            for (int i1 = 0; i1 < read1.Length; ++i1)
            {
                box1 += read1[i1];
            }

            MessageBox.Show(box1);

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

我尝试使用它进行阅读,但效果不佳。它有很多数字,没有文字。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

将此功能添加到您的代码中:

 private string NXTSendCommandAndGetReply(byte[] Command)
    {
        string r = "";
        Byte[] MessageLength = { 0x00, 0x00 };
        MessageLength[0] = (byte)Command.Length;
        BluetoothConnection.Write(MessageLength, 0, MessageLength.Length);
        BluetoothConnection.Write(Command, 0, Command.Length);
        int length = BluetoothConnection.ReadByte() + 256 * BluetoothConnection.ReadByte();
        for (int i = 0; i < length; i++)
            r += BluetoothConnection.ReadByte().ToString("X2");
        return r;
    }

然后你可以用这个发送号码:

private void send(int a)
{
    byte[] NxtMessage = { 0x00, 0x09, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00 };
    NxtMessage[2] = (byte)(0);
    int tmp = (int)a;
    for (int ByteCtr = 0; ByteCtr <= 3; ByteCtr++)
    {
        NxtMessage[4 + ByteCtr] = (byte)tmp;
        tmp >>= 8;
    }
    NXTSendCommandAndGetReply(NxtMessage);
}

发送文字:

public void send(string s)
{
    byte[] NxtMessage = new byte[5 + s.Length];
    NxtMessage[0] = 0x00;
    NxtMessage[1] = 0x09;
    NxtMessage[2] = 0x00;
    NxtMessage[3] = (byte)(s.Length + 1);
    byte[] array = Encoding.ASCII.GetBytes(s);
    for (int ByteCtr = 0; ByteCtr < array.Length; ByteCtr++)
    {
        NxtMessage[4 + ByteCtr] = array[ByteCtr];
    }
    NxtMessage[4 + s.Length] = 0x00;
    NXTSendCommandAndGetReply(NxtMessage);
}

从nxt获取数字:

private int read(int mailbox)
{
    byte[] NxtMessage = { 0x00, 0x13, 0x00, 0x00, 0x01 };
    NxtMessage[2] = (byte)(mailbox - 1 + 10);
    string r = NXTSendCommandAndGetReply(NxtMessage);
    return Convert.ToInt32((r[10] + "" + r[11]), 16);
}

从nxt获取文本:

private string read_txt(int mailbox)
{
    byte[] NxtMessage = { 0x00, 0x13, 0x00, 0x00, 0x01 };
    NxtMessage[2] = (byte)(mailbox - 1 + 10);
    string r = NXTSendCommandAndGetReply(NxtMessage);
    int a = 0;
    string recieved = "";
    for (int i = 10; ; i += 2)
    {
        a = int.Parse(r[i] + "" + r[i+1], System.Globalization.NumberStyles.HexNumber);
        if (a == 0)
            break;
        recieved += char.ConvertFromUtf32(a);
    }
    return r;
}

结帐http://geekbrothers.org/index.php/categories/electronics-computers/20-video-controlled-robot,看看使用蓝牙和下载源代码向nxt发送号码非常有用。 结帐http://geekbrothers.org/index.php/teachings我将很快提供一个完整的教程来发送和接收来自nxt的蓝牙。 如果您有任何其他问题,可以使用geekbrothers联系我们表格,或者您可以发送电子邮件至info@geekbrothers.org