ความรู้แน่น ฟรีสำหรับชุมชน ArduinoAll ที่นี่เท่านั้น

ฟรีและดีที่สุด คอร์สอบรม Arduino + NodeMCU
ทำเพื่อแบ่งปัน ห้ามนำไปจำหน่าย หรือเก็บเงินค่าเรียน
  !!!


  


AllNewStep รับประกันคุณภาพทุกชิ้น วันจันทร์-ศุกร์แจ้งชำระสินค้าก่อน 14.00 จัดส่งทันทีวันนี้ค่ะ

กรุงเทพ /ภาคกลาง ได้พรุ่งนี้


*** สินค้าทุกชิ้น ถ้าสามารถทำรายการสั่งซื้อได้ แสดงว่ามีครบทุกรายการค่ะ *** 

พิมพ์ค้นหาบทความ หัวข้อกระทู้ และสินค้าในเว็บ AllNewStep ได้ที่นี่
QUOTE 

-ขออนุญาติสอบถามนะครับโมดุลNRF24l01

นอ
ผมใช้โค๊ตทั้งรับและส่งในตัวเดียวกัน ตอนเบิร์นโค๊ดเสร็จทำงานปกติแต่พอสักแปปนึงมันหยุดส่งข้อมูลเองอ่าครับ ลองโค๊ดอื่นเเล้วก็ส่งข้อมูลได้ปกติอยากถามเพื่อนๆพี่ๆว่าควรแก้ไขตรงไหนได้บ้างครับ
ฝั่งส่ง-รับ
#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;
}
QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน

ถ้าทำงานได้ แต่ซักพักไม่ทำงานแสดงว่าโค้ดถูกต้อง ปัญหามาจากจุดอื่น

เช็คแหล่งจ่ายไฟว่าจ่ายกระแสพอ ไม่มีสัญญาณรบกวน

แนะนำให้ใช้ adapter nrf24l01 ครับ

แสดงความคิดเห็นที่ 1-1 จากทั้งหมด 1 ความคิดเห็น
ขาย ARDUINO
คุณภาพ อันดับ 1

ได้รับรางวัลร้านยอดเยี่ยม
ตั้งแต่ปี 2558
ขาย Arduino
วีดีโอสอน Arduino

สอน esp8266

สอน Arduino IoT
สอน Arduino แบบเร็ว

สอน NodeMCU

อุปกรณ์ Arduino

MEMBER ZONE

พูดคุย-สอบถาม