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

레퍼런스 매뉴얼 : C 언어 : 숙련자용 : 실행 제어 함수

개요
실행을 제어하기 위한 함수를 정의합니다.
함수
버전 1.2.0부터
void dispose_all(void)
모든 로봇의 통신 연결을 종료하고 메모리를 해제한다.
버전 1.2.0부터
void scan(void)
시리얼 포트 목록을 출력한다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    scan(); // 시리얼 포트 목록을 출력한다.
    return 0;
}
버전 1.2.0부터
void set_executable(void (*execute)(void* arg), void* arg)
약 20msec마다 호출되는 콜백 함수를 등록한다.

콜백 함수는 void execute(void* arg)의 형태를 가지는 함수여야 한다. 함수 이름이 execute일 필요는 없다. 콜백 함수 내에서 디바이스에 쓴 데이터는 모두 같은 통신 패킷으로 전달되는 것이 보장된다. 콜백 함수가 등록되어 있으면 콜백 함수를 호출한 후에 하드웨어 로봇에게 명령을 전달한다. 콜백 함수는 약 20msec마다 호출되는데, 콜백 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • execute: 등록할 콜백 함수
  • arg: 콜백 함수가 호출될 때 아규먼트로 넘겨 줄 인스턴스의 주소

#include <stdio.h>
#include "roboid.h"

// 약 20msec마다 호출된다.
void execute(void* arg) {
    if(hamster_left_proximity() > 40) {
        hamster_wheels(-30, -30);
    } else {
        hamster_wheels(30, 30);
    }
}

int main(int argc, char *argv[]) {
    hamster_create();
    set_executable(execute, NULL); // 콜백 함수를 등록한다.
    wait(1000);
    dispose_all();
    return 0;
}
버전 1.2.0부터
void wait(int milliseconds)
1000분의 1초 단위로 milliseconds 시간 동안 기다린다.

파라미터:
  • milliseconds: 기다릴 시간 [msec]

#include "roboid.h"

int main(int argc, char *argv[]) {
    wait(1000); // 1초 기다린다.
    return 0;
}
버전 1.2.0부터
void wait_until(int (*evaluate)(void* arg), void* arg)
조건을 만족할 때까지 기다린다.

조건을 검사하는 함수는 int evaluate(void* arg)의 형태를 가지며 1 또는 0을 반환하는 함수여야 한다. 함수 이름이 evaluate일 필요는 없다. 조건을 검사하는 함수가 1을 반환하면 wait_until 함수를 중지하고, 0을 반환하면 wait_until 함수에 계속 머물러 있는다. 조건을 검사하는 함수는 약 20msec마다 호출되는데, 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • evaluate: 조건을 검사하는 함수
  • arg: 조건을 검사하는 함수가 호출될 때 아규먼트로 넘겨 줄 인스턴스의 주소

#include <stdio.h>
#include "roboid.h"

// 조건을 검사하여 1 또는 0을 반환한다.
int evaluate(void* arg) {
    return (hamster_left_proximity() > 50) ? 1 : 0;
}

int main(int argc, char *argv[]) {
    hamster_create();
    wait_until(evaluate, NULL); // 왼쪽 근접 센서의 값이 50보다 클 때까지 기다린다.
    dispose_all();
    return 0;
}
버전 1.2.0부터
void wait_until_ready(void)
모든 로봇이 준비될 때까지 기다린다.

여러 대의 로봇이 동작을 시작하는 시점을 동일하게 하기 위해 사용한다. 예를 들어, 컴퓨터에 2개의 동글을 연결하고 hamster_create() 함수를 두 번 호출하였는데 햄스터 로봇의 전원을 하나만 켰다고 하자. wait_until_ready() 함수를 호출하지 않으면 첫 번째 햄스터 로봇이 통신으로 연결되었을 때 동작을 먼저 시작하게 된다. 두 번째 햄스터 로봇의 전원을 켜서 모든 로봇이 통신으로 연결된 후 동작을 같이 시작하게 하려면 hamster_create() 함수를 호출한 후 wait_until_ready() 함수를 호출하면 된다. hamster_create() 함수를 호출한 횟수가 컴퓨터에 연결된 동글의 개수보다 적으면 hamster_create() 함수를 호출한 횟수만큼 통신이 연결될 때까지 기다린다. 컴퓨터에 연결된 동글의 개수가 hamster_create() 함수를 호출한 횟수보다 적으면 컴퓨터에 연결된 동글의 개수만큼 통신이 연결될 때까지 기다린다.

#include "roboid.h"

int main(int argc, char *argv[]) {
    Hamster* hamster1 = hamster_create();
    Hamster* hamster2 = hamster_create();
    wait_until_ready();
    hamster1->wheels(30, 30);
    hamster2->wheels(30, 30);
    wait(1000);
    dispose_all();
    return 0;
}
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.