- 제 2 장 robotc 기초 프로그래밍 -

33
- - 2 2 ROBOTC ROBOTC 제제 제제제제제 제제 제제제제제 - -

Upload: reilly

Post on 07-Jan-2016

352 views

Category:

Documents


10 download

DESCRIPTION

- 제 2 장 ROBOTC 기초 프로그래밍 -. - 로봇을 2 초 동안 전진시켜라 -. NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100% 까지 파워 레벨을 조정 가능. - 2 초 동안 전진 , 2 초 동안 후진 -. - 랜덤 시간 전진 -. •int wait_time; 이 문장은 random(3000) 을 통해서 얻어질 0-2999 사이의 값을 저장할 정수형 변수 선언 • random(3000); 0 부터 2999 사이에 임의의 값을 출력해주는 함수. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: -  제  2 장  ROBOTC  기초 프로그래밍  -

- - 제 제 22 장 장 ROBOTC ROBOTC 기초 프로그래밍기초 프로그래밍 - -

Page 2: -  제  2 장  ROBOTC  기초 프로그래밍  -

- - 로봇을 로봇을 22 초 동안 전진시켜라 초 동안 전진시켜라 - -

• NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100%까지 파워 레벨을 조정 가능

Page 3: -  제  2 장  ROBOTC  기초 프로그래밍  -

- 2- 2 초 동안 전진초 동안 전진 , 2, 2 초 동안 후진초 동안 후진 - -

Page 4: -  제  2 장  ROBOTC  기초 프로그래밍  -

- - 랜덤 시간 전진 랜덤 시간 전진 - -

•int wait_time;이 문장은 random(3000) 을 통해서 얻어질 0-2999 사이의 값을 저장할 정수형 변수 선언

•random(3000);0 부터 2999 사이에 임의의 값을 출력해주는 함수

Page 5: -  제  2 장  ROBOTC  기초 프로그래밍  -

- Mission- Mission II - -

• 2 초 전진 후 90 도 회전하고 2 초 전진

Page 6: -  제  2 장  ROBOTC  기초 프로그래밍  -

Making Turns• Swing left:

• Curve left :

• Spin left : (point turn)

• Face left :

Left wheel

Left wheel

Right wheel

Right wheel

Left wheel Right wheel

stop

stop

Left wheel Right wheel

Page 7: -  제  2 장  ROBOTC  기초 프로그래밍  -

회전 하기회전 하기 (Point Turn)(Point Turn)

Point Turn 의 원리

• 양 모터를 각각 반대방향으로 회전시켜 회전반경이 최소가 되게 하는 회전

• 회전지름은 두 바퀴 사이의 거리

• 장점은 매우 빠르게 좁은 공간에서 회전이 가능

Page 8: -  제  2 장  ROBOTC  기초 프로그래밍  -

회전 하기회전 하기 (Swing Turn)(Swing Turn)

Swing Turn 의 원리

• 한 쪽 바퀴를 회전의 중심으로 삼아 회전하는 방식

• 회전반경이 늘어나지만 회전과 동시에 약간의 전․후진이 가능

• 회전지름은 두 바퀴사이 거리의 두 배• 장점은 보다 정확한 회전이 가능

• 단점은 회전하기 위한 공간이 많이 필요

Page 9: -  제  2 장  ROBOTC  기초 프로그래밍  -

회전 하기회전 하기 (Curve Turn)(Curve Turn)

Curve Turn 의 원리

• 두 개의 모터가 모두 전진하지만 각 모터의 출력 값이 달라 회전반경이 크게 회전하게 되는 회전

• 각각의 모터출력의 값에 따라 회전 반지름이 달라짐

Page 10: -  제  2 장  ROBOTC  기초 프로그래밍  -

Mission IIMission II : Swing Turn

• Storyboard– Go straight for 1 seconds and turn right 90

degrees and go straight for 2 seconds and stop

• Program ??– Is it easy to make 90 degree turns?– Mark the stop location and rerun– Does it stop at the same point?– Why not?– How do we make our robots go straight?– Very important for many missions

Page 11: -  제  2 장  ROBOTC  기초 프로그래밍  -

Mission III: Point Turn(Spinning left)

• Go forward 1.5 seconds and come back by spinning left

• Spinning 180 degrees?• Is it accurate?

Page 12: -  제  2 장  ROBOTC  기초 프로그래밍  -

- 2- 2 초 전진 후 정지거리 측정 초 전진 후 정지거리 측정 - -

• bFloatDuringInactiveMotorPWM : NXT motor 는 기본적으로 정지 모드가 float/brake 로 이루어져 있다 . 기본 값은 float 로 되어 있으므로 ‘ false’ 값을 주어 바로 정지 할 수 있 도록 한다 .

Page 13: -  제  2 장  ROBOTC  기초 프로그래밍  -

- - 타이머를 활용하여 로봇 제어하기 타이머를 활용하여 로봇 제어하기 - -

• 타이머를 활용하여 2 초 동안 전진하는 로봇

• NXT 타이머는 1ms 단위로 계산되는데 , 네 개의 Timer(T1, T2, T3, T4) 로 각각 초기화하여 시간을 측정하고 원하는 시간만큼 프로그램을 동작시킬 수 있다 . time100[ ], time10[ ], time1[ ] 로 시간을 사용할 수 있다 .

• 시간 초기화하는 방법

-ClearTimer(T1) time1[T1] = 0

Page 14: -  제  2 장  ROBOTC  기초 프로그래밍  -

- if - if 제어문 함수 설명 제어문 함수 설명 - -

• 조건식이 ‘ True’ 인지 ‘ False’ 인지 판정

• ‘False’ 일 경우에 대한 고려 없이 ‘ True’ 일 경우 문장 1 을 실행

• 한 조건에 대해 여러 문장 실행 시 문장들을 { } 으로 묶어서 사용

if( 조건식 ) 문장 1

Page 15: -  제  2 장  ROBOTC  기초 프로그래밍  -

- if - if 제어문 예제제어문 예제 - -

• random 함수 이용 난수값 생성 (0-99)

• if 함수를 이용하여 난수값이 50 보다 크면 1 초간 직진

• 직진 후 사운드 출력

Page 16: -  제  2 장  ROBOTC  기초 프로그래밍  -

- if-else - if-else 제어문 함수 설명제어문 함수 설명 - -

if( 조건식 ) 문장 1else 문장 2

• 조건식이 ‘ True’ 인지 ‘ False’ 인지 판정

• ‘True’ 일 경우 문장 1 실행

• ‘False’ 일 경우 문장 2 실행

• 한 조건식에 대해 ‘ True’ 일 경우와 ‘ False’ 일 경우를 나누어 제어할 때 사용

Page 17: -  제  2 장  ROBOTC  기초 프로그래밍  -

- if-else - if-else 제어문 예제 제어문 예제 - -

• random 함수 이용 난수값 생성 (0-99)

• if 함수 이용 값이 50 보다 크면 우회전 , 값이 같거나 작으면 좌회전

• 조건 식 동작 후 사운드 출력

Page 18: -  제  2 장  ROBOTC  기초 프로그래밍  -

- while - while 제어문 함수 설명제어문 함수 설명 - -

while( 조건식 ) 반복문장

• 조건식이 ‘ True’ 이면 반복문장 계속 실행

• 그 후 검사하여 ‘ False’ 이면 while 제어 문을 빠져 나와 다음 문장 실행

• 조건 식에 ‘ True’ 또는 ‘ 1’ 을 넣으면 무한반복

Page 19: -  제  2 장  ROBOTC  기초 프로그래밍  -

- while - while 제어문 예제 제어문 예제 - -

• 0.5 초간 전진과 후진을 10 번 동안 반복 (0-9)

• i++ 는 i = i + 1 을 의미 한다 .

• 단 , while 문을 사용

• 동작 후 사운드 출력

Page 20: -  제  2 장  ROBOTC  기초 프로그래밍  -

- do-while - do-while 제어문 함수 설명 제어문 함수 설명 - -

do 반복문장while( 조건식 )

• 반복 문장을 일단 한번 실행 한 후 while 제어문의조건 식 검사

• 조건 식의 값이 처음부터 거짓이라도 반복 문장은 한번 실행

• 위의 내용을 빼고는 while 과 동일

Page 21: -  제  2 장  ROBOTC  기초 프로그래밍  -

- do-while - do-while 제어문 예제 제어문 예제 - -

• 전진과 후진을 10 번 동안 반복 (0-9)

• 단 , do - while 문을 사용

• 동작 후 사운드 출력

Page 22: -  제  2 장  ROBOTC  기초 프로그래밍  -

- For - For 제어문 함수 설명 제어문 함수 설명 - -

for( 초기값 ; 조건식 ; 증감값 )반복문장

• 유연하고 간결한 반복 프로그램 작성 가능

• 초기값을 설정 -> 조건 식을 비교해서 ‘ True’일 경우 반복문장 실행 -> 증감 값에 대한 연산 실행 -> 조건 식과 비교해서 ‘ False’ 가 되면 for 제어 문을 빠져 나오게 된다 .

Page 23: -  제  2 장  ROBOTC  기초 프로그래밍  -

- For - For 제어문 예제 제어문 예제 - -

• 전진과 후진을 20 번 동안 반복 (0-19)

• 단 , for 문을 사용할 것

• 동작 후 사운드 출력

Page 24: -  제  2 장  ROBOTC  기초 프로그래밍  -

- Switch - Switch 제어문 함수 설명 제어문 함수 설명 - - switch( 수식 ) { case 값 1: 문장 1; case 값 2: 문장 2; … default : 문장 N; }

• 수식 값을 case 값과 비교해서 일치하면 해당 case 문장을 실행하고 빠져

나온다 .• default 는 case 값 외에 나머지 경우에 대해 정의• case 문장 실행하고 제어 탈출을 위해 ‘ break’ 문을 반드시 서술• break; 문을 만나면 반복되는 블록의 마지막에서 반복 문을 이탈

Page 25: -  제  2 장  ROBOTC  기초 프로그래밍  -

- Switch - Switch 제어문 예제 제어문 예제 - -

• NXT 에 있는 버튼을 눌러서 로봇을 원하는 방향으로 움직이는 로봇

• nNxtExitClicks = 클릭 횟수 : 횟수 만큼 취소 버튼을 연속으로

클릭하면 프로그램이 종료 • nNxtButtonPressed : NXT 의 어떤 버튼이 눌렸는지를

알려주는 변수

• 단 , switch 문을 사용하여 작성할 것

Page 26: -  제  2 장  ROBOTC  기초 프로그래밍  -

Mission IV ( 사각 턴 주행 )

해결과제 정의 큰 범위 행동 서술 조금 더 자세한 서술

이 로봇은

사각형을

그리면서 돈다 .

1. 일정거리를 전진한다 .

1-1 A, C 모터를 회전시킨다 .

1-2 0.5 초간 기다린다 .

1-3 A,C 모터를 정지시킨다 .

2. 90 도 좌회전한다 .

2-1 A 모터는 정지 , C 모터는 회전시킨

다 .

2-2 0.5 초간 기다린다 .

2-3 C 모터를 정지시킨다 .

3. 1 번 과 2 번 동 작 을 4 회

반복한다 .

3 위의 1-1 에서 2-3 의 동작을

4 회 반복한다 .

사각턴의 주행방법

Page 27: -  제  2 장  ROBOTC  기초 프로그래밍  -

• 프로그램 내에서 반복적으로 많이 사용되는 작업을 작은 모듈로 만드는 것• 함수를 만들어 놓으면 내부처리과정을 신경쓰지 않아도 함수의 호출만으로

정확한 출력을 볼 수 있다 .

매개변수(paramete

r)-->

함수처리(Function) -->

출력Return

• 종류 - 프로그램의 처음을 알리는 main 함수 - 제작사에서 제공하는 표준 라이브러리 함수 - 프로그래머가 필요에 따라 만들어 사용하는 사용자 정의 함수

- Function(- Function( 함수함수 )) 란란 ?- ?-

Page 28: -  제  2 장  ROBOTC  기초 프로그래밍  -

• Return 되는 데이터 형을 기록하고 다음에 함수 이름을 기록

• 매개변수들이 없거나 있을 수 있다 .

• 단 , 매개변수를 사용하려면 호출하는 쪽의 매개변수의 개수와 받는 쪽의 매개변수의 개수가 같아야 한다 .

void forward ( int speed, int time)

Return 의 데이터형 함수명 ( 데이터 형 매개변수 , 데이터 형 매개변수 )

- Function(- Function( 함수함수 )) 란란 ?? - -

Page 29: -  제  2 장  ROBOTC  기초 프로그래밍  -

- ROBOTC- ROBOTC 함수함수 (Function)(Function) - -

• 전진과 후진을 2 번 반복• 사용자 정의 함수를 사용하면 보다 효율적인 프로그래밍을 할 수 있다 .

Page 30: -  제  2 장  ROBOTC  기초 프로그래밍  -

- ROBOTC- ROBOTC 함수함수 (( 매개 변수매개 변수 )) - -

• 전진과 후진 함수의 속도와 시간을 다르게 설정하려면 ?• 매개변수를 받아 처리하는 함수로 제작하면 된다

Page 31: -  제  2 장  ROBOTC  기초 프로그래밍  -

#include 사용하기• 모듈단위로 작성된 함수 프로그램을 하나의 파일에 저장

• #include 문을 통해 함수 불러오기 하여 사용

• 소스가 매우 길어지는 문제 해결에 도움이 된다 .

- ROBOTC- ROBOTC #include - #include -

Page 32: -  제  2 장  ROBOTC  기초 프로그래밍  -

- - 전처리기전처리기 (Preprocessor) : (Preprocessor) : 매크로 매크로 상수 상수 - -

• 하나의 기호상수나 자료 형을 다른 이름으로 대치시키도록 전처리기에 설정

• 매크로 상수가 실행되면 정의된 기호상수가 대치

• main() 함수가 시작되기 전에 먼저 정의해서 사용 정의 후에 사용

• 모두 공백 없이 대문자로 사용하며 세미콜론을 사용하지 않는다 .

• 컴파일하기 전에 프로그램에 대해서 정의하여 대체 (Replace) 하도록 하는 기능

Page 33: -  제  2 장  ROBOTC  기초 프로그래밍  -

MultiTasking

• NXT 는 최대 256 개의 태스크를 지원하고 각각의 task 는 라운드로빈 방식을 사용하여 각각의 태스크를 처리

• StartTask(TaskID); TaskID에 해당하는 Task 를 시작하거나 다시 시작한다 .

• StopAllTasks (); 현재 실행중인 모든 Task 를 중지한다 .