News Download Tutorial FAQ Reference Buy

C 언어 : 함수

개요
햄스터 로봇을 제어하기 위한 함수를 정의합니다.

햄스터 로봇을 구성하는 각 디바이스의 데이터는 정수형 배열 또는 실수형 배열로 선언되어 있습니다. 각 디바이스의 데이터 형과 배열 크기, 값의 범위는 디바이스에 따라 다르며, 상수 값 페이지를 참고하기 바랍니다.

햄스터 로봇을 제어하기 위해서는 다음과 같이 해당 디바이스의 ID를 사용하여 read 또는 write 계열의 함수를 호출하면 됩니다.

int main(int argc, char *argv[]) {
    int left_proximity;
    int acceleration_x, acceleration_y, acceleration_z;

    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 왼쪽 근접 센서 값을 읽는다.
    left_proximity = hamster_read(HAMSTER_LEFT_PROXIMITY);
    // X축 가속도 값을 읽는다.
    acceleration_x = hamster_read_at(HAMSTER_ACCELERATION, 0);
    // Y축 가속도 값을 읽는다.
    acceleration_y = hamster_read_at(HAMSTER_ACCELERATION, 1);
    // Z축 가속도 값을 읽는다.
    acceleration_z = hamster_read_at(HAMSTER_ACCELERATION, 2);
    // 왼쪽 바퀴의 속도를 30으로 한다.
    hamster_write(HAMSTER_LEFT_WHEEL, 30);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
공통 함수
버전 1.0부터
void hamster_dispose_all(void)
모든 햄스터 로봇에 대한 메모리를 해제하고 통신 연결을 종료한다.

프로그램을 종료하기 전에 반드시 호출해야 한다.
버전 1.0부터
void hamster_wait(int milliseconds)
1000분의 1초 단위로 주어진 시간(msec)동안 기다린다.

파라미터:
  • milliseconds: 기다릴 시간 [msec]
하나의 로봇만 제어하는 함수
버전 1.0부터
void hamster_create(void)
필요한 메모리를 할당하고 햄스터 로봇과 통신으로 연결한다.
버전 1.0부터
int hamster_e(int device_id)
ID가 device_id인 디바이스의 데이터가 갱신되었는지 확인한다.

센서 또는 이펙터 디바이스는 데이터가 계속 갱신되기 때문에 확인할 필요가 없지만, 커맨드 또는 이벤트 디바이스는 데이터를 읽기 전에 반드시 hamster_e 함수를 사용하여 데이터가 갱신되었는지 확인해야 한다. 그렇지 않으면 커맨드 또는 이벤트가 발생한 시점을 알 수가 없기 때문에 현재 발생한 커맨드 또는 이벤트의 데이터가 아니라 과거에 발생하였던 커맨드 또는 이벤트의 데이터를 읽을 수도 있다.

파라미터:
  • device_id: 확인할 디바이스의 ID

반환 값:
    디바이스의 데이터가 갱신되었으면 1, 아니면 0

int main(int argc, char *argv[]) {
    int state = 0;

    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    if(hamster_e(HAMSTER_LINE_TRACER_STATE) == 1) { // 데이터가 갱신되었는지 확인한다.
        state = hamster_read(HAMSTER_LINE_TRACER_STATE); // 데이터를 읽는다.
    }

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
const char* hamster_get_address(void)
연결된 햄스터 로봇의 블루투스 MAC 주소를 반환한다.

반환 값:
    블루투스 MAC 주소
버전 1.0부터
const char* hamster_get_name(void)
햄스터 로봇의 이름을 반환한다.

반환 값:
    햄스터 로봇의 이름
버전 1.0부터
const char* hamster_get_port_name(void)
USB to BLE Bridge 동글의 시리얼 포트 이름을 반환한다.

반환 값:
    시리얼 포트 이름
버전 1.0부터
int hamster_read(int device_id)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 정수 값으로 반환한다.

디바이스의 데이터 배열 크기가 0인 경우에는 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID

반환 값:
    디바이스의 데이터 또는 0

int main(int argc, char *argv[]) {
    int value = 0;

    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 왼쪽 근접 센서 디바이스의 데이터를 읽는다.
    value = hamster_read(HAMSTER_LEFT_PROXIMITY);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_read_array(int device_id, int* data, int length)
ID가 device_id인 디바이스의 데이터 배열을 정수형 배열 data에 복사하고, 복사한 데이터의 개수를 반환한다.

디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 큰 경우에는 data 배열의 크기(length)만큼만 복사한다. 디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 작은 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열을 복사할 정수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수

int main(int argc, char *argv[]) {
    int data[3];

    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 가속도 센서 디바이스의 데이터를 모두 읽는다.
    hamster_read_array(HAMSTER_ACCELERATION, data, 3);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_read_at(int device_id, int index)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 있는 데이터를 정수 값으로 반환한다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스

반환 값:
    디바이스의 데이터 또는 0

int main(int argc, char *argv[]) {
    int value;

    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 가속도 센서 디바이스의 Y축 가속도 데이터를 읽는다.
    value = hamster_read_at(HAMSTER_ACCELERATION, 1);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
float hamster_read_float(int device_id)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 실수 값으로 반환한다.

디바이스의 데이터 배열 크기가 0인 경우에는 0.0을 반환한다.

파라미터:
  • device_id: 디바이스 ID

반환 값:
    디바이스의 데이터 또는 0.0
버전 1.0부터
int hamster_read_float_array(int device_id, float* data, int length)
ID가 device_id인 디바이스의 데이터 배열을 실수형 배열 data에 복사하고, 복사한 데이터의 개수를 반환한다.

디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 큰 경우에는 data 배열의 크기(length)만큼만 복사한다. 디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 작은 경우에는 디바이스의 데이터 배열만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열을 복사할 실수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
float hamster_read_float_at(int device_id, int index)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 있는 데이터를 실수 값으로 반환한다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 0.0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스

반환 값:
    디바이스의 데이터 또는 0.0
버전 1.0부터
void hamster_reset(void)
모든 디바이스의 데이터를 초기화한다.
버전 1.0부터
void hamster_set_executable(void (*execute)(int hamster_index))
약 20msec마다 호출되는 콜백 함수를 등록한다.

콜백 함수는 void function_name(int hamster_index)의 형태를 가져야 한다. 등록된 콜백 함수 내에서 write 계열의 함수를 통해 디바이스에 쓴 데이터는 모두 같은 통신 패킷으로 전달되는 것이 보장된다.
햄스터 로봇으로부터 센서 데이터를 받은 후 등록된 콜백 함수를 호출하고, 그 후에 햄스터 로봇에게 명령을 전달한다. 등록된 콜백 함수는 약 20msec마다 호출되는데, 콜백 함수 내에서 hamster_wait 등의 함수를 사용하여 시간을 끌면 안 되고 콜백 함수 내에서 구현된 부분은 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • execute: 등록할 콜백 함수

void execute(int hamster_index) {
    int left_proximity = hamster_read(HAMSTER_LEFT_PROXIMITY);
    hamster_write(HAMSTER_LEFT_WHEEL, 30);
}

int main(int argc, char *argv[]) {
    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 콜백 함수를 등록한다.
    hamster_set_executable(execute);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
void hamster_set_name(const char* name)
햄스터 로봇의 이름을 name으로 설정한다.

파라미터:
  • name: 설정할 이름
버전 1.0부터
int hamster_write(int device_id, int data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 정수 값 data를 쓴다.

디바이스의 데이터 배열 크기가 0인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스에 쓸 정수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
    hamster_write(HAMSTER_LEFT_WHEEL, 30);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_array(int device_id, const int* data, int length)
ID가 device_id인 디바이스의 데이터 배열에 정수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 큰 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 작은 경우에는 data 배열의 크기(length)만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열에 복사할 정수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
int hamster_write_at(int device_id, int index, int data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 정수 값 data를 쓴다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스
  • data: 디바이스에 쓸 정수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
    hamster_write_at(HAMSTER_LEFT_WHEEL, 0, 30);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_float(int device_id, float data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 실수 값 data를 쓴다.

디바이스의 데이터 배열 크기가 0인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스에 쓸 실수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 버저 이펙터 디바이스의 데이터를 1046.50으로 한다.
    hamster_write_float(HAMSTER_BUZZER, 1046.50);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_float_array(int device_id, const float* data, int length)
ID가 device_id인 디바이스의 데이터 배열에 실수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 큰 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 작은 경우에는 data 배열의 크기(length)만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열에 복사할 실수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
int hamster_write_float_at(int device_id, int index, float data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 실수 값 data를 쓴다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스
  • data: 디바이스에 쓸 실수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 햄스터 로봇과 통신으로 연결한다.
    hamster_create();

    // 버저 이펙터 디바이스의 데이터를 1046.50으로 한다.
    hamster_write_float_at(HAMSTER_BUZZER, 0, 1046.50);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
여러 대의 로봇을 제어하는 함수
버전 1.0부터
void hamster_create_multi(int number_of_hamsters)
number_of_hamsters개의 햄스터 로봇에 대한 메모리를 할당하고 통신으로 연결한다.
각각의 로봇은 인덱스로 구분한다. number_of_hamsters를 3으로 한 경우, 첫 번째 로봇의 인덱스는 0, 두 번째 로봇의 인덱스는 1, 세 번째 로봇의 인덱스는 2이다.

파라미터:
  • number_of_hamsters: 제어할 햄스터 로봇의 개수
버전 1.0부터
int hamster_e_multi(int hamster_index, int device_id)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터가 갱신되었는지 확인한다.

센서 또는 이펙터 디바이스는 데이터가 계속 갱신되기 때문에 확인할 필요가 없지만, 커맨드 또는 이벤트 디바이스는 데이터를 읽기 전에 반드시 hamster_e_multi 함수를 사용하여 데이터가 갱신되었는지 확인해야 한다. 그렇지 않으면 커맨드 또는 이벤트가 발생한 시점을 알 수가 없기 때문에 현재 발생한 커맨드 또는 이벤트의 데이터가 아니라 과거에 발생하였던 커맨드 또는 이벤트의 데이터를 읽을 수도 있다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 확인할 디바이스의 ID

반환 값:
    디바이스의 데이터가 갱신되었으면 1, 아니면 0

int main(int argc, char *argv[]) {
    int state = 0;

    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 데이터가 갱신되었는지 확인한다.
    if(hamster_e_multi(1, HAMSTER_LINE_TRACER_STATE) == 1) {
        // 데이터를 읽는다.
        state = hamster_read_multi(1, HAMSTER_LINE_TRACER_STATE);
    }

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
const char* hamster_get_address_multi(int hamster_index)
인덱스가 hamster_index인 햄스터 로봇의 블루투스 MAC 주소를 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스

반환 값:
    블루투스 MAC 주소
버전 1.0부터
const char* hamster_get_name_multi(int hamster_index)
인덱스가 hamster_index인 햄스터 로봇의 이름을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스

반환 값:
    햄스터 로봇의 이름
버전 1.0부터
const char* hamster_get_port_name_multi(int hamster_index)
인덱스가 hamster_index인 햄스터 로봇에 대한 USB to BLE Bridge 동글의 시리얼 포트 이름을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스

반환 값:
    시리얼 포트 이름
버전 1.0부터
int hamster_read_array_multi(int hamster_index, int device_id, int* data, int length)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열을 정수형 배열 data에 복사하고, 복사한 데이터의 개수를 반환한다.

디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 큰 경우에는 data 배열의 크기(length)만큼만 복사한다. 디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 작은 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열을 복사할 정수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수

int main(int argc, char *argv[]) {
    int data[3];

    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 가속도 센서 디바이스의 데이터를 모두 읽는다.
    hamster_read_array_multi(1, HAMSTER_ACCELERATION, data, 3);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_read_at_multi(int hamster_index, int device_id, int index)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 있는 데이터를 정수 값으로 반환한다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스

반환 값:
    디바이스의 데이터 또는 0

int main(int argc, char *argv[]) {
    int value;

    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 가속도 센서 디바이스의 Y축 가속도 데이터를 읽는다.
    value = hamster_read_at_multi(1, HAMSTER_ACCELERATION, 1);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_read_float_array_multi(int hamster_index, int device_id, float* data, int length)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열을 실수형 배열 data에 복사하고, 복사한 데이터의 개수를 반환한다.

디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 큰 경우에는 data 배열의 크기(length)만큼만 복사한다. 디바이스의 데이터 배열 크기가 data 배열의 크기(length)보다 작은 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열을 복사할 실수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
float hamster_read_float_at_multi(int hamster_index, int device_id, int index)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 있는 데이터를 실수 값으로 반환한다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 0.0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스

반환 값:
    디바이스의 데이터 또는 0.0
버전 1.0부터
float hamster_read_float_multi(int hamster_index, int device_id)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 실수 값으로 반환한다.

디바이스의 데이터 배열 크기가 0인 경우에는 0.0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID

반환 값:
    디바이스의 데이터 또는 0.0
버전 1.0부터
int hamster_read_multi(int hamster_index, int device_id)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 정수 값으로 반환한다.

디바이스의 데이터 배열 크기가 0인 경우에는 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID

반환 값:
    디바이스의 데이터 또는 0

int main(int argc, char *argv[]) {
    int value;

    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 왼쪽 근접 센서 디바이스의 데이터를 읽는다.
    value = hamster_read_multi(1, HAMSTER_LEFT_PROXIMITY);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
void hamster_reset_multi(int hamster_index)
인덱스가 hamster_index인 햄스터 로봇에 대해 모든 디바이스의 데이터를 초기화한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
버전 1.0부터
void hamster_set_executable_multi(int hamster_index, void (*execute)(int hamster_index))
인덱스가 hamster_index인 햄스터 로봇에 대해 약 20msec마다 호출되는 콜백 함수를 등록한다.

콜백 함수는 void function_name(int hamster_index)의 형태를 가져야 한다. 등록된 콜백 함수 내에서 write 계열의 함수를 통해 디바이스에 쓴 데이터는 모두 같은 통신 패킷으로 전달되는 것이 보장된다.
햄스터 로봇으로부터 센서 데이터를 받은 후 등록된 콜백 함수를 호출하고, 그 후에 햄스터 로봇에게 명령을 전달한다. 등록된 콜백 함수는 약 20msec마다 호출되는데, 콜백 함수 내에서 hamster_wait 등의 함수를 사용하여 시간을 끌면 안 되고 콜백 함수 내에서 구현된 부분은 20msec 내에 모두 처리가 되도록 하여야 한다. 다른 로봇에 대해 같은 콜백 함수를 등록한 경우, 어느 로봇에 의해 콜백 함수가 호출되었는지는 콜백 함수가 호출될 때 전달되는 햄스터 로봇의 인덱스(hamster_index)로 구분할 수 있다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • execute: 등록할 콜백 함수

void execute(int hamster_index) {
    int left_proximity = hamster_read_multi(hamster_index, HAMSTER_LEFT_PROXIMITY);
    hamster_write_multi(hamster_index, HAMSTER_LEFT_WHEEL, 30);
}

int main(int argc, char *argv[]) {
    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 첫 번째 로봇의 콜백 함수를 등록한다.
    hamster_set_executable_multi(0, execute);
    // 두 번째 로봇의 콜백 함수를 등록한다.
    hamster_set_executable_multi(1, execute);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
void hamster_set_name_multi(int hamster_index, const char* name)
인덱스가 hamster_index인 햄스터 로봇의 이름을 name으로 설정한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • name: 설정할 이름
버전 1.0부터
int hamster_write_array_multi(int hamster_index, int device_id, const int* data, int length)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에 정수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 큰 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 작은 경우에는 data 배열의 크기(length)만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열에 복사할 정수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
int hamster_write_at_multi(int hamster_index, int device_id, int index, int data)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 정수 값 data를 쓴다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스
  • data: 디바이스에 쓸 정수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
    hamster_write_at_multi(1, HAMSTER_LEFT_WHEEL, 0, 30);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_float_array_multi(int hamster_index, int device_id, const float* data, int length)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에 실수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 큰 경우에는 디바이스의 데이터 배열 크기만큼만 복사한다. data 배열의 크기(length)가 디바이스의 데이터 배열 크기보다 작은 경우에는 data 배열의 크기(length)만큼만 복사한다. data 배열이 NULL인 경우, data 배열의 크기(length)가 0인 경우에는 복사하지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스의 데이터 배열에 복사할 실수형 배열
  • length: data 배열의 크기

반환 값:
    복사한 데이터의 개수
버전 1.0부터
int hamster_write_float_at_multi(int hamster_index, int device_id, int index, float data)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 실수 값 data를 쓴다.

index가 디바이스의 데이터 배열 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • index: 디바이스 데이터 배열의 인덱스
  • data: 디바이스에 쓸 실수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 버저 이펙터 디바이스의 데이터를 1046.50으로 한다.
    hamster_write_float_at_multi(1, HAMSTER_BUZZER, 0, 1046.50);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_float_multi(int hamster_index, int device_id, float data)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 실수 값 data를 쓴다.

디바이스의 데이터 배열 크기가 0인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스에 쓸 실수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 버저 이펙터 디바이스의 데이터를 1046.50으로 한다.
    hamster_write_float_multi(1, HAMSTER_BUZZER, 1046.50);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
버전 1.0부터
int hamster_write_multi(int hamster_index, int device_id, int data)
인덱스가 hamster_index인 햄스터 로봇에 대해 ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 정수 값 data를 쓴다.

디바이스의 데이터 배열 크기가 0인 경우에는 쓰지 않고 0을 반환한다.

파라미터:
  • hamster_index: 햄스터 로봇의 인덱스
  • device_id: 디바이스 ID
  • data: 디바이스에 쓸 정수 값 데이터

반환 값:
    성공하면 1, 실패하면 0

int main(int argc, char *argv[]) {
    // 2대의 햄스터 로봇과 통신으로 연결한다.
    hamster_create_multi(2);

    // 인덱스 1의 햄스터 로봇에 대해 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
    hamster_write_multi(1, HAMSTER_LEFT_WHEEL, 30);

    ...

    // 프로그램을 종료하기 전에 반드시 호출해야 한다. (메모리 해제, 통신 연결 끊기)
    hamster_dispose_all();

    return 0;
}
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (akaii@kw.ac.kr) if you have any problem.