1

我研究了一个关于使用 Visual Studio C# 控制机器人的项目。我想控制一个步进电机连接的 arduino 与 Track 位置。但我不会通过串行端口将轨道值作为整数发送到 arduino。我可以发送字符或字符串值。我想将每个轨道值发送到 arduino 以控制步进电机。

4

1 回答 1

1

在 C# 方面,您可以使用如下内容:

Byte[] bytes = BitConverter.GetBytes(1234); //1234-sample  32 bit int

注意字节顺序,在这个例子中,bytes[0] 中的字节是最低有效字节,所以最好从末尾开始发送这个数组。

在 Arduino 方面,您可以逐字节获取此数组,并通过左移将其组装回 int,例如:

tmp_long|=getbyte(); //got first byte of int
tmp_long<<=8;
tmp_long|=getbyte(); //got second byte of int
tmp_long<<=8;
tmp_long|=getbyte(); //
tmp_long<<=8;
tmp_long|=getbyte(); //

//请记住,int 在 C# 中是 32 位,在 Arduino Uno 中是 16 位,所以这里需要长类型。

或者你可以键入def union,并逐字节填充它,如下所示:

typedef union _WORD_VAL
{
    unsigned long Val;
    unsigned char v[4];
} WORD_VAL;

WORD_VAL myData;

myData.v[0]=getbyte(); //got first byte of int
myData.v[1]=getbyte();
myData.v[2]=getbyte(); 
myData.v[3]=getbyte();

unsigned long data=myData.Val; //got assembled in back
于 2013-10-17T04:15:25.340 回答