Как отправить значения с плавающей точкой из одного модуля Bluetooth в другой (HC 05) - PullRequest
1 голос
/ 30 апреля 2019

Я делаю проект, в котором мне нужно отправить данные от беспроводного ультразвукового датчика, присутствующего в одном arduino, в другое arduino, где мне нужны эти значения в последовательном мониторе.Но проблема в том, что я не могу отправить эти значения через Bluetooth.Я попытался отправить один символ, он появляется в последовательном мониторе. Но когда я попытался сделать то же самое для целочисленных значений, он не появляется в последовательном мониторе.Я настроил режимы Master и Slave для Bluetooth.Я загрузил изображение кода, который я использую для отправки этих значений.Пожалуйста помоги мне с этим.Заранее спасибо.

 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 голосов
/ 02 мая 2019

Спасибо за помощь ..! Я изменил код на стороне получателя, чтобы получить значения с плавающей точкой от передатчика. Вот мой модифицированный код

#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();
  }
  }
}
0 голосов
/ 30 апреля 2019

С ссылка Arduino , Serial.read() читает только первый доступный байт, доступный в последовательном буфере.Поскольку int кодируется на 8 байтах, я бы сказал, что вам нужно последовательно читать входящие байты, чтобы получить полное значение.

Возможно, вы сможете реализовать это, поместив (Serial.available() > 0) в цикл while, объединить значения, которые вы получите, например, в char[8], а затем преобразовать это char в целочисленное значение.

Кроме того, помните, что вы отправляете floats, а не int.

...