如何将浮点值从一个蓝牙模块发送到其他模块(HC 05)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将浮点值从一个蓝牙模块发送到其他模块(HC 05)相关的知识,希望对你有一定的参考价值。

我正在做一个项目,我需要从一个arduino无线存在的超声波传感器发送数据到其他arduino,我需要在串行监视器中使用这些值。但问题是我无法通过蓝牙发送这些值。我试图发送一个字符,它出现在串行监视器中..但是当我尝试相同的整数值时,它没有出现在串行监视器中。我为蓝牙配置了Master和Slave模式。我上传了用于发送这些值的代码图像。请帮帮我。提前致谢 。

 code 

//@ transmitting end
#define trigPin 12
#define echoPin 11

void setup() {

  Serial.begin(38400); // Default communication rate of the Bluetooth module
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}

void loop() {


 long duration;
  float distance;
  digitalWrite(trigPin, LOW);  // Added this line
  delayMicroseconds(2); // Added this line
  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10); // Added this line
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;

 Serial.println(distance,2); // Sends floatValue 
 delay(500);

}


//@ receving end

#include <SoftwareSerial.h>
#define led 13
SoftwareSerial BTSerial(10, 11);
int data=0;
void setup() {

  pinMode(led,OUTPUT);
  Serial.begin(38400);
  BTSerial.begin(38400); // Default communication rate of the Bluetooth module
}

void loop() {
  int number;
 if(Serial.available() > 0){ // Checks data is  from the serial port
 data = BTSerial.read(); // Reads the data from the serial port
 //analogWrite(led,data);
 delay(10);
 //Serial.println(data);

 }
 Serial.println(data);
}

我需要串行监视器上的整数值。但在那里我得到一些符号?/ <> ..

答案

the Arduino reference开始,Serial.read()只读取串行缓冲区中可用的第一个可用字节。由于int编码为8个字节,我会说你需要按顺序读取传入的字节以获得完整的值。

也许你可以通过将(Serial.available() > 0)放在while循环中来实现这一点,例如将你在char[8]中获得的值连接起来,然后将这个char转换为整数值。

此外,请注意你发送floats而不是int

另一答案

谢谢您的帮助..!我修改了接收器端的代码以从发送器获取浮点值。这是我修改过的代码

#include <SoftwareSerial.h>
int bluetoothTx = 10; 
int bluetoothRx = 11;
String content; //content buffer to concatenate characters

char character; //To store single character


SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup(){
  bluetooth.begin(38400);
  Serial.begin(9600);
}

void loop(){
  bluetooth();

}

void bluetooth(){ //
  while(bluetooth.available()){
    character = bluetooth.read();
    content.concat(character);
   if(character == '\r'){ // find if there is carriage return
     Serial.print(content); //display content (Use baud rate 9600)
     content = ""; //clear buffer
     Serial.println();
  }
  }
}

以上是关于如何将浮点值从一个蓝牙模块发送到其他模块(HC 05)的主要内容,如果未能解决你的问题,请参考以下文章

HC-05蓝牙模块AT指令 ERROR问题

HC-06蓝牙模块在发送AT指令设置时怎么没有任何反应??不是应该返回OK吗?

HC-05蓝牙模块AT指令 ERROR问题怎么处理?

为啥很多蓝牙模块厂家选择nRF52832,就因为这5个理由

HC一05摸块扦到电视USB收电视蓝牙转发用可以么

PC端怎么与通过蓝牙模块实现对PC端系统的控制调节,比如HC0,5-6去控制win的操作?