3

テキスト ボックスの数値を 2 バイトに変換して、シリアル経由で送信しようとしています。数値の範囲は 500 ~ -500 です。私はすでにセットアップを行っているので、単純に文字列を送信し、それをバイトに変換できます。次に例を示します。

send_serial("137", "1", "244", "128", "0")

テキストボックス番号は 2 バイト目と 3 バイト目に入ります

これにより、ルンバ (このコードの対象となるロボット) が 500 mm/s の速度で前進します。送信される最初の数値はルンバに駆動するよう指示し、2 番目と 3 番目の数値は速度、4 番目と 5 番目の数値は回転半径です (2000 から -2000 の間で、32768 が直線である特殊なケースもあります)。

4

2 に答える 2

2
var value = "321";
var shortNumber = Convert.ToInt16(value);
var bytes = BitConverter.GetBytes(shortNumber);

または、ビッグ エンディアンの順序が必要な場合:

var bigEndianBytes = new[]
{
    (byte) (shortNumber >> 8), 
    (byte) (shortNumber & byte.MaxValue)
};
于 2012-12-23T03:47:24.927 に答える
0

を使用していると仮定すると、データを送信するためにSystem.IO.Ports.SerialPortusing を記述します。SerialPort.Write(byte[], int, int)

入力が次のような場合: 99,255、次のようにして 2 バイトを抽出します。

// Split the string into two parts
string[] strings = textBox1.text.Split(',');
byte byte1, byte2;
// Make sure it has only two parts,
// and parse the string into a byte, safely
if (strings.Length == 2
    && byte.TryParse(strings[0], System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out byte1)
    && byte.TryParse(strings[1], System.Globalization.NumberStyles.Integer, System.Globalization.CultureInfo.InvariantCulture, out byte2))
{
    // Form the bytes to send
    byte[] bytes_to_send = new byte[] { 137, byte1, byte2, 128, 0 };
    // Writes the data to the serial port.
    serialPort1.Write(bytes_to_send, 0, bytes_to_send.Length);
}
else
{
    // Show some kind of error message?
}

ここでは、「バイト」が 0 から 255 であると仮定します。これは C# のbyte型と同じです。以前byte.TryParseは を に解析していstringましたbyte

于 2012-12-23T03:56:59.563 に答える