การส่งและรับ ข้อมูล ผ่าน Rx Tx ด้วย ESP32

แต่ไม่ต้องระบุก็รับค่าได้เหมือนกันครับ


คือตอนนี้ในโค้ดตัวส่ง รันแล้วค่าจากเซนเซอร์อัลตร้าโซนิกออกมาตรงค่ะ
แต่พอไปรันโค้ดตัวรับแล้วค่ามันออกมาดีเลย์+ออกแค่ตัวแรกค่ะ

พอจะช่วยแนะนำให้ได้มั้ยคะว่าควรแก้ที่ตรงไหน

วางโค้ตที่ใช้ด้วยครับ

ตอนนี้ที่ทำอยู่คือมันค่อนข้างจะรับส่งข้อมูลมาช้ามากค่ะ พอต่อเข้ากับมอเตอร์ อยากให้มันรับค่าได้เร็วขึ้นอะค่ะพี่ TT  มันส่งค่าออกมาครบค่ะ แต่ต้องใช้เวลามากๆ+ค่าที่ส่งออกมาไม่ค่อยตรงกับระยะที่วัดได้ค่ะ 



**-------------ตัวส่ง-----------------**

#include <HardwareSerial.h>

//HardwareSerial Serial2(2);             //Needed since this is an ESP32
int ultra_val1 = 100; //รหัส อ่าน
int _ultra_val1; // ค่าที่อ่านได้

int ultra_val2 = 123; //รหัส อ่าน
int _ultra_val2; // ค่าที่อ่านได้

int ultra_val3 = 223; //รหัส อ่าน
int _ultra_val3; // ค่าที่อ่านได้

int ultra_val4 = 245; //รหัส อ่าน
int _ultra_val4; // ค่าที่อ่านได้

bool Read_ultra_val1 = false;
bool Read_ultra_val2 = false;
bool Read_ultra_val3 = false;
bool Read_ultra_val4 = false;

/*-------definning Inputs : Ultrasonic------*/
#define echoPin1 33 // Echo Pin 12
#define trigPin1 32 // Trigger Pin 13
#define echoPin2 12 // Echo Pin 22 
#define trigPin2 13 // Trigger Pin 23
#define echoPin3 26 // Echo Pin 26
#define trigPin3 27 // Trigger Pin 27
#define echoPin4 22 // Echo Pin 32 
#define trigPin4 23 // Trigger Pin 33

long duration1,duration2,duration3,duration4; // Duration used to calculate distance
long distance1,distance2,distance3,distance4;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(trigPin4, OUTPUT);
  pinMode(echoPin4, INPUT);
}

void loop() {  
  //Ultrasonic NO1
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  const unsigned long duration1 = pulseIn(echoPin1, HIGH);
  int distance1 = duration1 / 29 / 2;
  _ultra_val1 = (distance1);
    if(Read_ultra_val1 == false){
       Serial2.write(ultra_val1);
       Serial2.write(_ultra_val1);
       Read_ultra_val1 = Serial2.read();
    }

//Ultrasonic NO2
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  const unsigned long duration2 = pulseIn(echoPin2, HIGH);
  int distance2 = duration2 / 29 / 2;
  _ultra_val2 = (distance2);
    if(Read_ultra_val2 == false && Read_ultra_val1 == true){
       Serial2.write(ultra_val2);
       Serial2.write(_ultra_val2);
       Read_ultra_val2 = Serial2.read();
    }
  
//Ultrasonic NO3  
  digitalWrite(trigPin3, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  const unsigned long duration3 = pulseIn(echoPin3, HIGH);
  int distance3 = duration3 / 29 / 2;
  _ultra_val3 = (distance3);
    if(Read_ultra_val3 == false && Read_ultra_val2 == true){
       Serial2.write(ultra_val3);
       Serial2.write(_ultra_val3);
       Read_ultra_val3 = Serial2.read();
    }

   //Ultrasonic NO4
  digitalWrite(trigPin4, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin4, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin4, LOW);
  const unsigned long duration4 = pulseIn(echoPin4, HIGH);
  int distance4 = duration4 / 29 / 2;
  _ultra_val4 = (distance4);
    if(Read_ultra_val4 == false && Read_ultra_val3 == true){
       Serial2.write(ultra_val4);
       Serial2.write(_ultra_val4);
       Read_ultra_val4 = Serial2.read();
    }

Serial.println(_ultra_val1);
Serial.println(_ultra_val2);
Serial.println(_ultra_val3);
Serial.println(_ultra_val4);
       Read_ultra_val1 = false;
       Read_ultra_val2 = false;
       Read_ultra_val3 = false;
       Read_ultra_val4 = false;
}






------------ ตัวรับ----------------
#include <HardwareSerial.h>

int Get_data_esp2;
bool Read_ultra_val1 = false;
bool Read_ultra_val2 = false;
bool Read_ultra_val3 = false;
bool Read_ultra_val4 = false;

int _ultra_val1; // ค่าที่อ่านได้
int _ultra_val2; // ค่าที่อ่านได้
int _ultra_val3; // ค่าที่อ่านได้
int _ultra_val4; // ค่าที่อ่านได้

// Set pin for Motor A
int motor1Pin1 = 27;    
int motor1Pin2 = 26;
int enable1Pin = 14;

// Set pin for Motor B
int motor2Pin1 = 18;    
int motor2Pin2 = 5;
int enable2Pin = 19;

// Set pin for Motor C
int motor3Pin1 = 33;    
int motor3Pin2 = 32;
int enable3Pin = 25;

// Set pin for Motor D
int motor4Pin1 = 22;    // Set pin for Motor B
int motor4Pin2 = 23;
int enable4Pin = 21;

// Setting PWM properties
const int freq = 500;
const int pwmChannel = 0;
const int pwmChanne2 = 1;
const int pwmChanne3 = 0;
const int pwmChanne4 = 1;
const int resolution = 8;
int dutyCycle;

void setup() {
  Serial.begin(115200);
  Serial2.begin(9600,SERIAL_8N1, 16, 17);
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enable1Pin, OUTPUT);
  pinMode(motor2Pin1, OUTPUT);
  pinMode(motor2Pin2, OUTPUT);
  pinMode(enable2Pin, OUTPUT);
  pinMode(motor3Pin1, OUTPUT);
  pinMode(motor3Pin2, OUTPUT);
  pinMode(enable3Pin, OUTPUT);
  pinMode(motor4Pin1, OUTPUT);
  pinMode(motor4Pin2, OUTPUT);
  pinMode(enable4Pin, OUTPUT);

  // configure LED PWM functionalitites
ledcSetup(pwmChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(enable1Pin, pwmChannel);
ledcAttachPin(enable2Pin, pwmChanne2);
ledcAttachPin(enable3Pin, pwmChanne3);
ledcAttachPin(enable4Pin, pwmChanne4);
}

void loop() {
Get_data_esp2 = Serial2.read();
Serial.println(String("กำลังอ่านข้อมูล => ") + Get_data_esp2);
  if (Get_data_esp2 == 100){
  _ultra_val1 = Serial2.read();
  Read_ultra_val1 = true;
  Serial2.write(Read_ultra_val1);
  Serial.println(_ultra_val1);
 }

  if (Get_data_esp2 == 123){
  _ultra_val2 = Serial2.read();
  Read_ultra_val2 = true;
  Serial2.write(Read_ultra_val2);
  Serial.println(_ultra_val2);
 }

 if (Get_data_esp2 == 223){
  _ultra_val3 = Serial2.read();
  Read_ultra_val3 = true;
  Serial2.write(Read_ultra_val3);
 }

  if (Get_data_esp2 == 245){
  _ultra_val4 = Serial2.read();
  Read_ultra_val4 = true;
  Serial2.write(Read_ultra_val4);
 }

if(_ultra_val1 > 50){
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
  digitalWrite(motor3Pin1, LOW);
  digitalWrite(motor3Pin2, HIGH);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, HIGH);
  ledcWrite(pwmChannel,150);
  ledcWrite(pwmChanne2,150);
  ledcWrite(pwmChanne3,150);
  ledcWrite(pwmChanne4,150);
}

if(_ultra_val1 <= 50 && _ultra_val2 < _ultra_val3){
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
  digitalWrite(motor3Pin1, HIGH);
  digitalWrite(motor3Pin2, LOW);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, HIGH);
  ledcWrite(pwmChannel,255);
  ledcWrite(pwmChanne2,255);
  ledcWrite(pwmChanne3,255);
  ledcWrite(pwmChanne4,255);
  delay(2900);
}else{
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
  digitalWrite(motor3Pin1, LOW);
  digitalWrite(motor3Pin2, HIGH);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, HIGH);
  ledcWrite(pwmChannel,150);
  ledcWrite(pwmChanne2,150);
  ledcWrite(pwmChanne3,150);
  ledcWrite(pwmChanne4,150);
  }

if(_ultra_val1 < 50 && _ultra_val3 < _ultra_val2){
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
  digitalWrite(motor3Pin1, LOW);
  digitalWrite(motor3Pin2, HIGH);
  digitalWrite(motor4Pin1, HIGH);
  digitalWrite(motor4Pin2, LOW);
  ledcWrite(pwmChannel,255);
  ledcWrite(pwmChanne2,255);
  ledcWrite(pwmChanne3,255);
  ledcWrite(pwmChanne4,255);
  delay(2900);
}else{
  digitalWrite(motor1Pin1, LOW);
  digitalWrite(motor1Pin2, HIGH);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
  digitalWrite(motor3Pin1, LOW);
  digitalWrite(motor3Pin2, HIGH);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, HIGH);
  ledcWrite(pwmChannel,150);
  ledcWrite(pwmChanne2,150);
  ledcWrite(pwmChanne3,150);
  ledcWrite(pwmChanne4,150);
}

if(_ultra_val4 < 50){
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, HIGH);
  digitalWrite(motor2Pin2, LOW);
  digitalWrite(motor3Pin1, HIGH);
  digitalWrite(motor3Pin2, LOW);
  digitalWrite(motor4Pin1, HIGH);
  digitalWrite(motor4Pin2, LOW);
  ledcWrite(pwmChannel,150);
  ledcWrite(pwmChanne2,150);
  ledcWrite(pwmChanne3,150);
  ledcWrite(pwmChanne4,150);
  delay(3000);
  digitalWrite(motor1Pin1, HIGH);
  digitalWrite(motor1Pin2, LOW);
  digitalWrite(motor2Pin1, LOW);
  digitalWrite(motor2Pin2, HIGH);
  digitalWrite(motor3Pin1, HIGH);
  digitalWrite(motor3Pin2, LOW);
  digitalWrite(motor4Pin1, LOW);
  digitalWrite(motor4Pin2, HIGH);
  ledcWrite(pwmChannel,255);
  ledcWrite(pwmChanne2,255);
  ledcWrite(pwmChanne3,255);
  ledcWrite(pwmChanne4,255);
  delay(2900);
  }
  
 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่1 ") + _ultra_val1);
 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่2 ") + _ultra_val2);
 Serial.println(String("ค่าจากเซ็นเซอร์ตัวท3 ") + _ultra_val3);
 Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่4 ") + _ultra_val4);

}

มันก็ไม่แปลกที่มันจะช้าละครับ บัสเรทมันอยู่แค่ 9600 ลองไล่เพิ่มค่าดู เปลี่ยนก็เปลี่ยนให้เหมือนกันด้วยครับ

image

ได้ผลอย่างไรเอามาดูกัน

ยังค่อนข้างช้าอยู่ค่ะ พอเอาไปเข้าคู่กับตัวโค้ดมอเตอร์ เหมือนจะดีเลย์ไปประมาณ3วิค่ะ

ปรับอะไรไปบ้างเอามาดูด้วยสิคร้าาาพ

//SEND
#include <HardwareSerial.h>

//HardwareSerial Serial2(2);             //Needed since this is an ESP32
int _ultra_val1; // ค่าที่อ่านได้
int _ultra_val2; // ค่าที่อ่านได้
int _ultra_val3; // ค่าที่อ่านได้
int _ultra_val4; // ค่าที่อ่านได้

bool Read_ultra_val1 = false;
bool Read_ultra_val2 = false;
bool Read_ultra_val3 = false;
bool Read_ultra_val4 = false;

/*-------definning Inputs : Ultrasonic------*/
#define echoPin1 33 // Echo Pin 12
#define trigPin1 32 // Trigger Pin 13
#define echoPin2 12 // Echo Pin 22 
#define trigPin2 13 // Trigger Pin 23
#define echoPin3 26 // Echo Pin 26
#define trigPin3 27 // Trigger Pin 27
#define echoPin4 22 // Echo Pin 32 
#define trigPin4 23 // Trigger Pin 33

void setup() {
  Serial.begin(2000000);
  Serial2.begin(1000000, SERIAL_8N1, 16, 17);
  pinMode(trigPin1, OUTPUT);
  pinMode(echoPin1, INPUT);
  pinMode(trigPin2, OUTPUT);
  pinMode(echoPin2, INPUT);
  pinMode(trigPin3, OUTPUT);
  pinMode(echoPin3, INPUT);
  pinMode(trigPin4, OUTPUT);
  pinMode(echoPin4, INPUT);
}

void loop() {  
  //Ultrasonic NO1
  digitalWrite(trigPin1, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin1, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin1, LOW);
  const unsigned long duration1 = pulseIn(echoPin1, HIGH);
  int distance1 = duration1 / 29 / 2;
  _ultra_val1 = (distance1);
    if(Read_ultra_val1 == false){
       Serial2.write(_ultra_val1);
       Read_ultra_val1 = Serial2.read();
 
    }

//Ultrasonic NO2
  digitalWrite(trigPin2, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin2, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin2, LOW);
  const unsigned long duration2 = pulseIn(echoPin2, HIGH);
  int distance2 = duration2 / 29 / 2;
  _ultra_val2 = (distance2);
    if((Read_ultra_val2 == false) && (Read_ultra_val1 == true)){
       Serial2.write(_ultra_val2);
       Read_ultra_val2 = Serial2.read();
    }
  
//Ultrasonic NO3  
  digitalWrite(trigPin3, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin3, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin3, LOW);
  const unsigned long duration3 = pulseIn(echoPin3, HIGH);
  int distance3 = duration3 / 29 / 2;
  _ultra_val3 = (distance3);
    if((Read_ultra_val3 == false) && (Read_ultra_val2 == true)){
       Serial2.write(_ultra_val3);
       Read_ultra_val3 = Serial2.read();
    }

    //Ultrasonic NO4
  digitalWrite(trigPin4, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin4, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin4, LOW);
  const unsigned long duration4 = pulseIn(echoPin4, HIGH);
  int distance4 = 60;
  _ultra_val4 = (distance4);
    if((Read_ultra_val4 == false) && (Read_ultra_val3 == true)){
       Serial2.write(_ultra_val4);
       Read_ultra_val4 = Serial2.read();
    }
Serial.println(_ultra_val1);
Serial.println(_ultra_val2);
Serial.println(_ultra_val3);
Serial.println(_ultra_val4);

       Read_ultra_val1 = false;
       Read_ultra_val2 = false;
       Read_ultra_val3 = false;
       Read_ultra_val4 = false;

}
//RECIEVE
#include <HardwareSerial.h>
bool Read_ultra_val1 = false;
bool Read_ultra_val2 = false;
bool Read_ultra_val3 = false;
bool Read_ultra_val4 = false;

int _ultra_val1; // ค่าที่อ่านได้
int _ultra_val2; // ค่าที่อ่านได้
int _ultra_val3; // ค่าที่อ่านได้
int _ultra_val4; // ค่าที่อ่านได้

// Set pin for Motor A
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;

// Set pin for Motor B
int motor2Pin1 = 18;
int motor2Pin2 = 5;
int enable2Pin = 19;

// Set pin for Motor C
int motor3Pin1 = 33;
int motor3Pin2 = 32;
int enable3Pin = 25;

// Set pin for Motor D
int motor4Pin1 = 22; // Set pin for Motor B
int motor4Pin2 = 23;
int enable4Pin = 21;

// Setting PWM properties
const int freq = 500;
const int pwmChannel = 0;
const int pwmChanne2 = 1;
const int pwmChanne3 = 0;
const int pwmChanne4 = 1;
const int resolution = 8;
int dutyCycle;

void setup() {
Serial.begin(2000000);
Serial2.begin(1000000,SERIAL_8N1, 16, 17);
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(enable2Pin, OUTPUT);
pinMode(motor3Pin1, OUTPUT);
pinMode(motor3Pin2, OUTPUT);
pinMode(enable3Pin, OUTPUT);
pinMode(motor4Pin1, OUTPUT);
pinMode(motor4Pin2, OUTPUT);
pinMode(enable4Pin, OUTPUT);

// configure LED PWM functionalitites
ledcSetup(pwmChannel, freq, resolution);
// attach the channel to the GPIO to be controlled
ledcAttachPin(enable1Pin, pwmChannel);
ledcAttachPin(enable2Pin, pwmChanne2);
ledcAttachPin(enable3Pin, pwmChanne3);
ledcAttachPin(enable4Pin, pwmChanne4);
}

void loop() {
_ultra_val1 = Serial2.read();
Read_ultra_val1 = true;
Serial2.write(Read_ultra_val1);
delay(100);
_ultra_val2 = Serial2.read();
Read_ultra_val2 = true;
Serial2.write(Read_ultra_val2);
delay(100);
_ultra_val3 = Serial2.read();
Read_ultra_val3 = true;
Serial2.write(Read_ultra_val3);
delay(100);
_ultra_val4 = Serial2.read();
Read_ultra_val4 = true;
Serial2.write(Read_ultra_val4);
delay(100);
Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่1 ") + _ultra_val1);
Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่2 ") + _ultra_val2);
Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่3 ") + _ultra_val3);
Serial.println(String("ค่าจากเซ็นเซอร์ตัวที่4 ") + _ultra_val4);
delay(3000);
}

อันนี้คือโค้ดล่าสุดที่ลองรันค่ะ เอาตัวรหัสอ่านออกแล้วให้มันแสดงค่าออกมาพร้อมกัน 4 ค่าเลย แต่ตรงตัวรับยังรับค่าดีเลย์อยู่ค่ะ พอค่ามันมาดีเลย์ ล้อมันก็เลยรันไม่สัมพันธ์กับความเป็นจริงค่ะ เช่น วัดระยะด้านหน้าได้น้อยกว่า 50 แล้วหุ่นควรจะเลี้ยว แต่ตรงตัวรับมันยังเป็นค่าเก่าที่เกิน50อยู่ค่ะก็เลยไม่เลี้ยว

เป็นไปได้มั๊ยครับ ใช้ MCU 1 ตัว คุมระบบทั้งหมดน่ะครับ (ขอแสดงความคิดเห็น)

1 Likes

ใช้ I2C ได้ครับพี่ หรือใช้ 74HC4051 8 channel Analog Multiplexer Selector Module กรณี Address i2c ชนกันหรือเปลี่ยนไม่ได้ครับ หลังๆ มาผมจะใช้แบบนี้เป็นส่วนใหญ่ ส่วนกระทู้นี้ เน้นง่ายคิดอะไรไม่ออก ทำตามที่คิดออกครับ อิอิ

image

ตั้ง speed ตามนี้ครับ ลองใช้ค่าสูงสุดคือ 921600 ดู

image

ช่วยดูให้หน่อยครับ จะส่งค่าแบบ float ไปได้ยังไง

ต้องเอา error มาวางด้วยครับ

C:\Users\nut13\OneDrive\เอกสาร\Arduino\ESP32_Output\ESP32_Output.ino: In function ‘void loop()’:
ESP32_Output:34:21: error: call of overloaded ‘write(float&)’ is ambiguous
In file included from C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/Arduino.h:154:0,
from sketch\ESP32_Output.ino.cpp:1:
C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.h:72:12: note: candidate: virtual size_t HardwareSerial::write(uint8_t)
size_t write(uint8_t);
^
C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.h:82:19: note: candidate: size_t HardwareSerial::write(long unsigned int)
inline size_t write(unsigned long n)
^
C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.h:86:19: note: candidate: size_t HardwareSerial::write(long int)
inline size_t write(long n)
^
C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.h:90:19: note: candidate: size_t HardwareSerial::write(unsigned int)
inline size_t write(unsigned int n)
^
C:\Users\nut13\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/HardwareSerial.h:94:19: note: candidate: size_t HardwareSerial::write(int)
inline size_t write(int n)
^
Multiple libraries were found for “Adafruit_MLX90614.h”
Used: C:\Users\nut13\OneDrive\เอกสาร\Arduino\libraries\Adafruit_MLX90614_Library
Not used: C:\Users\nut13\OneDrive\เอกสาร\Arduino\libraries\Adafruit-MLX90614-Library-master
Multiple libraries were found for “Adafruit_I2CDevice.h”
Used: C:\Users\nut13\OneDrive\เอกสาร\Arduino\libraries\Adafruit_BusIO
Not used: C:\Users\nut13\OneDrive\เอกสาร\Arduino\libraries\arduino_613839
exit status 1
call of overloaded ‘write(float&)’ is ambiguous

ช่วยทำโค้ดส่งค่าแบบ float ให้หน่อยได้ไหมครับส่งกับรับมา