一、Touch Sensor
//讓機器人撞到東西後會後退轉彎
task main()
{
- SetSensorTouch(IN_1);//設定 port 1接到碰觸感應器,IN_1 也可以用 S1取代
OnFwd(OUT_BC, 80);
while (true)
{
- if (SENSOR_1==1)// port 1讀到的數值會存在SENSOR_1中
{
- OnRev(OUT_BC, 80); Wait(300);
OnFwd(OUT_B, 80); Wait(500);
OnFwd(OUT_BC, 80);
} //end if
} //end while
}
二、Light Sensor
//簡易循跡車
#define _LIGHT 45
#define _POWER 50
#define _TURN_TIME 100
task main()
{
- SetSensorLight(IN_3); //或用 S3
while (true)
{
- if (SENSOR_3<=_LIGHT)//左轉修正
{
- NumOut(5,20,SENSOR_3,true);
Off(OUT_C);
OnFwd(OUT_B, _POWER); Wait(_TURN_TIME);
}
else //右轉修正
{
- NumOut(5,20,SENSOR_3,true);
Off(OUT_B);
OnFwd(OUT_C, _POWER); Wait(_TURN_TIME);
}
} //end while
}
三、Sound Sensor
(未完待續...)
四、Ultra sonic Sensor
五、角度 Sensor
六、進階用法
不好意思!我是剛接觸的新手 請問一下
回覆刪除我想要
當(SENSOR_1==1)時就會做到退指令 當(SENSOR_2==1)時也會做到退指令 同時壓到時也做到退指令
這樣我該怎麼把程式碼寫進去??
麻煩大大撥空一下謝謝!!
您好:
回覆刪除因為尚未說明多工的寫法,
在此請於if中使用布林運算:
且(and)-> &&
或(or)-> ||
程式如下:
task main(){
SetSensorTouch(IN_1);
SetSensorTouch(IN_2);
OnFwd(OUT_BC,80);
while(true){
if((SENSOR_1==1) || (SENSOR_2==1) || (SENSOR_1==1 && SENSOR_2==1)){
OnRev(OUT_B,50);
Wait(2000);
OnFwd(OUT_BC,80);
}
}
}
其實,使用
if((SENSOR_1==1) || (SENSOR_2==1))
就可以了。
非常感謝大大^^ 我馬上來試試
回覆刪除不好意思又來請教您!!
回覆刪除#define SOUND 90
#define MIC S3
task main()
{
SetSensorSound(S3);
while(true)
{
if((MIC>SOUND))
OnFwd(OUT_AB,80);
until(MIC > SOUND);
Off(OUT_AB);
}
}
這個程式是我看書上寫的 但是找不出原因為何沒反應!
煩請大大幫忙 謝謝
請把第二行
回覆刪除#define MIC S3
改成
#define MIC SENSOR_3
試試看
抱歉 最近工作有點忙 拖這們晚回你~
回覆刪除謝謝大大幫忙我馬上去測試
您好!不好意思我們的程式有問題想請教一下!我們的程式無法條件性觸發超音波..麻煩您了!!
回覆刪除int i;
task main()
{
while(true)
{
OnFwd(OUT_AB,90);
if(SensorUS(S1)<20)
{
Off(OUT_AB);
OnRev(OUT_AB,90);
Wait(3000);
Off(OUT_AB);
i=Random(1);
if(i==0){
OnFwd(OUT_A,90);
Wait(1000);
}
if(i==1){
OnFwd(OUT_B,90);
Wait(1000);
}
}
if(SensorUS(S2)<=20)
{
Off(OUT_AB);
OnFwd(OUT_A,90);
Wait(1000);
}
if(SensorUS(S3)<20)
{
Off(OUT_AB);
OnFwd(OUT_B,90);
Wait(1000);
}
}
}
若要與上面超音波合在一起要怎麼修改!?謝謝!!
回覆刪除int j;
int sum;
task main()
{
OnFwd(OUT_ABC,90);
Wait(1000);
Off(OUT_ABC);
while(true)
{
OnFwd(OUT_AB,90);
j=Random(100);
sum=0;
if(j<50){
Off(OUT_AB);
OnFwd(OUT_A,90);
Wait(1000);
OnFwd(OUT_AB,90);
Wait(j*100);
sum=sum+(j*100);
}else{
Off(OUT_AB);
OnFwd(OUT_B,90);
Wait(1000);
OnFwd(OUT_AB,90);
Wait(j*100);
sum=sum+(j*100);
}
if(sum>=5000){
break;
}
}
OnRev(OUT_C,90);
Wait(1000);
Off(OUT_ABC);
}
要使用SetSensorLowspeed(port)先設定Out Port是接Ultrasonic才行喔!
回覆刪除請參考底下範例:
task main()
{
const int d=20;
SetSensorLowspeed(S1);
SetSensorLowspeed(S2);
SetSensorLowspeed(S3);
while(true)
{
if(SensorUS(S1)<d)
{
TextOut(10,2,"S1<d");
OnFwd(OUT_A,90);
}
if(SensorUS(S2)<=d)
{
TextOut(10,2,"S2<d");
OnFwd(OUT_B,90);
}
if(SensorUS(S3)<d)
{
TextOut(10,2,"S3<d");
OnFwd(OUT_C,90);
}
Wait(1000);
Off(OUT_ABC);
}
}
請問1. 按下右鍵在NXT螢幕右方顯示RIGHT;
回覆刪除2. 按下左鍵在NXT螢幕左方顯示LEFT;
3. 按下中鍵在NXT螢幕中間顯示ENTER;
4. 按下ESCAPE鍵則輸出一段音樂後離開程式。
這要如何寫哩?
task main()
回覆刪除{
bool btExit, btRight, btLeft, btCenter;
SetLongAbort(true); //讓Exit功能進入長按模式,此功能要使用NXC的firmware
SetAbortFlag(BTNSTATE_LONG_PRESSED_EV); //進入長按模式,此功能要使用NXC的firmware
while (true)
{
btExit = ButtonPressed(BTNEXIT,false);
btRight = ButtonPressed(BTNRIGHT,false);
btLeft = ButtonPressed(BTNLEFT,false);
btCenter = ButtonPressed(BTNCENTER,false);
ClearScreen(); //清除螢幕
if (btExit){
while(ButtonPressed(BTNEXIT,false)==1); //等放開後才往下執行
PlayFile("Woops.rso");
TextOut(10,2,"Exit"); //在 (10,2)的位置(第一象限)輸出 Exit 字串
Wait(2000); //等候2秒
ClearScreen(); //清除螢幕
StopAllTasks(); //停止程式
}
if (btRight){
while(ButtonPressed(BTNRIGHT,false)==1); //等放開後才往下執行
TextOut(60,2,"Right"); //在 (60,2)的位置(第一象限)輸出 Right 字串
Wait(2000); //等候2秒
ClearScreen(); //清除螢幕
}
if (btLeft){
while(ButtonPressed(BTNLEFT,false)==1); //等放開後才往下執行
TextOut(10,2,"Left"); //在 (10,2)的位置(第一象限)輸出 Left 字串
Wait(2000); //等候2秒
ClearScreen(); //清除螢幕
}
if (btCenter){
while(ButtonPressed(BTNCENTER,false)==1); //等放開後才往下執行
TextOut(30,2,"Center"); //在 (30,2)的位置(第一象限)輸出 Center 字串
Wait(2000); //等候2秒
ClearScreen(); //清除螢幕
}
}
} //end while
}
作者已經移除這則留言。
回覆刪除版大您好,我是剛接觸這塊領域的生手
回覆刪除想做一個機械手臂,請問要怎麼讓機械手臂往下夾起物品後,在使他上升後,再向右平移放下物品。
目前做到了 往下觸碰感應物品後會夾起物品,再上升,但他只會無限上升,卡關了
task main()
{
SetSensorTouch(IN_1);//設定 port 1接到碰觸感應器,IN_1 也可以用 S1取代
OnRev(OUT_B, 80);
while (true)
{
if (SENSOR_1==1)// port 1讀到的數值會存在SENSOR_1中
{
OnFwd(OUT_A, 30); Wait(300);
OnFwd(OUT_B, 50); Wait(300);
} //end if
} //end while
}
因為您把程式寫在while(true)迴圈裏了,所以會一直上升,
回覆刪除請改成
task main()
{
SetSensorTouch(IN_1);//設定 port 1接到碰觸感應器,IN_1 也可以用 S1取代
OnRev(OUT_B, 80);
if (SENSOR_1==1)// port 1讀到的數值會存在SENSOR_1中
{
OnFwd(OUT_A, 30); Wait(300);
OnFwd(OUT_B, 50); Wait(300);
} //end if
}
請問是直接把這串task main()
回覆刪除{
SetSensorTouch(IN_1);//設定 port 1接到碰觸感應器,IN_1 也可以用 S1取代
OnRev(OUT_B, 80);
if (SENSOR_1==1)// port 1讀到的數值會存在SENSOR_1中
{
OnFwd(OUT_A, 30); Wait(300);
OnFwd(OUT_B, 50); Wait(300);
} //end if
}
輸入進去就可以了嗎?
我丟進去執行後 機械手臂只會往下動,約一秒就停止了,不知道是怎麼回事~"~
有沒有怎控制陀螺儀的範例程式~
回覆刪除作者已經移除這則留言。
回覆刪除期待您把多工的部分補上>_<我很想了解這部分!
回覆刪除謝謝。由於工作很忙,但我會盡力試試。
回覆刪除