我正在尝试使用 int 从蓝牙向 Arduino ESP32 输入一个值,但该值读错了,

I am trying to enter a value using int to Arduino ESP32 from bluetooth and the value is read wrong,

#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
void setup() {
  SerialBT.begin("BTMODE");
  
  Serial.begin(115200);

}
int k;
void loop() {
   while (SerialBT.available()) {
  k=SerialBT.read();
  Serial.println(k);
   }
}

以上是我的代码,输入 3 得到的输出是:51 13 10 要做什么?

您既没有发送也没有接收 int51 13 10 是 ASCII 字符 '3' <carriage-return> <line-feed> 的序列,如果您 在终端输入 字符串例如。

然后您会收到单个字符并打印其 整数 值。

您要么需要发送 binary 数据,然后将单个 bytes 重新组合成一个整数(为此双方需要同意在整数的大小和字节顺序上),或者您阅读 并解释字符串和整数的十进制表示形式。

例如:

void loop() 
{
    static char input[32] = "" ;
    static int input_index = 0 ;

    while (SerialBT.available())
    {
        char c = SerialBT.read() ;
        if( c != '\r' && c != '\n' )
        {
            input[input_index] = c ;
            input_index = (input_index + 1) % (sizeof(input) - 1) ;
        }
        else if( input_index > 0 )
        {
            k = atoi( input ) ;
            SerialBT.println( k ) ;
            input_index = 0 ;
        }

        input[input_index] = '[=10=]' ;         
    }
}

注意这里也可以替换:

while (SerialBT.available())

与:

if (SerialBT.available())

因为它已经在 loop() 中了。这样做可能会导致 loop() 中其他代码的行为更加确定,因为它每次迭代只会读取一个字符,而不是所有可用的字符,这将花费可变的时间来处理。