ผมใช้โค๊ตทั้งรับและส่งในตัวเดียวกัน ตอนเบิร์นโค๊ดเสร็จทำงานปกติแต่พอสักแปปนึงมันหยุดส่งข้อมูลเองอ่าครับ ลองโค๊ดอื่นเเล้วก็ส่งข้อมูลได้ปกติอยากถามเพื่อนๆพี่ๆว่าควรแก้ไขตรงไหนได้บ้างครับ
ฝั่งส่ง-รับ
#include <SPI.h>
#include <nRF24L01p.h>
#define trigPin 8
#define echoPin 7
int ledred =2;
int ledblue =5;
int i=0;
nRF24L01p transmitter(9, 10); //CSN,CE
void setup() {
pinMode(ledred , OUTPUT);
pinMode(ledblue , OUTPUT);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
transmitter.channel(02); // ตั้งช่องความถี่ให้ตรงกัน
transmitter.TXaddress("NOR1"); // ตั้งชื่อตำแหน่งให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
transmitter.init();
transmitter.RXaddress("NOR2"); //address สำหรับรับข้อมูลกลับ
transmitter.init();
}
int cm ;
int bm ;
void loop() {
long duration;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
cm = microsecondsToCentimeters(duration);
transmitter.txPL(cm); // ค่าที่ต้องการส่ง
transmitter.send(FAST); // สั่งให้ส่งออกไป
delay(100);
delay(100);
if(transmitter.available()){
transmitter.read(); // สั่งให้เริ่มอ่าน
transmitter.rxPL(bm); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(bm);
}
if(bm >= 10){
digitalWrite(ledblue, HIGH);
delay(100);
digitalWrite(ledblue, LOW);
delay(100);
}
else
{
digitalWrite(ledblue, LOW);
}
if(bm < 10){
//for(i=0; i<5; i++){
// Serial.println(i);
digitalWrite(ledred, HIGH);
delay(100);
digitalWrite(ledred, LOW);
delay(100);
//}
}
else
{
digitalWrite(ledred, LOW);
}
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
ฝั่งรับ-ส่ง
#include <SPI.h>
#include <nRF24L01p.h>
#define trigPin 8
#define echoPin 7
int ledred =2;
int ledblue =5;
int i=0;
nRF24L01p receiver(9, 10); //CSN,CE
void setup() {
pinMode(ledred , OUTPUT);
pinMode(ledblue , OUTPUT);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(02); // ตั้งช่องความถี่ให้ตรงกัน
receiver.RXaddress("NOR1"); // ตั้งชื่อตำแห่นงให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
receiver.init();
receiver.TXaddress("NOR2"); // address สำหรับส่งข้อมูลกลับ
receiver.init();
}
int cm ;
int bm ;
void loop() {
long duration;
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
bm = microsecondsToCentimeters(duration);
receiver.txPL(bm); // ค่าที่ต้องการส่ง
receiver.send(FAST); // สั่งให้ส่งออกไป
delay(100);
if (receiver.available()) {
receiver.read(); // สั่งให้เริ่มอ่าน
receiver.rxPL(cm); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(cm);
}
if(cm >= 10){
digitalWrite(ledblue, HIGH);
delay(100);
digitalWrite(ledblue, LOW);
delay(100);
}
else
{
digitalWrite(ledblue, LOW);
}
if(cm < 10){
//for(i=0; i<5; i++){
// Serial.println(i);
digitalWrite(ledred, HIGH);
delay(100);
digitalWrite(ledred, LOW);
delay(100);
//}
}
else
{
digitalWrite(ledred, LOW);
}
}
long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}