我需要使用串行通信向 Arduino 发送一个整数,比如 0-10000 之间。这样做的最佳方法是什么?
我可以考虑将数字分解为一个字符数组(例如:500 为 '5'、'0'、'0')并将它们作为字节流发送(是的,这很难看)。然后在另一端重建。(任何东西都是作为字节流串行发送的,对吧?)
没有更好的方法吗?不知何故,它应该能够将值分配给int
类型变量。
(如果可能的话,真的需要对字符串也有同样的了解)
我需要使用串行通信向 Arduino 发送一个整数,比如 0-10000 之间。这样做的最佳方法是什么?
我可以考虑将数字分解为一个字符数组(例如:500 为 '5'、'0'、'0')并将它们作为字节流发送(是的,这很难看)。然后在另一端重建。(任何东西都是作为字节流串行发送的,对吧?)
没有更好的方法吗?不知何故,它应该能够将值分配给int
类型变量。
(如果可能的话,真的需要对字符串也有同样的了解)
如果您正在寻找的是速度,那么您可以将您的数字分成两个字节,而不是发送 ASCII 编码的 int,这是一个示例:
uint16_t number = 5703; // 0001 0110 0100 0111
uint16_t mask = B11111111; // 0000 0000 1111 1111
uint8_t first_half = number >> 8; // >>>> >>>> 0001 0110
uint8_t sencond_half = number & mask; // ____ ____ 0100 0111
Serial.write(first_half);
Serial.write(sencond_half);
Another way:
unsigned int number = 0x4142; //ASCII characters 'AB';
char *p;
p = (char*) &number;
Serial.write(p,2);
will return 'BA' on the console (LSB first).
您没有指定from环境,所以我认为您的麻烦在于在 Arduino 上读取串行数据?
无论如何,如Arduino 串行参考中所见,您可以使用Serial.parseInt()
方法调用读取整数。您可以使用例如读取字符串。Serial.readBytes(buffer, length)
但你真正的问题是知道什么时候需要一个字符串,什么时候需要一个整数(以及如果出现其他问题该怎么办,例如噪音等等......)
另一种方式:
char p[2];
*p = 0x4142; //ASCII characters 'AB'
Serial.write(p,2);
我喜欢这种方式。
我不是来自编码背景,今天我也在尝试同样的方法并让它工作..我只是按字节发送数字,并添加了开始和结束字节('a'和'b')。希望能帮助到你..enter code here
//sending end
unsigned char a,n[4],b;
int mynum=1023;// the integer i am sending
for(i=0;i<4;i++)
{
n[i]='0'+mynum%10; // extract digit and store it as char
mynum=mynum/10;
}
SendByteSerially(a);
_delay_ms(5);
SendByteSerially(n[3]);
_delay_ms(5);
SendByteSerially(n[2]);
_delay_ms(5);
SendByteSerially(n[1]);
_delay_ms(5);
SendByteSerially(n[0]);
_delay_ms(5);
SendByteSerially(b);
_delay_ms(100);
//at receiving end.
while(portOne.available() > 0)
{
char inByte = portOne.read();
if(inByte!='a' && inByte !='b')
{
Serial.print(inByte);
}
else if(inByte ='a')
Serial.println();
else if(inByte ='b')
Serial.flush();
}
delay(100);