정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 nRF24L01 모듈관련
smin614 | 2019-12-12
 

1. 프로젝트 사용한 보드 종류

  아두이노 UNO 보드

 

 

2. 사용한 개발 프로그램명

  아두이노 IDE

 

 

3. 사용한 센서 모델명

  nRF24L01, 스위치 2, LED2

 

 

4. 연결한 회로 설명 (또는 이미지)

   

 

5. 소스코드 (주석 필수)

  

#include

#include
#include
#include
#include

RF24 radio(7, 8); // SPI 버스에 nRF24L01 라디오를 설정하기 위해 CE, CSN를 선언.
const byte address[6] = "00001"; //주소값을 5가지 문자열로 변경할 수 있으며, 송신기와 수신기가 동일한 주소로 해야됨.
int msg = 0; // RF 송수신
int key1 = 2; // 버튼1
int key2 = 4; // 버튼2
int led1 = 3;
int led2 = 5;
  
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.setPALevel(RF24_PA_MIN); //전원공급에 관한 파워레벨을 설정합니다. 모듈 사이가 가까우면 최소로 설정합니다.
//거리가 가까운 순으로 RF24_PA_MIN / RF24_PA_LOW / RF24_PA_HIGH / RF24_PA_MAX 등으로 설정할 수 있습니다.
  radio.openWritingPipe(address);
  radio.stopListening();
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(key1, INPUT);
  pinMode(key2, INPUT);
}

void loop() {
  Serial.print("Msg : ");
  
  if(digitalRead(key1)==HIGH) { //버튼1누름
    digitalWrite(led1, HIGH);
    msg = 1;
    Serial.println(msg);
  } else if(digitalRead(key2)==HIGH) { //버튼 2누름
    digitalWrite(led2, HIGH);
    msg = 2;
    Serial.println(msg);
  } else {
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    msg = 0;
  }
  radio.write(&msg, sizeof(msg));
  delay(100);
}

 

 

6. 문제점 및 에러 내용

  RF통신을 시도해보다가 막혀서 질문드립니다.

  두개의 nRF24L01모듈을 송수신하는데까지는 성공했습니다. (송신의 시리얼모니터에서 1을 입력하면 수신의 시리얼모니터에서 1이 나오도록)

  추가로 버튼을 연결하여 버튼1을 누르면 1이라는 숫자를 전송하고, 2를 누르면 2라는 숫자를 전송하도록 하려 합니다. LED는 버튼이 잘 눌러졌는지, 시각적으로 확인하려고 달았습니다. 그런데 UNO보드에 업로드를 하니 아래 그림과 같이 자기마음대로 숫자를 전송합니다.

  왜그런걸까요..? 그리고 제가 원하는 것 처럼 버튼을 눌렀을때만 1, 2를 전송하고 그 외 경우는 0을 전송하려면 어떻게 해야하나요??

 

******* 추가 ********

버튼 2와 관련된 코딩을 지우고 지켜본 결과,

1. 아무 버튼도 누르지 않고 있을 경우, 0, 1중 랜덤한 숫자가 출력되는 듯 하다. 즉, LED도 점등과 소등을 반복한다.

2. 버튼을 누를경우, 1의 숫자만 출력되고 따라서 LED는 점등상태를 유지한다.

3. 버튼에서 손을 떼면 다시 첫번째와 같은 상태가 유지된다.

 
이전글   |    WeMos D1 R1 서버 문제 2019-12-09
다음글   |    아두이노 스텝모터가 한방향으로만 돕니다...... 2019-12-13