아두이노 연결도


아두이노UNO의 하드웨어 시리얼포트는 1개 이고 프로그램 업로드시 시리얼포트(TX,RX)가 사용됩니다. 

따라서 아두이노에 스케치 업로드시 DATA(EBIMU TX)를 연결하지 않은 상태로 업로드해야 합니다.

업로드 완료후 DATA(EBIMU TX)를 연결해야 합니다.




라이브러리

////////////////////////////////////////////////////////////////////
/////////////////////// EBIMU FUNCTION /////////////////////////////
#define SBUF_SIZE 64
 
char sbuf[SBUF_SIZE];
signed int sbuf_cnt=0;
 
int EBimuAsciiParser(float *item, int number_of_item)
{
  int n,i;
  int rbytes;
  char *addr; 
  int result = 0;
  
  rbytes = Serial.available();
  for(n=0;n<rbytes;n++)
  {
    sbuf[sbuf_cnt] = Serial.read();
    if(sbuf[sbuf_cnt]==0x0a)
       {
           addr = strtok(sbuf,",");
           for(i=0;i<number_of_item;i++)
           {
              item[i] = atof(addr);
              addr = strtok(NULL,",");
           }
 
           result = 1;
       }
     else if(sbuf[sbuf_cnt]=='*')
       {   sbuf_cnt=-1;
       }
 
     sbuf_cnt++;
     if(sbuf_cnt>=SBUF_SIZE) sbuf_cnt=0;
  }
  
  return result;
}
/////////////////////// EBIMU FUNCTION /////////////////////////////
////////////////////////////////////////////////////////////////////
cs



int EBimuAsciiParser(float *item, int number_of_item) 함수설명 


[parameter]

item : 수신된 데이터를 저장할 주소를 입력합니다.

number_of_item : EBIMU의 1PACEKT 당 수신 항목 수를 입력합니다. 

                       예) euler3축 출력 : 3

                       예) euler3축,가속도3축 출력 : 6


[return값]

리턴값은 0 또는 1입니다. 데이터를 수신하여 item내용이 갱신되었을 경우 1을 리턴합니다. 

갱신된 내용이 없을 경우 0을 리턴합니다.



#define SBUF_SIZE 64

센서로 부터 수신된 1packet(1줄)을 저장하는 버퍼의 크기를 지정합니다.

1packet(1줄)당 수신되는 최대 바이트수 보다 크게 설정해야 합니다.





예제1. roll,pitch,yaw각을 수신하여 시리얼모니터 또는 시리얼플로터에 출력하기


imu_test.ino


void setup() {
  Serial.begin(115200);
}
 
void loop() {
  float euler[3];
  
  if(EBimuAsciiParser(euler, 3))
  {
     Serial.print("\n\r");
     Serial.print(euler[0]);   Serial.print(" ");
     Serial.print(euler[1]);   Serial.print(" ");
     Serial.print(euler[2]);   Serial.print(" ");
  }
}

cs


euler angle 3항목을 수신 후 ' '로 구분하여 화면에 출력하는 예제입니다. 

아두이노툴의 시리얼모니터 또는 시리얼플로터에 출력하여 볼수 있습니다.






예제2. roll과 pitch가 -5도에서 +5도 이내일 경우 아두이노 보드의 LED 켜기


imu_test2.ino


void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
}
 
void loop() {
  float euler[3];
  
  EBimuAsciiParser(euler, 3);
  
  if((euler[0]<5)&&(euler[0]>-5)&&(euler[1]<5)&&(euler[1]>-5)) digitalWrite(LED_BUILTIN, HIGH);
  else digitalWrite(LED_BUILTIN, LOW);
   
}

cs


euler angle 3항목을 수신 후 roll과 pitch가 -5도에서 +5도 이내일 경우 아두이노 보드의 LED가 켜지도록 하는 예제 입니다.



'기술정보 및 자료 > EBIMU-9DOFV3' 카테고리의 다른 글

아두이노 예제  (0) 2016.10.06
EBIMU-9DOFV3 지자기간섭 방지 설정  (0) 2016.02.23
EBIMU-9DOFV3 지자기센서 캘리브레이션  (0) 2016.02.23
EBIMU V3 VIEWER & EBIMU Viewer  (0) 2016.02.23
USB 드라이버  (0) 2016.02.23
EBIMU-9DOFV3 매뉴얼  (0) 2016.02.22
Posted by E2BOX


티스토리 툴바