본문 바로가기

Arduino

NRF24L01 다중연결 통신

3대의 송신기와 하나의 수신기로 작동하는 걸 만들어 봅니다. 연결은 아래와 같습니다. 버튼은 6번 핀에 연결하고 수신쪽 led는 4,5,6번에 연결했습니다.

SCK -> 13
MISO -> 12
MOSI -> 11
CSN -> 10
CE -> 9

송신쪽에서 버튼을 누르면 각각에 해당하는 led에서 불이 들어오고 다시 누르면 꺼지는 토글방식입니다. 3가지 전부 불이 들어오는 이미지입니다.


// Load up the libraries
#include 
#include 
#include 
// define the pins
#define CE_PIN   9
#define CSN_PIN 10
 
// Create a Radio
RF24 radio(CE_PIN, CSN_PIN); 
 
// Single radio pipe address for the 2 nodes to communicate.
//const byte rxAddr[6] = "00001";
const uint64_t pipe = 0xF0F0F0F011LL;
 
int LEDpins[3] = {4, 5, 6 };
int ledState[3] = {0, 0, 0};
int senderId = -1;
 
void setup()
{
  for (int i = 0; i < 3; i++) 
  {
    pinMode(LEDpins[i], OUTPUT);
    digitalWrite(LEDpins[i], LOW);
  }
 
  // Start the serial
  Serial.begin(9600);
  while(!Serial);
  Serial.println("NRF24L01P Receiver Starting...");
  
  // Start the radio.
  radio.begin();
  // Power setting
  radio.setPALevel(RF24_PA_HIGH);   // RF24_PA_MIN ,RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate( RF24_250KBPS ); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
  
  // Set the reading pipe and start listening
  radio.openReadingPipe(0, pipe);
  radio.startListening();
  
}
 
void loop()
{
  if (radio.available())
  {
    // the buffer to store the received message in
//    char senderId[10] = {0};
    
    radio.read(&senderId, 2);
    
    ledState[senderId] = !ledState[senderId];
    
    // Print the message out to the COM window
    Serial.println("Received Message: ");
    Serial.print(senderId);
    Serial.println("");
  }
  for (int i = 0; i < 3; i++) 
  {
    digitalWrite(LEDpins[i], ledState[i]);
  }
}

// Load in the libraries
#include 
#include 
#include 
#include  
 
// Set the CE & CSN pins
#define CE_PIN   9
#define CSN_PIN 10
 
// Single radio pipe address for the 2 nodes to communicate.
const uint64_t pipe = 0xF0F0F0F011LL;
 
// Create a Radio
RF24 radio(CE_PIN, CSN_PIN); 
 
const byte ON_PIN = 6;
 
Button onBtn(ON_PIN);    // define the buttons
 
// CHANGE THIS PER EACH TRANSMITTER, from 0 to 2
const byte transmitterId = 2;
 
void setup() {
 
  onBtn.begin();
  // Start up the Serial connection
  while (!Serial);
  Serial.begin(9600);
  
  // Start the Radio!
  radio.begin();
  
  // Power setting
  radio.setPALevel(RF24_PA_HIGH); // RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  
  // Slower data rate for better range
  radio.setDataRate( RF24_250KBPS ); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
  
  // Stop listening, so we can send!
  radio.stopListening();
  
  // Number of retries
  radio.setRetries(15, 15);
 
  radio.openWritingPipe(pipe);
 
}
 
void loop() {
  onBtn.read();
 
  if (onBtn.wasPressed()) 
  {
    radio.write(&transmitterId, 2);
    Serial.println(transmitterId);
  }
  // Wait a short while before sending the other one
  delay(100);
 
}

'Arduino' 카테고리의 다른 글

Arduino Mega Camera  (0) 2019.01.08
NRF24L01 통신하기  (0) 2019.01.08
74HC595 쉬프트 레지스터 사용하기  (0) 2019.01.08
IR Remote Test  (0) 2019.01.08
32×8 Matrix LED 시계  (0) 2019.01.07