AC모터를 정회전 50ms, 역회전 500ms의 작업을 반복하려면 아래와 같이 함. 여기에서 보면 반복작업이므로 while 루프가 무한반복실행된다. 대부분의 로봇프로그램(제어장치)는 이렇게 무한루프안에 실행된다 사실에 유의할 것!
#include "NXCDefs.h"
task main()
{
while(true)
{
OnFwd(OUT_AC, 50);
Wait(500);
OnRev(OUT_AC, 50);
Wait(500);
}
}
---------------------------------------------------------------------------------------------------------
여기에다 A,C모터의 속도를 측정해서, 표시해주고 싶다면,
아래와 같이, 새로운 변수들을 설정해서, 연산하고, 각 작업마다 속도계산하는 함수를 넣어주어야 한다.
#include "NXCDefs.h"
void DisplayVelocity()
{
long x1_A,x2_A,x1_C,x2_C,t1,t2;
float v_A,v_C;
string str;
x1_A=MotorRotationCount(OUT_A);
x1_C=MotorRotationCount(OUT_C);
t1=CurrentTick();
TextOut(0, LCD_LINE1, NumToStr(t1));
str=StrCat(" ", NumToStr(x1_A)," ", NumToStr(x1_C));
TextOut(0, LCD_LINE2, str);
Wait(10);
x2_A=MotorRotationCount(OUT_A);
x2_C=MotorRotationCount(OUT_C);
t2=CurrentTick();
TextOut(0, LCD_LINE3, NumToStr(t2));
str=StrCat(" ",NumToStr(x2_A)," ", NumToStr(x2_C));
TextOut(0, LCD_LINE4, str);
v_A=(x2_A-x1_A)/(t2-t1);
TextOut(0, LCD_LINE5, NumToStr(v_A));
v_C=(x2_C-x1_C)/(t2-t1);
TextOut(0, LCD_LINE6, NumToStr(v_C));
}
task main()
{
while(true)
{
OnFwd(OUT_AC, 50);
Wait(500);
DisplayVelocity();
OnRev(OUT_AC, 50);
Wait(500);
DisplayVelocity();
}
}
그런데, 이렇게 하면 위의 코드에서 보는바와 같이 속도측정하는 함수를 매번 불러줘야 하는 불편함과, 코드가 길어지고 지저분해진다. 이에 멀티태스킹이 필요하게 된다.!