C语言 我试图使用int从蓝牙输入一个值到Arduino ESP32,但该值读取错误,

tjrkku2a  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(146)
#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后得到的输出是:511310怎么办?

58wvjzkj

58wvjzkj1#

您既不是在发送也不是在接收int51 13 10是ASCII * 字符 * '3' <carriage-return> <line-feed>的序列,例如,如果您在终端 * 键入 * 字符串,这是预期的。
然后,您将接收单个字符并打印其 * 整数 * 值。
您要么需要发送 * binary * 数据,然后将各个 * bytes * 重新组合成一个整数(对于这种情况,双方需要就整数的大小和字节顺序达成一致),要么读取一个 * line * 并解释字符串和整数的十进制表示。
例如:

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] = '\0' ;         
    }
}

请注意,您也可以在此处替换:

while (SerialBT.available())

与:

if (SerialBT.available())

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

6bc51xsx

6bc51xsx2#

这是我的工作守则,希望对你有帮助

void loop() {
  if (Serial.available()) {
    SerialBT.write(Serial.read());  
  }

  int val = 0;    
  if (SerialBT.available() > 0) {
    while (SerialBT.available() > 0) {
      char incoming = SerialBT.read();
      if (incoming >= '0' && incoming <= '9') {
        val = (val * 10) + (incoming - '0');
        delay(5);
      }
    }
    //Select your Range  
    if (val > 0 && val <= 30) {
      Serial.print("My Value: ");
      Serial.println(val);
    }
  }
  delay(20);
}

相关问题