다운로드 교육자료 문제해결 레퍼런스 구입방법

레퍼런스 매뉴얼 : C 언어 : 숙련자용 : 단일 로봇용 함수

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

햄스터 로봇을 제어하기 위한 함수는 크게 두 가지 종류가 있습니다.
첫 번째 종류의 함수는 모든 로봇에 적용할 수 있는 일반화된 규칙을 따르는 함수입니다. 다음과 같이 해당 디바이스의 ID를 사용하여 read 또는 write 함수를 호출하면 됩니다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value1, value2, value3, value4;

    hamster_create(); // 햄스터 인스턴스를 생성한다.

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

    dispose_all(); // 통신 연결을 종료하고 메모리를 해제한다.

    return 0;
}

두 번째 종류의 함수는 햄스터 로봇에만 적용할 수 있으며, 함수 내부에서 위의 일반화된 함수를 호출해 줍니다. 이 함수는 디바이스의 이름과 유사한 이름으로 구성되어 있습니다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value1, value2, value3, value4;

    hamster_create(); // 햄스터 인스턴스를 생성한다.

    value1 = hamster_left_proximity(); // 왼쪽 근접 센서 값을 얻는다.
    value2 = hamster_acceleration_x(); // X축 가속도 값을 얻는다.
    value3 = hamster_acceleration_y(); // Y축 가속도 값을 얻는다.
    value4 = hamster_acceleration_z(); // Z축 가속도 값을 얻는다.
    hamster_left_wheel(30); // 왼쪽 바퀴의 속도를 30으로 한다.

    dispose_all(); // 통신 연결을 종료하고 메모리를 해제한다.

    return 0;
}
인스턴스 생성 함수
버전 1.2.0부터
Hamster* hamster_create(void)
햄스터 인스턴스를 생성하고 하드웨어 햄스터 로봇과 통신을 연결한다.

햄스터 인스턴스를 생성할 때마다 몇 번째 햄스터 로봇인지를 나타내는 인덱스는 1씩 증가한다.

반환 값:
    햄스터(Hamster) 구조체의 포인터

#include "roboid.h"

int main(int argc, char *argv[]) {
    // 햄스터 인스턴스를 생성한다.
    hamster_create();
    dispose_all();
    return 0;
}
버전 1.2.0부터
Hamster* hamster_create_port(const char* port_name)
햄스터 인스턴스를 생성하고 port_name의 시리얼 포트를 통해 하드웨어 햄스터 로봇과 통신을 연결한다.

햄스터 인스턴스를 생성할 때마다 몇 번째 햄스터 로봇인지를 나타내는 인덱스는 1씩 증가한다.

파라미터:
  • port_name: 시리얼 포트 이름

반환 값:
    햄스터(Hamster) 구조체의 포인터

#include "roboid.h"

int main(int argc, char *argv[]) {
    // 햄스터 인스턴스를 생성한다.
    hamster_create_port("COM52");
    dispose_all();
    return 0;
}
햄스터 전용 함수
버전 1.2.0부터
int hamster_acceleration_x(void)
X축 가속도 센서 값을 반환한다.

햄스터 로봇의 가속도 센서 좌표계는 로봇이 전진하는 방향이 X축, 로봇의 왼쪽 방향이 Y축, 위쪽 방향이 Z축의 양수 방향이다.

반환 값:
    X축 가속도 센서 값(-32768 ~ 32767, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // X축 가속도 값을 얻는다.
    value = hamster_acceleration_x();
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_acceleration_y(void)
Y축 가속도 센서 값을 반환한다.

햄스터 로봇의 가속도 센서 좌표계는 로봇이 전진하는 방향이 X축, 로봇의 왼쪽 방향이 Y축, 위쪽 방향이 Z축의 양수 방향이다.

반환 값:
    Y축 가속도 센서 값(-32768 ~ 32767, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // Y축 가속도 값을 얻는다.
    value = hamster_acceleration_y();
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_acceleration_z(void)
Z축 가속도 센서 값을 반환한다.

햄스터 로봇의 가속도 센서 좌표계는 로봇이 전진하는 방향이 X축, 로봇의 왼쪽 방향이 Y축, 위쪽 방향이 Z축의 양수 방향이다.

반환 값:
    Z축 가속도 센서 값(-32768 ~ 32767, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // Z축 가속도 값을 얻는다.
    value = hamster_acceleration_z();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_beep(void)
440 Hz의 버저 음을 짧게(0.2초) 소리낸다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 버저 음을 짧게 소리낸다.
    hamster_beep();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_board_forward(void)
검은색 격자로 구성된 말판 위에서 한 칸 앞으로 이동한다.

말판은 교육자료 - 수업자료 - 활동지에서 내려받을 수 있다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 말판 위에서 한 칸 앞으로 이동한다.
    hamster_board_forward();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_board_left(void)
검은색 격자로 구성된 말판 위에서 왼쪽 방향으로 제자리에서 90도 회전한다.

말판은 교육자료 - 수업자료 - 활동지에서 내려받을 수 있다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 말판 위에서 왼쪽 방향으로 제자리에서 90도 회전한다.
    hamster_board_left();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_board_right(void)
검은색 격자로 구성된 말판 위에서 오른쪽 방향으로 제자리에서 90도 회전한다.

말판은 교육자료 - 수업자료 - 활동지에서 내려받을 수 있다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 말판 위에서 오른쪽 방향으로 제자리에서 90도 회전한다.
    hamster_board_right();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_buzzer(double hz)
버저 소리의 음 높이 주파수를 hz [Hz]로 설정한다.

음 높이는 소수점 둘째 자리까지 입력할 수 있으며, 버저 소리를 끄기 위해서는 0을 입력하면 된다.

파라미터:
  • hz: 버저 소리의 음 높이(0 ~ 167772.15 [Hz], 0: off)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 버저 소리의 음 높이를 1000 Hz로 한다.
    hamster_buzzer(1000);
    // 버저 소리의 음 높이를 261.63 Hz로 한다.
    hamster_buzzer(261.63);
    // 버저 소리를 끈다.
    hamster_buzzer(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_input_a(void)
외부 확장 포트 중에서 포트 A로 입력되는 신호 값을 반환한다.

외부 확장 포트 A의 입출력 모드에 따라 반환하는 값의 범위가 달라진다.

반환 값:
    포트 A로 입력되는 신호 값(초기 값: 0)

입출력 모드 값의 범위 설명
HAMSTER_IO_MODE_ANALOG_INPUT
(아날로그 입력 모드)
0 ~ 255 입력 전압을 8비트 ADC로 측정한다. 최대 입력 전압인 3.3V가 입력되면 255의 값을 가진다.
HAMSTER_IO_MODE_DIGITAL_INPUT
(디지털 입력 모드)
0 또는 1 입력 전압을 0과 1로 변환한다. 입력 전압이 1.6V 이상이면 1로 하고, 아니면 0으로 한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    hamster_io_mode_a(HAMSTER_IO_MODE_ANALOG_INPUT);
    // 포트 A로 입력되는 신호 값을 얻는다.
    value = hamster_input_a();
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_input_b(void)
외부 확장 포트 중에서 포트 B로 입력되는 신호 값을 반환한다.

외부 확장 포트 B의 입출력 모드에 따라 반환하는 값의 범위가 달라진다.

반환 값:
    포트 B로 입력되는 신호 값(초기 값: 0)

입출력 모드 값의 범위 설명
HAMSTER_IO_MODE_ANALOG_INPUT
(아날로그 입력 모드)
0 ~ 255 입력 전압을 8비트 ADC로 측정한다. 최대 입력 전압인 3.3V가 입력되면 255의 값을 가진다.
HAMSTER_IO_MODE_DIGITAL_INPUT
(디지털 입력 모드)
0 또는 1 입력 전압을 0과 1로 변환한다. 입력 전압이 1.6V 이상이면 1로 하고, 아니면 0으로 한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    hamster_io_mode_b(HAMSTER_IO_MODE_DIGITAL_INPUT);
    // 포트 B로 입력되는 신호 값을 얻는다.
    value = hamster_input_b();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_io_mode_a(int mode)
외부 확장 포트 중에서 포트 A의 입출력 모드를 설정한다.

파라미터:
  • mode: 포트 A의 입출력 모드

입출력 모드 상수 값 설명
HAMSTER_IO_MODE_ANALOG_INPUT
(아날로그 입력 모드)
0 입력 전압을 8비트 ADC로 측정한다. 최대 입력 전압인 3.3V가 입력되면 255의 값을 가진다.
HAMSTER_IO_MODE_DIGITAL_INPUT
(디지털 입력 모드)
1 입력 전압을 0과 1로 변환한다. 입력 전압이 1.6V 이상이면 1로 하고, 아니면 0으로 한다.
HAMSTER_IO_MODE_SERVO_OUTPUT
(아날로그 서보 출력 모드)
8 외부 서보 제어용 PWM 신호를 출력한다.
HAMSTER_IO_MODE_PWM_OUTPUT
(PWM 출력 모드)
9 듀티비(0 ~ 255 단계)에 따른 PWM 파형을 출력한다.
HAMSTER_IO_MODE_DIGITAL_OUTPUT
(디지털 출력 모드)
10 디지털 값 LOW(0) 또는 HIGH(1)를 출력한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 포트 A의 입출력 모드를 아날로그 입력 모드로 설정한다.
    hamster_io_mode_a(HAMSTER_IO_MODE_ANALOG_INPUT);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_io_mode_b(int mode)
외부 확장 포트 중에서 포트 B의 입출력 모드를 설정한다.

파라미터:
  • mode: 포트 B의 입출력 모드

입출력 모드 상수 값 설명
HAMSTER_IO_MODE_ANALOG_INPUT
(아날로그 입력 모드)
0 입력 전압을 8비트 ADC로 측정한다. 최대 입력 전압인 3.3V가 입력되면 255의 값을 가진다.
HAMSTER_IO_MODE_DIGITAL_INPUT
(디지털 입력 모드)
1 입력 전압을 0과 1로 변환한다. 입력 전압이 1.6V 이상이면 1로 하고, 아니면 0으로 한다.
HAMSTER_IO_MODE_SERVO_OUTPUT
(아날로그 서보 출력 모드)
8 외부 서보 제어용 PWM 신호를 출력한다.
HAMSTER_IO_MODE_PWM_OUTPUT
(PWM 출력 모드)
9 듀티비(0 ~ 255 단계)에 따른 PWM 파형을 출력한다.
HAMSTER_IO_MODE_DIGITAL_OUTPUT
(디지털 출력 모드)
10 디지털 값 LOW(0) 또는 HIGH(1)를 출력한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 포트 B의 입출력 모드를 PWM 출력 모드로 설정한다.
    hamster_io_mode_b(HAMSTER_IO_MODE_PWM_OUTPUT);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_leds(int left_color, int right_color)
왼쪽 LED와 오른쪽 LED의 색상을 설정한다.

7가지 색상을 표현할 수 있으며, LED를 끄기 위해서는 0을 입력하면 된다.

파라미터:
  • left_color: 왼쪽 LED의 색상(0 ~ 7, 0: off)
  • right_color: 오른쪽 LED의 색상(0 ~ 7, 0: off)

LED 색상 상수 값 설명
HAMSTER_LED_OFF 0 LED를 끈다.
HAMSTER_LED_BLUE 1 LED를 파란색으로 켠다. (R: 0, G: 0, B: 255)
HAMSTER_LED_GREEN 2 LED를 초록색으로 켠다. (R: 0, G: 255, B: 0)
HAMSTER_LED_CYAN 3 LED를 하늘색으로 켠다. (R: 0, G: 255, B: 255)
HAMSTER_LED_RED 4 LED를 빨간색으로 켠다. (R: 255, G: 0, B: 0)
HAMSTER_LED_MAGENTA 5 LED를 보라색으로 켠다. (R: 255, G: 0, B: 255)
HAMSTER_LED_YELLOW 6 LED를 노란색으로 켠다. (R: 255, G: 255, B: 0)
HAMSTER_LED_WHITE 7 LED를 하얀색으로 켠다. (R: 255, G: 255, B: 255)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 왼쪽 LED를 빨간색으로, 오른쪽 LED를 파란색으로 켠다.
    hamster_leds(HAMSTER_LED_RED, HAMSTER_LED_BLUE);
    // 양쪽 LED를 끈다.
    hamster_leds(0, 0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_left_floor(void)
왼쪽 바닥 센서 값을 반환한다.

바닥 센서의 값은 약 10ms마다(초당 100회) 측정되며, 블루투스 통신으로 약 20ms마다(초당 50회) 전달된다. 센서가 출력하는 값의 범위는 0 ~ 255이지만 바닥에서 가장 밝은 색(흰색에 가까운 색 중에서 가장 밝은 색)을 100으로 자동 보정하기 때문에 코드 작성 시 사용되는 값의 범위는 0 ~ 100이다.

반환 값:
    왼쪽 바닥 센서 값(0 ~ 100, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 왼쪽 바닥 센서 값을 얻는다.
    value = hamster_left_floor();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_left_led(int color)
왼쪽 LED의 색상을 설정한다.

7가지 색상을 표현할 수 있으며, LED를 끄기 위해서는 0을 입력하면 된다.

파라미터:
  • color: 왼쪽 LED의 색상(0 ~ 7, 0: off)

LED 색상 상수 값 설명
HAMSTER_LED_OFF 0 LED를 끈다.
HAMSTER_LED_BLUE 1 LED를 파란색으로 켠다. (R: 0, G: 0, B: 255)
HAMSTER_LED_GREEN 2 LED를 초록색으로 켠다. (R: 0, G: 255, B: 0)
HAMSTER_LED_CYAN 3 LED를 하늘색으로 켠다. (R: 0, G: 255, B: 255)
HAMSTER_LED_RED 4 LED를 빨간색으로 켠다. (R: 255, G: 0, B: 0)
HAMSTER_LED_MAGENTA 5 LED를 보라색으로 켠다. (R: 255, G: 0, B: 255)
HAMSTER_LED_YELLOW 6 LED를 노란색으로 켠다. (R: 255, G: 255, B: 0)
HAMSTER_LED_WHITE 7 LED를 하얀색으로 켠다. (R: 255, G: 255, B: 255)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 왼쪽 LED를 빨간색으로 켠다.
    hamster_left_led(HAMSTER_LED_RED);
    // 왼쪽 LED를 끈다.
    hamster_left_led(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_left_proximity(void)
왼쪽 근접 센서 값을 반환한다.

근접 센서의 데이터는 약 10ms마다(초당 100회) 측정되며, 블루투스 통신으로 약 20ms마다(초당 50회) 전달된다.

반환 값:
    왼쪽 근접 센서 값(0 ~ 255, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 왼쪽 근접 센서 값을 얻는다.
    value = hamster_left_proximity();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_left_wheel(double speed)
왼쪽 바퀴의 속도를 설정한다.

왼쪽 바퀴의 속도는 최대 속도에 대한 % 값이다. 소수점 이하는 무시된다. 양수 값은 전진 방향으로의 회전을, 음수 값은 후진 방향으로의 회전을 의미한다. 부호를 제외한 절대치가 클수록 속도가 빨라진다.

파라미터:
  • speed: 왼쪽 바퀴의 속도(-100 ~ 100 [%], 0: 정지)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 왼쪽 바퀴를 30%의 속력으로 앞으로 회전하게 한다.
    hamster_left_wheel(30);
    // 왼쪽 바퀴를 30%의 속력으로 뒤로 회전하게 한다.
    hamster_left_wheel(-30);
    // 왼쪽 바퀴를 정지한다.
    hamster_left_wheel(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_light()
밝기 센서 값을 반환한다.

반환 값:
    밝기 센서 값(0 ~ 65535 [Lux], 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 밝기 센서 값을 얻는다.
    value = hamster_light();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_line_tracer_mode(int mode)
햄스터 로봇에 내장된 라인 트레이서 기능의 모드를 설정한다.

내장된 라인 트레이서 기능을 사용하면 초당 50회 이상의 내부 피드백 제어를 통해 고속 주행이 가능하다.

파라미터:
  • mode: 라인 트레이서 모드(0 ~ 15)

라인 트레이서 모드 데이터 값 설명
HAMSTER_LINE_TRACER_MODE_OFF 0 내장된 라인 트레이서 기능을 사용하지 않는다.
HAMSTER_LINE_TRACER_MODE_BLACK_LEFT_SENSOR 1 왼쪽 바닥 센서를 사용하여 검은색 라인을 오른쪽에 두고 가장자리를 따라 전진한다.
HAMSTER_LINE_TRACER_MODE_BLACK_RIGHT_SENSOR 2 오른쪽 바닥 센서를 사용하여 검은색 라인을 왼쪽에 두고 가장자리를 따라 전진한다.
HAMSTER_LINE_TRACER_MODE_BLACK_BOTH_SENSORS 3 양쪽 바닥 센서를 모두 사용하여 검은색 라인을 중앙에 두고 전진한다. 검은색 교차로와 짧게 끊어진 라인은 직진하여 통과한다.
HAMSTER_LINE_TRACER_MODE_BLACK_TURN_LEFT 4 현재 교차로에 있으면 교차로를 벗어날 때까지 좌회전하고, 검은색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_BLACK_TURN_RIGHT 5 현재 교차로에 있으면 교차로를 벗어날 때까지 우회전하고, 검은색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_BLACK_MOVE_FORWARD 6 현재 교차로에 있으면 교차로를 벗어날 때까지 직진하고, 검은색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_BLACK_UTURN 7 180도 유턴하고 검은색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_WHITE_LEFT_SENSOR 8 왼쪽 바닥 센서를 사용하여 흰색 라인을 오른쪽에 두고 가장자리를 따라 전진한다.
HAMSTER_LINE_TRACER_MODE_WHITE_RIGHT_SENSOR 9 오른쪽 바닥 센서를 사용하여 흰색 라인을 왼쪽에 두고 가장자리를 따라 전진한다.
HAMSTER_LINE_TRACER_MODE_WHITE_BOTH_SENSORS 10 양쪽 바닥 센서를 모두 사용하여 흰색 라인을 중앙에 두고 전진한다. 흰색 교차로와 짧게 끊어진 라인은 직진하여 통과한다.
HAMSTER_LINE_TRACER_MODE_WHITE_TURN_LEFT 11 현재 교차로에 있으면 교차로를 벗어날 때까지 좌회전하고, 흰색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_WHITE_TURN_RIGHT 12 현재 교차로에 있으면 교차로를 벗어날 때까지 우회전하고, 흰색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_WHITE_MOVE_FORWARD 13 현재 교차로에 있으면 교차로를 벗어날 때까지 직진하고, 흰색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.
HAMSTER_LINE_TRACER_MODE_WHITE_UTURN 14 180도 유턴하고 흰색 라인을 따라 직진하다가 다음 교차로를 만나면 정지한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 라인 트레이서 모드를 설정한다.
    hamster_line_tracer_mode(HAMSTER_LINE_TRACER_MODE_BLACK_LEFT_SENSOR);
    // 내장된 라인 트레이서 기능을 사용하지 않는다.
    hamster_line_tracer_mode(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_line_tracer_speed(double speed)
햄스터 로봇에 내장된 라인 트레이서 기능의 주행 속도를 설정한다.

주행 속도는 1 ~ 8의 8단계이며 소수점 이하는 무시된다. 값이 클수록 주행 속도가 빨라진다.

파라미터:
  • speed: 주행 속도(1 ~ 8, 초기 값: 5)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 라인 트레이서 주행 속도를 5로 설정한다.
    hamster_line_tracer_speed(5);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_note(double pitch, double beats)
버저를 이용한 오차 0.01% 이하의 정확한 음정을 beats 박자 만큼 소리낸다.

유효한 pitch 값은 1 ~ 88이며 소수점 이하는 무시된다. 피아노의 88 건반에 대응된다. 소리를 끄기 위해서는 pitch에 0을 입력하면 된다. 각 음표에 해당하는 상수 값은 음표 상수를 참고하기 바란다.

파라미터:
  • pitch: 음정(0 ~ 88, 0: off)
  • beats: 박자

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 4옥타브 도 음을 0.5 박자 소리낸다.
    hamster_note(HAMSTER_NOTE_C_4, 0.5);
    // 0.5 박자 쉰다.
    hamster_note(0, 0.5);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_output_a(double value)
외부 확장 포트 중에서 포트 A로 출력하는 신호 값을 설정한다.

외부 확장 포트 A의 입출력 모드에 따라 설정할 수 있는 값의 범위가 달라진다. 소수점 이하는 무시된다.

파라미터:
  • value: 포트 A로 출력하는 신호 값

입출력 모드 값의 범위 설명
HAMSTER_IO_MODE_SERVO_OUTPUT
(아날로그 서보 출력 모드)
0 ~ 180
(0: off)
외부 서보 제어용 PWM 신호를 출력하며, 20msec의 주기를 갖는 PWM 파형에서 ON 상태의 펄스 폭을 설정한다.
유효한 값은 1 ~ 180도이며, 펄스 폭 1.0msec ~ 2.0msec에 대응된다. (90도는 1.5msec에 대응)
0(off)인 경우에는 펄스 없이 항상 0이 출력되며, 180보다 큰 값을 입력하면 최대 펄스 폭인 2.5msec로 제한된다.
HAMSTER_IO_MODE_PWM_OUTPUT
(PWM 출력 모드)
0 ~ 255 20msec의 주기를 갖는 PWM 파형에서 ON 상태의 듀티비를 0 ~ 255 단계로 설정한다.
HAMSTER_IO_MODE_DIGITAL_OUTPUT
(디지털 출력 모드)
0 또는 1 디지털 출력(0 또는 1)을 설정한다. 0을 입력하면 LOW, 0이 아닌 값을 입력하면 HIGH 값을 출력한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    hamster_io_mode_a(HAMSTER_IO_MODE_PWM_OUTPUT);
    // PWM 출력을 50으로 설정한다.
    hamster_output_a(50);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_output_b(double value)
외부 확장 포트 중에서 포트 B로 출력하는 신호 값을 설정한다.

외부 확장 포트 B의 입출력 모드에 따라 설정할 수 있는 값의 범위가 달라진다. 소수점 이하는 무시된다.

파라미터:
  • value: 포트 B로 출력하는 신호 값

입출력 모드 값의 범위 설명
HAMSTER_IO_MODE_SERVO_OUTPUT
(아날로그 서보 출력 모드)
0 ~ 180
(0: off)
외부 서보 제어용 PWM 신호를 출력하며, 20msec의 주기를 갖는 PWM 파형에서 ON 상태의 펄스 폭을 설정한다.
유효한 값은 1 ~ 180도이며, 펄스 폭 1.0msec ~ 2.0msec에 대응된다. (90도는 1.5msec에 대응)
0(off)인 경우에는 펄스 없이 항상 0이 출력되며, 180보다 큰 값을 입력하면 최대 펄스 폭인 2.5msec로 제한된다.
HAMSTER_IO_MODE_PWM_OUTPUT
(PWM 출력 모드)
0 ~ 255 20msec의 주기를 갖는 PWM 파형에서 ON 상태의 듀티비를 0 ~ 255 단계로 설정한다.
HAMSTER_IO_MODE_DIGITAL_OUTPUT
(디지털 출력 모드)
0 또는 1 디지털 출력(0 또는 1)을 설정한다. 0을 입력하면 LOW, 0이 아닌 값을 입력하면 HIGH 값을 출력한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    hamster_io_mode_b(HAMSTER_IO_MODE_SERVO_OUTPUT);
    // 서보 출력을 90으로 설정한다.
    hamster_output_b(90);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_pitch(double pitch)
버저를 이용한 오차 0.01% 이하의 정확한 음정을 소리낸다.

유효한 값은 1 ~ 88이며 소수점 이하는 무시된다. 피아노의 88 건반에 대응된다. 소리를 끄기 위해서는 0을 입력하면 된다. 각 음표에 해당하는 상수 값은 음표 상수를 참고하기 바란다.

파라미터:
  • pitch: 음정(0 ~ 88, 0: off)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 4옥타브 도 음을 소리낸다.
    hamster_pitch(HAMSTER_NOTE_C_4);
    // 소리를 끈다.
    hamster_pitch(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_right_floor(void)
오른쪽 바닥 센서 값을 반환한다.

바닥 센서의 값은 약 10ms마다(초당 100회) 측정되며, 블루투스 통신으로 약 20ms마다(초당 50회) 전달된다. 센서가 출력하는 값의 범위는 0 ~ 255이지만 바닥에서 가장 밝은 색(흰색에 가까운 색 중에서 가장 밝은 색)을 100으로 자동 보정하기 때문에 코드 작성 시 사용되는 값의 범위는 0 ~ 100이다.

반환 값:
    오른쪽 바닥 센서 값(0 ~ 100, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 오른쪽 바닥 센서 값을 얻는다.
    value = hamster_right_floor();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_right_led(int color)
오른쪽 LED의 색상을 설정한다.

7가지 색상을 표현할 수 있으며, LED를 끄기 위해서는 0을 입력하면 된다.

파라미터:
  • color: 오른쪽 LED의 색상(0 ~ 7, 0: off)

LED 색상 상수 값 설명
HAMSTER_LED_OFF 0 LED를 끈다.
HAMSTER_LED_BLUE 1 LED를 파란색으로 켠다. (R: 0, G: 0, B: 255)
HAMSTER_LED_GREEN 2 LED를 초록색으로 켠다. (R: 0, G: 255, B: 0)
HAMSTER_LED_CYAN 3 LED를 하늘색으로 켠다. (R: 0, G: 255, B: 255)
HAMSTER_LED_RED 4 LED를 빨간색으로 켠다. (R: 255, G: 0, B: 0)
HAMSTER_LED_MAGENTA 5 LED를 보라색으로 켠다. (R: 255, G: 0, B: 255)
HAMSTER_LED_YELLOW 6 LED를 노란색으로 켠다. (R: 255, G: 255, B: 0)
HAMSTER_LED_WHITE 7 LED를 하얀색으로 켠다. (R: 255, G: 255, B: 255)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 오른쪽 LED를 파란색으로 켠다.
    hamster_right_led(HAMSTER_LED_BLUE);
    // 오른쪽 LED를 끈다.
    hamster_right_led(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_right_proximity(void)
오른쪽 근접 센서 값을 반환한다.

근접 센서의 데이터는 약 10ms마다(초당 100회) 측정되며, 블루투스 통신으로 약 20ms마다(초당 50회) 전달된다.

반환 값:
    오른쪽 근접 센서 값(0 ~ 255, 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 오른쪽 근접 센서 값을 얻는다.
    value = hamster_right_proximity();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_right_wheel(double speed)
오른쪽 바퀴의 속도를 설정한다.

오른쪽 바퀴의 속도는 최대 속도에 대한 % 값이다. 소수점 이하는 무시된다. 양수 값은 전진 방향으로의 회전을, 음수 값은 후진 방향으로의 회전을 의미한다. 부호를 제외한 절대치가 클수록 속도가 빨라진다.

파라미터:
  • speed: 오른쪽 바퀴의 속도(-100 ~ 100 [%], 0: 정지)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 오른쪽 바퀴를 30%의 속력으로 앞으로 회전하게 한다.
    hamster_right_wheel(30);
    // 오른쪽 바퀴를 30%의 속력으로 뒤로 회전하게 한다.
    hamster_right_wheel(-30);
    // 오른쪽 바퀴를 정지한다.
    hamster_right_wheel(0);
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_signal_strength(void)
신호 세기 값을 반환한다.

햄스터 로봇과 컴퓨터 간의 블루투스 무선 통신의 신호 세기를 나타낸다. 신호의 세기가 셀수록 값이 커진다.

반환 값:
    신호 세기 값(-128 ~ 0 [dBm], 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 신호 세기 값을 얻는다.
    value = hamster_signal_strength();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_stop(void)
양쪽 바퀴를 정지한다. hamster_wheels(0, 0)을 호출한 것과 같다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 30%의 속력으로 앞으로 이동한다.
    hamster_wheels(30, 30);
    // 양쪽 바퀴를 정지한다.
    hamster_stop();
    dispose_all();
    return 0;
}
버전 1.2.0부터
int hamster_temperature(void)
온도 센서 값을 반환한다.

햄스터 로봇 내부의 온도를 나타낸다.

반환 값:
    온도 센서 값(-40 ~ 88 [oC], 초기 값: 0)

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 온도 센서 값을 얻는다.
    value = hamster_temperature();
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_tempo(double bpm)
연주하거나 쉬는 속도를 bpm(분당 박자 수)으로 설정한다.

파라미터:
  • bpm: 분당 박자 수(초기 값: 60)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 연주 속도를 60 BPM으로 한다.
    hamster_tempo(60);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void hamster_wheels(double left_speed, double right_speed)
왼쪽 바퀴와 오른쪽 바퀴의 속도를 설정한다.

바퀴의 속도는 최대 속도에 대한 % 값이다. 소수점 이하는 무시된다. 양수 값은 전진 방향으로의 회전을, 음수 값은 후진 방향으로의 회전을 의미한다. 부호를 제외한 절대치가 클수록 속도가 빨라진다.

파라미터:
  • left_speed: 왼쪽 바퀴의 속도(-100 ~ 100 [%], 0: 정지)
  • right_speed: 오른쪽 바퀴의 속도(-100 ~ 100 [%], 0: 정지)

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 양쪽 바퀴를 30%의 속력으로 앞으로 회전하게 한다.
    hamster_wheels(30, 30);
    // 양쪽 바퀴를 30%의 속력으로 뒤로 회전하게 한다.
    hamster_wheels(-30, -30);
    // 양쪽 바퀴를 정지한다.
    hamster_wheels(0, 0);
    dispose_all();
    return 0;
}
로봇 공통 함수
버전 1.2.0부터
void hamster_dispose(void)
로봇의 통신 연결을 종료한다.
버전 1.0.0부터
int hamster_e(int device_id)
ID가 device_id인 디바이스의 데이터가 갱신되었는지 확인한다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    int state;
    hamster_create();
    if(hamster_e(HAMSTER_LINE_TRACER_STATE)) { // 데이터가 갱신되었는지 확인한다.
        state = hamster_read(HAMSTER_LINE_TRACER_STATE); // 데이터를 읽는다.
    }
    dispose_all();
    return 0;
}
버전 1.2.0부터
const char* hamster_get_id(void)
로봇의 ID를 반환한다.

반환 값:
    로봇의 ID를 나타내는 문자열

#include "roboid.h"

int main(int argc, char *argv[]) {
    const char* id;
    hamster_create();
    // 로봇의 ID를 얻는다.
    id = hamster_get_id();
    dispose_all();
    return 0;
}
버전 1.2.0부터
const char* hamster_get_name(void)
로봇의 이름을 반환한다.

반환 값:
    로봇의 이름을 나타내는 문자열. 항상 null이 아니다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    const char* name;
    hamster_create();
    // 로봇의 이름을 얻는다.
    name = hamster_get_name();
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_read(int device_id)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 정수 값으로 반환한다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // 왼쪽 근접 센서 값을 얻는다.
    value = hamster_read(HAMSTER_LEFT_PROXIMITY);
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_read_at(int device_id, int index)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 있는 데이터를 정수 값으로 반환한다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    int value;
    hamster_create();
    // Y축 가속도 값을 얻는다.
    value = hamster_read_at(HAMSTER_ACCELERATION, 1);
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_read_array(int device_id, int* data, int length)
ID가 device_id인 디바이스의 데이터 배열을 정수형 배열 data에 복사하고, 복사한 데이터의 개수를 반환한다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    int data[3];
    hamster_create();
    // 3축 가속도 센서 값을 모두 얻는다.
    hamster_read_array(HAMSTER_ACCELERATION, data, 3);
    dispose_all();
    return 0;
}
버전 1.0.0부터
float hamster_read_float(int device_id)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 있는 데이터를 실수 값으로 반환한다.

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

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

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

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

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

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

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

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

반환 값:
    디바이스의 데이터 값 또는 0.0
버전 1.2.0부터
void hamster_reset(void)
모든 디바이스의 데이터를 초기화한다.
버전 1.1.0부터
void hamster_set_name(const char* name)
로봇의 이름을 name으로 설정한다.

파라미터:
  • name: 설정할 로봇의 이름. NULL을 입력한 경우에는 이름이 빈 문자열("")로 설정된다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 로봇의 이름을 "Hamster"로 설정한다.
    hamster_set_name("Hamster");
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_write(int device_id, int data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스 0의 위치에 정수 값 data를 쓴다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 왼쪽 바퀴의 속도를 30으로 한다.
    hamster_write(HAMSTER_LEFT_WHEEL, 30);
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_write_at(int device_id, int index, int data)
ID가 device_id인 디바이스의 데이터 배열에서 인덱스가 index인 위치에 정수 값 data를 쓴다.

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 왼쪽 바퀴의 속도를 30으로 한다.
    hamster_write_at(HAMSTER_LEFT_WHEEL, 0, 30);
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_write_array(int device_id, const int* data, int length)
ID가 device_id인 디바이스의 데이터 배열에 정수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

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

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

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

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 버저 소리의 음 높이를 261.63 Hz로 한다.
    hamster_write_float(HAMSTER_BUZZER, 261.63f);
    dispose_all();
    return 0;
}
버전 1.0.0부터
int hamster_write_float_array(int device_id, const float* data, int length)
ID가 device_id인 디바이스의 데이터 배열에 실수형 배열 data를 복사하고, 복사한 데이터의 개수를 반환한다.

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

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

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

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

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

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

#include "roboid.h"

int main(int argc, char *argv[]) {
    hamster_create();
    // 버저 소리의 음 높이를 261.63 Hz로 한다.
    hamster_write_float_at(HAMSTER_BUZZER, 0, 261.63f);
    dispose_all();
    return 0;
}
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.