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

时间:2019-04-30 06:28:33

标签: bluetooth arduino arduino-uno hc-05

我正在做一个项目,我需要从无线方式将存在于一个arduino中的超声波传感器的数据发送到另一个需要在串行监视器中获取这些值的arduino。但是问题是我无法通过蓝牙发送这些值。我尝试发送一个字符,它出现在串行监视器中。但是,当我尝试对整数输入相同的字符时,它没有出现在串行监视器中。 我已经为蓝牙配置了主模式和从模式。我已经上传了用于发送这些值的代码的图像。请帮我。预先感谢。

 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);
}

我在串行监视器上需要整数值。但是我得到了一些符号,如?/ <> ..

2 个答案:

答案 0 :(得分:0)

Serial.read()仅从the Arduino reference中读取串行缓冲区中的第一个可用字节。由于int被编码为8个字节,我想说您需要顺序读取传入的字节以获取完整值。

也许您可以通过将(Serial.available() > 0)放入while循环中,将您在char[8]中获得的值连接起来,然后将此char转换为整数来实现此目的值。

另外,请注意,您发送的是floats,而不是int

答案 1 :(得分:0)

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

#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();
  }
  }
}