1

我正在做一个项目,我需要将数据从一个 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);
}

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

4

2 回答 2

0

Arduino 参考中,Serial.read()仅读取串行缓冲区中可用的第一个可用字节。由于 anint编码为 8 个字节,我想说您需要按顺序读取传入的字节才能获得完整值。

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

另外,请注意您正在发送floats而不是int.

于 2019-04-30T08:03:37.677 回答
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();
  }
  }
}
于 2019-05-02T15:30:03.480 回答