ผมเห็นโค้ดตัวอย่างตามนี้
#include <SPI.h>
#include <nRF24L01p.h>
nRF24L01p receiver(7,8);//CSN,CE
void setup(){
delay(150);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(90); // ตั้งช่องความถี่ให้ตรงกัน
receiver.RXaddress("ALL"); // ตั้งชื่อตำแห่นงให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
receiver.init();
pinMode(3,OUTPUT);
}
String message;
void loop(){
if(receiver.available()){
receiver.read(); // สั่งให้เริ่มอ่าน
receiver.rxPL(message); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(message);
message="";
}
}
แล้วผมก็ลองดัดแปลงอยากให้มันได้รับข้อมูลตัวที่ส่งแล้วไปแสดงค่าทางLED
#include <SPI.h>
#include <nRF24L01p.h>
nRF24L01p receiver(7,8);//CSN,CE
void setup(){
delay(150);
Serial.begin(115200);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(90); // ตั้งช่องความถี่ให้ตรงกัน
receiver.RXaddress("ALL"); // ตั้งชื่อตำแห่นงให้ตรงกัน ชื่อตั้งได้สูงสุด 5 ตัวอักษร
receiver.init();
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
}
String message;
void loop(){
if(receiver.available()){
receiver.read(); // สั่งให้เริ่มอ่าน
receiver.rxPL(message); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(message);
message="";
if(receiver.read()==1000)
{
digitalWrite(2,HIGH);
}
if(receiver.read()==1001)
{
digitalWrite(3,HIGH);
}
}
}
ืึืคือผมได้ลองดัดแปลงต่างๆนาๆ แต่ผลมันก็เหมือนเดิมคือไม่มีอะไรเกิดขึ้นเลยยย ผมไม่รู้จะทำยังไงแล้ว พี่ใช้โค้ดอะไรให้เป็นตัวรับค่าแล้วให้ไปแสดงผลทางLEDหรอครับ
ขอรบกวนๆพวกพี่ๆช่วยผมหน่อยครับโปรเจคเทอมนี้เทอมสุดท้ายผมกลัวเรียนไม่จบครับ
ลอง
1. message=""; ตัดบรรทัดนี้ออก
2. if(receiver.read()==1000) ==> if(message==1000) เปลี่ยนดู
ถ้าดัดแปลงจากโคดนี้ ค่าที่ส่งมาจากอีกฝั่งส่งมาที่ตัวแปร message เป็นตัวแปรแบบ string
receiver.rxPL(message); // สั่งใหอ่านเก็บไว้ที่ตัวแปร
Serial.println(message);
message="";
ดังนั้นการเปรียบเทียบต้องเปรียบเทียบแบบ string ประมาณนี้ครับ
if(message=="1000")
{
digitalWrite(2,HIGH);
}
ข้อมูลเพิ่มเติม การเปรียบเทียบ string ตามนี้ครับ https://www.arduino.cc/en/Tutorial/StringComparisonOperators
ขอบคุณพี่ๆทั้ง2คนมากครับผมได้ลองแก้ไขตามที่พี่ๆบอกแล้วได้ผลดีเลยครับ
แต่ถ้าผมอยากจะ ส่งโค้ดมาครับเดียวแล้วอยากจะให้ไฟมันกระพริบตลอดอะครับ พอส่งอีกคำสั่งไฟมันถึงจะดับ
สมมติส่ง 1000 ไป ให้ LED1 ติด กระพริบตลอด ไม่มีหยุด แล้วพอส่ง 1001ไป ให้มันหยุด ผมจะต้องทำยังไงครับ
ผมได้ลองทำแบบนี้
if(message=="1000")
{
message="";
for(int A=1; A<=200; A++ ){
digitalWrite(LED1,HIGH);
delay(100);
digitalWrite(LED1,LOW);
delay(100);
}
}
if(message=="1001")
{
message="";
digitalWrite(LED1,LOW);
delay(100);
} ผลปรากฏว่าเมื่อส่ง คำสั่ง1000ไป ไฟจะกระพริบติดดับ200ครับจนกว่าจะครบรอบ ถ้าส่งโค้ด1001ไประหว่างที่LED1กระพริบอยู่มันจะไม่เข้าเลย ไฟก็ไม่ดับ มันจะดับเมื่อคำสั่งforมันวนครบรอบ ถ้าผมไม่ใช่for มันก็ไม่กระพริบตลอดอะ
ถ้าผมใช้
if(message=="1000")
{
message="";
digitalWrite(LED1,HIGH);
delay(100);
digitalWrite(LED1,LOW);
delay(100);
}
if(message=="1001")
{
message="";
digitalWrite(LED2,LOW);
delay(100);
}
delay(100);
} ถ้าผมใช้โค้ดนี้มันก็กดส่งคำสั่งครั้งเดียวมันจะกระพริบแปปเดียวแล้วก้อดับ ถ้าอยากให้มันกระพริบตลอดก็ต้องกดค้าง
คือ ผมอยากให้แบบว่า ส่งคำสั่ง1000ครั้งเดียว แล้วให้LED1กระพริบตลอด ถ้าส่ง 1001 มันจะดับเงี๊ยะ มันทำแบบนี้ได้รึป่าวครับ
ทำได้หลายแบบ อาจจะใช้ตัวแปรเก็บสถานะการทำงาน แล้วใช้ if เปรียบเทียบค่าที่ได้ เอาไปเปรียบเทียบกับสถานะการทำงานครับ
อ๋อครับผม ขอบคุณมากๆครับผม :D