정보나눔

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

지그비 통신시 데이터 전송 문제
A두인오 | 2017-06-02

안녕하세요 현재 지그비S1과 cytron사의 지그비 쉴드를 이용해서

모터정역 정지, 회전속도 조절을 하려고 합니다.

 

코디네이터에서 가변저항과 푸쉬버튼을 이용해서 데이터를 전송하고

엔드디바이스에서 데이터를 받아서 모터로 출력하려고 합니다.

 

그런데 데이터를 송신할 때는 순서대로 송신되고

XCTU를 이용해서 수신측으로 들어오는 데이터를 봐도 순서대로 수신이 되고있는데

이 데이터를 배열로 넣으면 순서가 뒤죽박죽이 되거나 아날로그값이 계속 받아졌다가 디지털 값이 받아졌다 하는

현상이 생깁니다.

배열에 순서대로 들어오면 buff_data[0] 과 buff_data[1]에 들어온 데이터를 갖고 모터제어를 하면 될것같은데

 

왜 배열로 넣음 순서가 차례로 들어오던게 순서가 섞이게 되나요?

해결법 알려주시면 감사하겠습니다 ㅠ

 

//송신부

#include <SoftwareSerial.h>
SoftwareSerial xbee (2, 3);
int digitaldata;

void setup() {
  Serial.begin(19200);
  xbee.begin(19200);
  pinMode(4, INPUT_PULLUP);

}

void loop() {

  int analogdata = map(analogRead(0), 0, 1023, 0, 255);
  digitaldata = digitalRead(4);

  xbee.write(analogdata);
  xbee.write(digitaldata);
  Serial.print("anal : "); Serial.println(analogdata);
  Serial.print("digital : "); Serial.println(digitaldata);

}

=========================================================================
//수신부

#include <SoftwareSerial.h>
SoftwareSerial xbee (2, 3);

int buff_data[2];
int index = 0;
int digitaldata;

void setup() {
  Serial.begin(19200);
  xbee.begin(19200);
  pinMode(6, OUTPUT);
  pinMode(13, OUTPUT);

}

void loop() {
  if (xbee.available() > 0) {
    int Receiver = xbee.read();
    digitaldata = 0;

    Serial.print("data 0 : "); Serial.println(buff_data[0]);
    Serial.print("data 1 : "); Serial.println(buff_data[1]);

    if (index > 2) {
      index = 0;
      analogWrite(6, buff_data[0]);
      digitaldata = buff_data[1]; 
      
    }
    else {
    buff_data[index] = Receiver;
    index++;
    
    }
   
  }

}

 

 

 

 

이전글   |    시작에 관하여.. 2017-06-01
다음글   |    센서로 서보모터제어하기 2017-06-02