ผมสั่ง NRF24L01 PA LNA มาคู่นึง และ arduino atmega8 ทดสอบตามโค้ดที่ได้แนะนำในบทความแล้วทำงานได้ดีครับ (ขอบคุณสำหรับโค้ดตัวอย่างด้วยครับ) ผมอยากถามเพิ่มเติมดังนี้ครับ
- ไลบรารี่ที่ให้มาสามารถกำหนดความเร็วในการส่งได้มั้ยครับ เพราะจากข้อมูลในดาต้าชีตถ้าส่งที่ความเร็วตำสุดสามารถส่งได้ไกลสุดใช่มั้ยครับ
- สามารถรับและส่งข้อมูลพร้อมๆกันเลยได้มั้ยครับ เช่น A ส่งข้อมูลไป B ได้รับก็ตอบ ACK กลับมาเพื่อยืนยันข้อมูลและไม่ทราบว่ามันรับส่งกันแบบ half duplex หรือ full duplex ครับ พอจะมีข้อมูลมั้ยครับ
....ตัวนี้ผมจะทำเป็นตัวแปลงข้อมูล serial (uart) แล้วส่งแบบไร้สายไป อีกฝั่งก็รับแล้วส่งต่อออกไปเป็น serial uart อ่ะครับ
ขอบคุณครับ
แสดงว่าส่งข้อมูลได้แล้วครับ สาเหตุเพราะปรับบอร์ดเรทไม่ตรง ใน serial monitor เลือก board rate เป็น 9600 หรือ 115200 หรือตามที่ในโคดเขียนคำว่า Seiral.begin(xxx); ครับ
ต้องตั้งทั้ง 2 จุด ในโคดและใน Serial Monitor ให้ตรงกันครับ
ต้องมีตัวรับ กับตัวส่ง เขียนโคดทดสอบ
ถ้ายังไม่ออก อาจเป็นกับสัญญาณรบกวน แนเนำให้ใช้ C ค่าน้อย ๆ เช่น 0.1 ต่อที่ขา VCC , GND เพื้อป้องกันสัญญาณรบกวนครับ
ถ้าซื้อจากที่ทางร้าน ArduinoAll ไม่ต้องกังวล มีรับประกันทุกชิ้นครับ
สาเหตุหลัก ๆ ก็ตามที่ได้แนะนำไปแล้วครับ
สวัสดีครับตอนนี้ผมทำให้ตัวnrf24 2ตัวรับและส่งสัญญาณกัน เมื่อตัวรับอยู่ในระยะจะส่งเสียงดังได้แล้ว ถ้าผมอยากเปลี่ยนเป็นให้มันดังเมื่อไม่อยู่ในระยะแทน ผมควรจะแก้โค้ดยังไงดีครับ ขอบคุณครับ
โค้ดตัวส่ง
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7,8);
const byte address[6] = "00001";
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
radio.stopListening();
}
void loop() {
const char text[] = "nrftest";
radio.write(&text, sizeof(text));
delay(2000);
}
และโค้ดตัวรับ
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7,8);
const int buzzer = 2;
const byte address[6] = "00001";
void setup() {
pinMode(buzzer, OUTPUT);
radio.begin();
radio.openReadingPipe(0,address);
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_250KBPS);
radio.startListening();
}
void loop() {
char text[32] = "";
if (radio.available()) {
radio.read(&text, sizeof(text));
String transData = String(text);
if (transData == "nrftest")
{
tone(buzzer, 1000);
delay(1000);
noTone(buzzer);
}
}
}