我正在尝试使用 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
要做什么?
您既没有发送也没有接收 int
。 51 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()
中其他代码的行为更加确定,因为它每次迭代只会读取一个字符,而不是所有可用的字符,这将花费可变的时间来处理。
#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 要做什么?
您既没有发送也没有接收 int
。 51 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()
中其他代码的行为更加确定,因为它每次迭代只会读取一个字符,而不是所有可用的字符,这将花费可变的时间来处理。