370 likes | 1.59k Views
- 제 2 장 ROBOTC 기초 프로그래밍 -. - 로봇을 2 초 동안 전진시켜라 -. NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100% 까지 파워 레벨을 조정 가능. - 2 초 동안 전진 , 2 초 동안 후진 -. - 랜덤 시간 전진 -. •int wait_time; 이 문장은 random(3000) 을 통해서 얻어질 0-2999 사이의 값을 저장할 정수형 변수 선언 • random(3000); 0 부터 2999 사이에 임의의 값을 출력해주는 함수.
E N D
- 로봇을 2초 동안 전진시켜라 - • NXT 서보 모터 파워는 건전지의 양에 따른 상대적인 비율로 -100 ~ +100%까지 • 파워 레벨을 조정 가능
- 랜덤 시간 전진 - •int wait_time; 이 문장은 random(3000)을 통해서 얻어질 0-2999사이의 값을 저장할 정수형 변수 선언 •random(3000); 0부터 2999사이에 임의의 값을 출력해주는 함수
- MissionI- • 2초 전진 후 90도 회전하고 2초 전진
stop Left wheel Right wheel Making Turns • Swing left: • Curve left : • Spin left : (point turn) • Face left : Left wheel Right wheel Left wheel Right wheel stop Left wheel Right wheel
회전 하기(Point Turn) • 양 모터를 각각 반대방향으로 • 회전시켜 회전반경이 최소가 • 되게 하는 회전 • 회전지름은 두 바퀴 사이의 거리 • 장점은 매우 빠르게 좁은 공간에서 • 회전이 가능 Point Turn의 원리
회전 하기(Swing Turn) • 한 쪽 바퀴를 회전의 중심으로 • 삼아 회전하는 방식 • 회전반경이 늘어나지만 회전과 • 동시에 약간의 전․후진이 가능 • 회전지름은 두 바퀴사이 거리의 • 두 배 • 장점은 보다 정확한 회전이 가능 • 단점은 회전하기 위한 공간이 많이 • 필요 Swing Turn의 원리
회전 하기(Curve Turn) • 두 개의 모터가 모두 전진하지만 • 각 모터의 출력 값이 달라 회전반경이 • 크게 회전하게 되는 회전 • 각각의 모터출력의 값에 따라 회전 • 반지름이 달라짐 Curve Turn의 원리
Mission 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
Mission III: Point Turn(Spinning left) • Go forward 1.5 seconds and come back by spinning left • Spinning 180 degrees? • Is it accurate?
- 2초 전진 후 정지거리 측정 - • bFloatDuringInactiveMotorPWM : • NXT motor 는 기본적으로 정지 모드가 float/brake 로 이루어져 있다. • 기본 값은 float로 되어 있으므로 ‘false’ 값을 주어 바로 정지 할 수 있 • 도록 한다.
- 타이머를 활용하여 로봇 제어하기 - • •시간 초기화하는 방법 • ClearTimer(T1) • time1[T1] = 0 • 타이머를 활용하여 2초 동안 전진하는 로봇 • NXT 타이머는 1ms 단위로 계산되는데, 네 개의 Timer(T1, T2, T3, T4)로 • 각각 초기화하여 시간을 측정하고 원하는 시간만큼 프로그램을 동작시킬 • 수 있다. time100[ ], time10[ ], time1[ ]로 시간을 사용할 수 있다.
if(조건식) 문장1 - if 제어문 함수 설명 - • 조건식이 ‘True’인지 ‘False’ 인지 판정 • ‘False’일 경우에 대한 고려 없이 ‘True’ 일 경우 문장 1을 실행 • 한 조건에 대해 여러 문장 실행 시 문장들을 • { }으로 묶어서 사용
- if 제어문 예제 - • random 함수 이용 난수값 생성(0-99) • if 함수를 이용하여 난수값이 50보다 크면 1초간 직진 • 직진 후 사운드 출력
- if-else 제어문 함수 설명- if(조건식) 문장1 else 문장2 • 조건식이 ‘True’인지 ‘False’ 인지 판정 • ‘True’ 일 경우 문장 1 실행 • ‘False’ 일 경우 문장 2 실행 • 한 조건식에 대해 ‘True’ 일 경우와 ‘False’ 일 경우를 나누어 제어할 때 사용
- if-else 제어문 예제 - • random 함수 이용 난수값 생성(0-99) • if 함수 이용 값이 50보다 크면 우회전, 값이 같거나 작으면 좌회전 • 조건 식 동작 후 사운드 출력
- while 제어문 함수 설명- while(조건식) 반복문장 • 조건식이 ‘True’이면 반복문장 계속 실행 • 그 후 검사하여 ‘False’이면 while 제어 문을 빠져 나와 다음 문장 실행 • 조건 식에 ‘True’ 또는 ‘1’ 을 넣으면 무한반복
- while 제어문 예제 - • 0.5초간 전진과 후진을 10번 동안 반복(0-9) • i++ 는 i = i + 1 을 의미 한다. • 단, while 문을 사용 • 동작 후 사운드 출력
- do-while 제어문 함수 설명 - do 반복문장 while(조건식) • 반복 문장을 일단 한번 실행 한 후 while 제어문의조건 식 검사 • 조건 식의 값이 처음부터 거짓이라도 반복 문장은 한번 실행 • 위의 내용을 빼고는 while과 동일
- do-while 제어문 예제 - • 전진과 후진을 10번 동안 반복(0-9) • 단, do - while 문을 사용 • 동작 후 사운드 출력
- For 제어문 함수 설명 - for(초기값; 조건식; 증감값) 반복문장 • 유연하고 간결한 반복 프로그램 작성 가능 • 초기값을 설정 -> 조건 식을 비교해서 ‘True’일 경우 반복문장 실행 -> 증감 값에 대한 연산 실행 -> 조건 식과 비교해서 ‘False’가 되면 for 제어 문을 빠져 나오게 된다.
- For 제어문 예제 - • 전진과 후진을 20번 동안 반복(0-19) • 단, for문을 사용할 것 • 동작 후 사운드 출력
- Switch 제어문 함수 설명 - switch( 수식 ) { case 값1: 문장1; case 값2: 문장2; … default : 문장 N; } • 수식 값을 case 값과 비교해서 일치하면 해당 case 문장을 실행하고 빠져 • 나온다. • default는 case 값 외에 나머지 경우에 대해 정의 • case 문장 실행하고 제어 탈출을 위해 ‘break’문을 반드시 서술 • break; 문을 만나면 반복되는 블록의 마지막에서 반복 문을 이탈
- Switch 제어문 예제 - • NXT에 있는 버튼을 눌러서 로봇을 원하는 방향으로 움직이는 로봇 • nNxtExitClicks = 클릭 횟수 • : 횟수 만큼 취소 버튼을 연속으로 클릭하면 프로그램이 종료 • nNxtButtonPressed • : NXT의 어떤 버튼이 눌렸는지를 알려주는 변수 • 단, switch문을 사용하여 작성할 것
Mission IV (사각 턴 주행) 사각턴의 주행방법
- Function(함수)란?- • 프로그램 내에서 반복적으로 많이 사용되는 작업을 작은 모듈로 만드는 것 • 함수를 만들어 놓으면 내부처리과정을 신경쓰지 않아도 함수의 호출만으로 정확한 출력을 볼 수 있다. • 종류 • - 프로그램의 처음을 알리는 main 함수 • - 제작사에서 제공하는 표준 라이브러리 함수 • - 프로그래머가 필요에 따라 만들어 사용하는 사용자 정의 함수
- Function(함수)란?- • Return되는 데이터 형을 기록하고 다음에 함수 이름을 기록 • 매개변수들이 없거나 있을 수 있다. • 단, 매개변수를 사용하려면 호출하는 쪽의 매개변수의 개수와 받는 쪽의 매개변수의 개수가 같아야 한다.
- ROBOTC 함수(Function)- • 전진과 후진을 2번 반복 • 사용자 정의 함수를 사용하면 보다 효율적인 프로그래밍을 할 수 있다.
- ROBOTC 함수(매개 변수)- • 전진과 후진 함수의 속도와 시간을 다르게 설정하려면? • 매개변수를 받아 처리하는 함수로 제작하면 된다
- ROBOTC#include - • #include 사용하기 • 모듈단위로 작성된 함수 프로그램을 하나의 파일에 저장 • #include 문을 통해 함수 불러오기 하여 사용 • 소스가 매우 길어지는 문제 해결에 도움이 된다.
- 전처리기(Preprocessor) : 매크로 상수 - • 컴파일하기 전에 프로그램에 대해서 정의하여 대체(Replace) 하도록 하는 기능 • 하나의 기호상수나 자료 형을 다른 이름으로 대치시키도록 전처리기에 설정 • 매크로 상수가 실행되면 정의된 기호상수가 대치 • main() 함수가 시작되기 전에 먼저 정의해서 사용정의 후에 사용 • 모두 공백 없이 대문자로 사용하며 세미콜론을 사용하지 않는다.
MultiTasking • NXT는 최대 256개의 태스크를 지원하고 각각의 task는 라운드로빈 방식을 사용하여 각각의 태스크를 처리 • StartTask(TaskID); TaskID에 해당하는 Task를 시작하거나 다시 시작한다. • StopAllTasks (); 현재 실행중인 모든 Task를 중지한다.