?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

아두이노 보드간 RF통신 관련 질문입니다~~

페이지 정보

작성자 깜비 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일16-05-23 19:39 조회1,104회 댓글1건

본문

안녕하세요

사용하는 보드는 아두이노 mega입니다.

현재 보드간 nRF24l01 모듈을 이용한 RF통신을 하려고하는데 

수신부에서 전혀 받지를 못하네요. 소스 어느 부분이 잘못되있는건가요?ㅠㅠ

송신부에서 char c를 전송하는 소스입니다.

(GPS정보를 RF신호로 전송하는 코드입니다)

 

송신부, 수신부 소스 첨부하겠습니다.

/송신부

#include <SPI.h> 

#include <nRF24L01.h> 

#include <RF24.h> 

#define CE_PIN 9 

#define CSN_PIN 10 

const uint64_t pipe = 0xE8E8F0F0E1LL;  //rf 파이프

RF24 radio(CE_PIN, CSN_PIN);  

 

#define powerpin 4

#define BYTE 1

// GPS parser for 406a

#define BUFFSIZ 90 

char buffer[BUFFSIZ]; //수신 문자열 저장

char *parseptr;

char buffidx;

uint8_t hour, minute, second, year, month, date;

uint32_t latitude, longitude;

uint8_t groundspeed, trackangle;

char latdir, longdir;

char status;

 

void setup() 

  if (powerpin) {

    pinMode(powerpin, OUTPUT);

  }

  pinMode(13, OUTPUT);

  Serial.begin(9600);

  Serial1.begin(9600);

/////////////////////////////////

 radio.begin(); 

 radio.openWritingPipe(pipe); 

 /////////////////////////////////////  

  

  // prints title with ending line break 

  Serial.println("GPS parser"); 

 

   digitalWrite(powerpin, LOW);         // pull low to turn on!

 

 

void loop() 

  uint32_t tmp;

  

 // Serial.print("\n\rread: ");

  readline();

// Serial.println(buffer);

  

  // check if $GPRMC (global positioning fixed data)

  if (strncmp(buffer, "$GPRMC",6) == 0) {

    

    // hhmmss time data

    parseptr = buffer+7;

    tmp = parsedecimal(parseptr); 

    hour = (tmp / 10000)+9; //한국시간

    minute = (tmp / 100) % 100;

    second = tmp % 100;

    

    parseptr = strchr(parseptr, ',') + 1;

    status = parseptr[0];

    parseptr += 2;

    

    // grab latitude & long data

    // latitude

    latitude = parsedecimal(parseptr);

    if (latitude != 0) {

      latitude *= 10000;

      parseptr = strchr(parseptr, '.')+1;

      latitude += parsedecimal(parseptr);

    }

    parseptr = strchr(parseptr, ',') + 1;

    // read latitude N/S data

    if (parseptr[0] != ',') {

      latdir = parseptr[0];

    }

    

    //Serial.println(latdir);

    

    // longitude

    parseptr = strchr(parseptr, ',')+1;

    longitude = parsedecimal(parseptr);

    if (longitude != 0) {

      longitude *= 10000;

      parseptr = strchr(parseptr, '.')+1;

      longitude += parsedecimal(parseptr);

    }

    parseptr = strchr(parseptr, ',')+1;

    // read longitude E/W data

    if (parseptr[0] != ',') {

      longdir = parseptr[0];

    }

    

 

    // groundspeed

    parseptr = strchr(parseptr, ',')+1;

    groundspeed = parsedecimal(parseptr);

 

    // track angle

    parseptr = strchr(parseptr, ',')+1;

    trackangle = parsedecimal(parseptr);

 

 

    // date

    parseptr = strchr(parseptr, ',')+1;

    tmp = parsedecimal(parseptr); 

    date = tmp / 10000;

    month = (tmp / 100) % 100;

    year = tmp % 100;

    Serial.println("GPS");

 

  }

 

}

 

uint32_t parsedecimal(char *str) {

  uint32_t d = 0;

  

  while (str[0] != 0) {

   if ((str[0] > '9') || (str[0] < '0'))

     return d;

   d *= 10;

   d += str[0] - '0';

   str++;

  }

  return d;

}

 

void readline(void) {

  char c;

  

  buffidx = 0; // start at begninning

  while (1) {

      c = Serial1.read();

      if (c == -1)

        continue;

      Serial.print(c);

      if (c == '\n')

        continue;

      if ((buffidx == BUFFSIZ-1) || (c == '\r')) {

        buffer[buffidx] = 0;

        return;

        radio.write(&c,sizeof(c)); //RF 신호전송 

      }

      buffer[buffidx++]= c;

  }

}

 

/수신부

#include <SPI.h> 

#include <nRF24L01.h> 

#include <RF24.h> 

#define CE_PIN 9 

#define CSN_PIN 10 

 

 

const uint64_t pipe = 0xE8E8F0F0E1LL; 

 

 

RF24 radio(CE_PIN, CSN_PIN); 

int valarray[2]; 

 

 

 

void setup() 

 

 

 Serial.begin(9600); 

 delay(1000); 

 Serial.println("Nrf24L01 Receiver Starting"); 

 radio.begin(); 

 radio.openReadingPipe(1,pipe); 

 radio.startListening(); 

 

 

void loop() 

  char c;

 if ( radio.available() ) { 

 

 bool done = false; 

 while (!done) { 

 done = radio.read( &c, sizeof(c) ); 

 

 Serial.print("GPS = "); 

 Serial.println(c); 

 

 

 } 

 

 } else { 

 

 Serial.println("No radio available"); 

 

 } 

 

 

댓글목록