lnwshop logo
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

ขอความช่วยเหลือหน่อยครับเรื่องNRF24L01

Jeerawat Songruksa 11 เดือนที่ผ่านมา

ผมเห็นโค้ดตัวอย่างตามนี้

#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หรอครับ
ขอรบกวนๆพวกพี่ๆช่วยผมหน่อยครับโปรเจคเทอมนี้เทอมสุดท้ายผมกลัวเรียนไม่จบครับ

QUOTE 
ความคิดเห็นที่ #1
(Guest)
tama1580 (Guest)
IP: 180.180.13.x
11 เดือนที่ผ่านมา

 

ลอง

1.  message="";  ตัดบรรทัดนี้ออก

2.  if(receiver.read()==1000) ==> if(message==1000)  เปลี่ยนดู

QUOTE 
ความคิดเห็นที่ #2
เจ้าของร้าน
เจ้าของร้าน
11 เดือนที่ผ่านมา

ถ้าดัดแปลงจากโคดนี้ ค่าที่ส่งมาจากอีกฝั่งส่งมาที่ตัวแปร message เป็นตัวแปรแบบ string

receiver.rxPL(message); // สั่งใหอ่านเก็บไว้ที่ตัวแปร

    Serial.println(message);

    message=""; 

ดังนั้นการเปรียบเทียบต้องเปรียบเทียบแบบ string ประมาณนี้ครับ

if(message=="1000")

{

     digitalWrite(2,HIGH);

}

ข้อมูลเพิ่มเติม การเปรียบเทียบ string ตามนี้ครับ https://www.arduino.cc/en/Tutorial/StringComparisonOperators

QUOTE 
ความคิดเห็นที่ #3
Jeerawat Songruksa 11 เดือนที่ผ่านมา

ขอบคุณพี่ๆทั้ง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 มันจะดับเงี๊ยะ มันทำแบบนี้ได้รึป่าวครับ 

QUOTE 
ความคิดเห็นที่ #4
เจ้าของร้าน
เจ้าของร้าน
11 เดือนที่ผ่านมา

ทำได้หลายแบบ อาจจะใช้ตัวแปรเก็บสถานะการทำงาน แล้วใช้ if เปรียบเทียบค่าที่ได้ เอาไปเปรียบเทียบกับสถานะการทำงานครับ

QUOTE 
ความคิดเห็นที่ #5
Jeerawat Songruksa 11 เดือนที่ผ่านมา

อ๋อครับผม ขอบคุณมากๆครับผม :D Sealed

QUOTE 
ความคิดเห็นที่ #6
เจ้าของร้าน
เจ้าของร้าน
11 เดือนที่ผ่านมา

ยินดีครับ

1
แสดงความคิดเห็นที่ 1-6 จากทั้งหมด 6 ความคิดเห็น
ชื่อ
อีเมล
ข้อความ
  • ตอบกระทู้

หมวดหมู่สินค้า

สมาชิก Arduino All

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

Arduino All ขายดี

รหัสสินค้า A015
300.00 บาท
  • สั่งซื้อ
รหัสสินค้า A233
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A115
10.00 บาท
  • สั่งซื้อ
รหัสสินค้า A238
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A237
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A014
90.00 บาท
  • สั่งซื้อ
รหัสสินค้า A225
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A474
7.00 บาท
  • สั่งซื้อ
รหัสสินค้า A097
4.00 บาท
  • สั่งซื้อ
Go to Top