1

コンピューターからPICに1バイトを送信しようとしています(注:PICは1バイトのみを受け入れ、それ以外の場合はデータ送信の最初のバイトのみを受け入れます)

合計8個のLEDだけを管理したいので、これはそれほど問題にはならないはずです。したがって、0から255までしか必要ありませんが、これを達成するのに問題があります。値1を写真に送信しようとすると、プログラムは31を送信します。5を送信しようとすると35を送信します。255を送信しようとすると、3 * 2 * 3 * 5 * 3 * 5 *を送信します。送信してみると、その前に3が追加されます。次のコードを使用して値を決定し、送信しています。

        Dim t As Integer = 0
    Dim result As Integer = 0
    For Each chk As CheckBox In GroupBox1.Controls
        If chk.Checked = True Then
            result = result + 2 ^ t
        End If
        t = t + 1
    Next
    publisher.Connect(IPTo, PortTo)
    Dim sendbytes() As Byte = ASCII.GetBytes(result)
    publisher.Send(sendbytes, sendbytes.Length)

問題はASCIIへの変換にあると思います。

また、PICからPCへの入力を受信しようとしています。これには、タイマー内に次のスクリプトがあります。

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
            Dim rcvbytes() As Byte = subscriber.Receive(ep)

            Dim translate As String
            translate = System.BitConverter.ToInt32(rcvbytes, 0)

            TBRcv.Text = translate
        Catch ex As Exception
        End Try
    End Sub
4

2 に答える 2

3

ASCII.GetBytesは、文字列(ASCIIでエンコードされたもの)を想定しています。Int32を与えることは意味がありません。

System.BitConverter.GetBytes()およびSystem.BitConverter.ToInt32()(受信側用)を確認してください

したがって、行う必要がある唯一の変更は次のとおりです。

Dim sendbytes() As Byte = BitConverter.GetBytes(result) 

詳細な説明:結果(たとえば5)が最初に文字列(現在は「5」)に変換され、次にASCII.GetBytesが単一の値0x35のバイト配列を返すようになりました。これはAsc( "5 ")は0x35です。

于 2012-10-10T17:30:34.310 に答える
1

文字のASCII値1は0x31などです。参考:

ここに画像の説明を入力してください

于 2012-10-10T17:33:49.680 に答える