NRF24 radio modülleri alıcı ve verici olarak kullanılabilir. Modüllerin hangisinin alıcı hangisinin verici olduğu mikroişlemciye yazılan kod ile ilgili. Burda yapmaya çalıştığımız ise 2 arduino kartı birbiri ile haberleştirilecek ve senkron şekilde ilgili pinlere bağlı ledler yakılıp söndürülecek.Gerisi artık sizin neleri haberleştireceğinize kalmış diyebilirim.
NRF24 modülü alıcı olarak kullanıldığı durumda veri aktarım hızı 2Mbps iken 12.3 mA , verici olarak kullanıldığında 11.3 mA akım çekmektedir. Multireceiver olarak kullanılabilir ve 6 farklı vericiden 6 farklı adres ile bir modül veri alışverişinde bulunabilir.
Adresler datasheete göre şöyle de gösterilmiştir:
Pin açıklamaları ( yani ben öyle bağladım )
NF24L01
ARDUINO UNO
Chip Enable- Modülün alıcı yada verici olarak kullanılmasını ayarladığımız pin.
CE (CS)
9
SPI chip select
CSN
10
SPI clock
SCK
13
SPI slave data input
MOSI
11
SPI slave data output
MISO
12
Besleme (+1.9V – 3.6V DC)
VCC
3.3V
Besleme ground
GND
GND
Ve de kodlar;
Verici tarafın kaynak kodu:
///// verici kısımdan gönderşlen ledin yanıp yanmadığının bilgisi karşı tarafa iletilir
#include <SPI.h> // kütüphaneler eklendi
#include <RF24.h>
#define LED 5 // 5. pine led bağlanmıştır
#define RF_CS 9 // RF24 üzerindeki CS pininin (bazı modellerde CE diye yazılmaktadır) arduino ya takıldığı pin numarası verilmiştir
#define RF_CSN 10 // RF24 üzerindeki CSN pininin arduino ya takıldığı pin numarası verilmiştir
RF24 radio(RF_CS, RF_CSN); // RF24 türünde radio isimli değişken tanımlandı
const uint64_t pipes[2] = { 0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL }; // paralel veri yolu adresleri
boolean durum =false;
void setup() {
Serial.begin(9600); // seri haberleşme hızı
pinMode(LED, OUTPUT);
radio.begin(); // rf24 haberleşmesi başlatıldı
radio.openWritingPipe(pipes[0]); // modülün verici olarak kullanılması için gerekli olan data yolu adresini haberleşmeye açar. Yani 0xe7e7e7e7e7LL adresi veriyi gönderen kısım.
//Bunu karşı taraf 0xc2c2c2c2c2LL adresi ile alır
radio.openReadingPipe(1, pipes[1]); // modülün alıcı olarak kullanılması için gerekli olan data yolu adresini haberleşmeye açar. Yani 0xc2c2c2c2c2LL adresi veriyi alan kısım.
//Yani veri karşıdaki 0xe7e7e7e7e7LL adresinden alınır
radio.startListening(); // radio modüllerinden veri gelinip gelinmediğini kontrol eetmektedir.
radio.printDetails();
}
void loop() {
unsigned long time = millis(); // programın çalışma süresinin tutulduğu değişken
// belli bir sürede modüllerin birbiri ile haberleşmediği durumlarda uyarı vermesi için kullanılacaktır
uint8_t on[1],off[1];
on[0]=1;
off[0]=0;
radio.stopListening();
if(!durum)
{
digitalWrite(LED,HIGH); // led yandığında karşı tarafın ledi sonecek
radio.write( &on,sizeof(on));
durum= true;
}
else
{
digitalWrite(LED,LOW);
radio.write( &off,sizeof(off));
durum=false;
}
radio.startListening();
delay(1000);
}
Alıcı tarafın kaynak kodu:
/// verici tarafından gelen data bilgisi alıcı tarafından alındığında;verici tarafındaki led durumuna göre yandığında kapatılacak söndüğünde açılacak
#include <SPI.h>
#include <RF24.h>
#define led 3
#define RF_CS 9
#define RF_CSN 10
RF24 radio(RF_CS, RF_CSN);
const uint64_t pipes[2] = { 0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL }; // paralel veri yolu adresleri
bool done = false;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
radio.begin();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
radio.startListening();
radio.printDetails();
}
/// verici tarafından gelen data bilgisi alıcı tarafından alındığında;verici tarafındaki led durumuna göre yandığında kapatılacak söndüğünde açılacak
#include <SPI.h>
#include <RF24.h>
#define led 3
#define RF_CS 9
#define RF_CSN 10
RF24 radio(RF_CS, RF_CSN);
const uint64_t pipes[2] = { 0xe7e7e7e7e7LL, 0xc2c2c2c2c2LL }; // paralel veri yolu adresleri
bool done = false;
void setup() {
Serial.begin(9600);
pinMode(led, OUTPUT);
radio.begin();
radio.openWritingPipe(pipes[1]);
radio.openReadingPipe(1, pipes[0]);
radio.startListening();
radio.printDetails();
}
void loop() {
if (radio.available()) {
char rx_data[1]; // gelen verinin dizi sayısı 1. Çünkü ya 0 gelecek yada 1 gelecek
radio.read( &rx_data, 1 );
if(rx_data[0]==1)
{
Serial.print("Sonsun: ");
Serial.println(rx_data[0]);
digitalWrite(led,LOW);
}
if(rx_data[0]==0)
{
digitalWrite(led,HIGH);
Serial.print("Yansin: ");
}
}
}
}
}




Hiç yorum yok :
Yorum Gönder