如何将浮点值从一个蓝牙模块发送到另一个(HC 05)
How to send float values from one bluetooth module to other(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);
}
我需要串行监视器上的整数值。但是我得到了一些符号,比如 ?/<>..
从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();
}
}
}
我正在做一个项目,我需要将数据从一个 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);
}
我需要串行监视器上的整数值。但是我得到了一些符号,比如 ?/<>..
从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();
}
}
}