2013-07-22 2 views
0

nxt에서 pc로 블루투스 문자 메시지를 보내고 PC에서 읽을 수있는 방법은 무엇입니까?NXT to pc bluetooth text 메시지

나는 이것을 사용 :

 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

하면 코드에이 기능을 추가

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); 
} 

GET 번호를 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의 텍스트를 얻을 : 블루투스 및 다운로드 소스 코드와 함께 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합니다. 그리고 체크 아웃 http://geekbrothers.org/index.php/teachings 나는 아주 빨리 nxt와 블루투스를 송수신하기위한 완전한 튜토리얼을 만들 것이다. 다른 문제가있는 경우 geekbrothers contact-us 양식을 사용하거나 [email protected]로 전자 메일을 보내십시오.