본문 바로가기
기술정보 및 자료/EBIMU-9DOFV5

아두이노 예제

아두이노 연결도

 

아두이노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가 켜지도록 하는 예제 입니다.