ใข้เซนเซอร์ HCSR04 4 ตัวในการวัดระยะแล้วส่งค่าระยะทางที่วัดได้ให้กับบอร์ด ESP32 อีกตัวนึงเพื่อทำการควบคุมล้อเพื่อหลบสิ่งกีดขวาง แต่ตอนนี้ทดสอบและ Serial Monitor ดูที่วัดได้จากเซนเซอร์ในบอร์ดส่ง ค่าออกมาปกติและตรง แต่พอกดดูในบอร์ดตัวรับ ค่าเซนเซอร์ออกมาไม่ตรงแล้วก็ไม่ Real TIme ค่ะ เลยทำให้การบังคับหลบสิ่งกีดขวางมันช้า อยากจะขอคำแนะนำหน่อยค่ะว่าควรทำอย่างไร ควรเปลี่ยนบอร์ดมั้ย ( ได้ลองปรับ Baud Rate แล้วก็ Upload Speed แล้ว ค่ายังออกมาเพี้ยนและไม่ Real Time ค่ะ) ขอบคุณล่วงหน้าค่ะะ
โค้ดตัวส่ง
#include <HardwareSerial.h>
//HardwareSerial Serial2(2); //Needed since this is an ESP32
int ultra_val1 = 123; //รหัส อ่าน
int _ultra_val1; // ค่าที่อ่านได้
int ultra_val2 = 223; //รหัส อ่าน
int _ultra_val2; // ค่าที่อ่านได้
int ultra_val3 = 245; //รหัส อ่าน
int _ultra_val3; // ค่าที่อ่านได้
int ultra_val4 = 255; //รหัส อ่าน
int _ultra_val4; // ค่าที่อ่านได้
#define echoPin1 33 // Echo Pin
#define trigPin1 32 // Trigger Pin
#define echoPin2 12// Echo Pin
#define trigPin2 13 // Trigger Pin
#define echoPin3 26 // Echo Pin
#define trigPin3 27 // Trigger Pin
#define echoPin4 22 // Echo Pin
#define trigPin4 23 // Trigger Pin
bool Read_ultra_val1 = false;
bool Read_ultra_val2 = false;
bool Read_ultra_val3 = false;
bool Read_ultra_val4 = false;
void setup() {
Serial.begin(115200);
Serial2.begin(921600, 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);
Serial.println("Send_ultra_val1");
delay(100);
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);
Serial.println("Send_ultra_val2");
delay(100);
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);
Serial.println("Send_ultra_val3");
delay(100);
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);
Serial.println("Send_ultra_val4");
delay(100);
Read_ultra_val4 = Serial2.read();
}
Read_ultra_val1 = false;
Read_ultra_val2 = false;
Read_ultra_val3 = false;
Read_ultra_val4 = false;
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(500);
}
โค้ดตัวรับ
#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; // ค่าที่อ่านได้
void setup() {
// initialize serial:
Serial.begin(115200);
Serial2.begin(921600,SERIAL_8N1, 16, 17);
}
void loop() {
Get_data_esp2 = Serial2.read();
Serial.println(String("กำลังอ่านข้อมูล => ") + Get_data_esp2);
if (Get_data_esp2 == 123){
_ultra_val1 = Serial2.read();
Serial.println("อ่านเซ็นเซอร์ตัวที่3 Temp");
Read_ultra_val1 = true;
Serial2.write(Read_ultra_val1);
delay(100);
}
if (Get_data_esp2 == 223){
_ultra_val2 = Serial2.read();
Serial.println("อ่านเซ็นเซอร์ตัวที่3 Humidity");
Read_ultra_val2 = true;
Serial2.write(Read_ultra_val2);
delay(100);
}
if (Get_data_esp2 == 245){
_ultra_val3 = Serial2.read();
Serial.println("อ่านจากเซ็นเซอร์ตัวที่4 Temp");
Read_ultra_val3 = true;
Serial2.write(Read_ultra_val3);
delay(100);
}
if (Get_data_esp2 == 255){
_ultra_val4 = Serial2.read();
Serial.println("อ่านเซ็นเซอร์ตัวที่4 Humidity");
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(500);
}
อ้างอิงโค้ดจากกระทู้นี้
[> ส่วนอ้างถึง](https://eleceasy.com/t/rx-tx-esp32/3050)