足球機器人設定 |
缺席
|
walkincloud
一般會員 發表:1 回覆:3 積分:0 註冊:2005-05-06 發送簡訊給我 |
unsigned char data ballcolor _at_ 0x30; //球的顏色值,0為紅,1為綠,2黃
unsigned char data ballx _at_ 0x31; //球的X值
unsigned char data bally _at_ 0x32; //球的Y值
unsigned char data door_l _at_ 0x33; //球門的左邊界值
unsigned char data door_r _at_ 0x34; //球門的右邊界值
unsigned char data door_t _at_ 0x35; //球門的上邊界值
unsigned char data door_d _at_ 0x36; //球門的下邊界值 那位高人可否解釋一下這個要如何設定
|
wu-eric
中階會員 發表:14 回覆:82 積分:64 註冊:2004-03-17 發送簡訊給我 |
|
walkincloud
一般會員 發表:1 回覆:3 積分:0 註冊:2005-05-06 發送簡訊給我 |
#include "Cpu8052.h" #include #include /*下面的副函式是用來與SENSOR聯繫*/ /*-----------------------------------------------------*/ extern void I2C_StopBit(void); extern void I2C_StartBit(void); extern void I2CSendData(unsigned char value); extern void IR001Rece_I2CData(void); extern void Check_StartBit(void); /*-----------------------------------------------------*/ /*-----------------------------------------------------*/ unsigned char data ballcolor _at_ 0x30; //球的顏色值,0為紅,1為綠,2為黃 unsigned char data ballx _at_ 0x31; //球的X值 unsigned char data bally _at_ 0x32; //球的Y值 unsigned char data door_l _at_ 0x33; //球門的左邊界值 unsigned char data door_r _at_ 0x34; //球門的右邊界值 unsigned char data door_t _at_ 0x35; //球門的上邊界值 unsigned char data door_d _at_ 0x36; //球門的下邊界值 void delay(int dly) { int dly1,dly2; for (;dly>0;dly--) for(dly1=70;dly1>0;dly1--) for(dly2=5;dly2>0;dly2--); } /*------------------------------------*/ /*右邊馬達轉動 */ /*fr=0為後退,fr=1為前進 */ /*stp為轉動步數,200為一圈 */ /*tim為時間,1最快 */ /*------------------------------------*/ void RRUN(int fr,int stp,int tim) { int nowl; while(stp && fr==1) { nowl=(P1&0xc0)>>6; nowl=nowl 1; if(nowl>3) nowl=0; P1=(P1&0x3f) nowl<<6; delay(tim); stp=stp-1; } while(stp && fr==0) { nowl=(P1&0xc0)>>6; nowl=nowl-1; if(nowl<0) nowl=3; P1=(P1&0x3f) nowl<<6; delay(tim); stp=stp-1; } } /*------------------------------------*/ /*左邊馬達轉動 */ /*fr=0為後退,fr=1為前進 */ /*stp為轉動步數,200為一圈 */ /*tim為時間,1最快 */ /*------------------------------------*/ void LRUN(int fr,int stp,int tim) { int nowl; while(stp && fr==0) { nowl=(P1&0x30)>>4; nowl=nowl 1; if(nowl>3) nowl=0; P1=(P1&0xcf) nowl<<4; delay(tim); stp=stp-1; } while(stp && fr==1) { nowl=(P1&0x30)>>4; nowl=nowl-1; if(nowl<0) nowl=3; P1=(P1&0xcf) nowl<<4; delay(tim); stp=stp-1; } } /*------------------------------------*/ /*兩邊馬達轉動 */ /*fr=0為後退,fr=1為前進 */ /*stp為轉動步數,200為一圈 */ /*tim為時間,1最快 */ /*------------------------------------*/ void BOTHRUN(int fr,int stp,int tim) { int nowl,nowr; while(stp && fr==0) { nowl=(P1&0xc0)>>6; nowl=nowl-1; if(nowl<0) nowl=3; nowl=nowl<<6; nowr=(P1&0x30)>>4; nowr=nowr 1; if(nowr>3) nowr=0; P1=(P1&0x0f) (nowr<<4) nowl; delay(tim); stp=stp-1; } while(stp && fr==1) { nowl=(P1&0xc0)>>6; nowl=nowl 1; if(nowl>3) nowl=0; nowl=nowl<<6; nowr=(P1&0x30)>>4; nowr=nowr-1; if(nowr<0) nowr=3; P1=(P1&0x0f) (nowr<<4) nowl; delay(tim); stp=stp-1; } } main() { while(1) { /* LRUN(0,200,1); delay(200); LRUN(1,200,1); delay(200); RRUN(0,200,1); delay(200); RRUN(1,200,1); delay(200); BOTHRUN(0,200,1); delay(200); BOTHRUN(1,200,1); delay(200); */ Check_StartBit(); IR001Rece_I2CData(); if(ballx>16 && ballx<24 ) { BOTHRUN(1,200,1); delay(200); BOTHRUN(0,200,1); delay(200); } else LRUN(1,15,1); I2C_StartBit(); I2CSendData(0xff); I2CSendData(0xff); if(P0_0==0 && P0_1==0) I2CSendData(0x00); else if(P0_0==1 && P0_1==0) I2CSendData(0x01); else I2CSendData(0x02); I2C_StopBit(); } }SORRY 這個是完整程式而目前的問題有 1.如何設定邊球場邊界及機器人起使點 unsigned char data ballx _at_ 0x31; //球的X值 unsigned char data bally _at_ 0x32; //球的Y值 就是 0x31 代表什麼意思? 2.要如何設定才能讓機器人跑的更快 P.S:下次我會直接幫你丟到回收區! 發表人 - ㊣ 於 2005/05/08 20:01:53 |
㊣
版主 發表:261 回覆:2302 積分:1667 註冊:2005-01-04 發送簡訊給我 |
|
wu-eric
中階會員 發表:14 回覆:82 積分:64 註冊:2004-03-17 發送簡訊給我 |
引言: SORRY 這個是完整程式而目前的問題有 1.如何設定邊球場邊界及機器人起使點 unsigned char data ballx _at_ 0x31; //球的X值 unsigned char data bally _at_ 0x32; //球的Y值 就是 0x31 代表什麼意思? 2.要如何設定才能讓機器人跑的更快1. 0x31,0x32 我想是X,Y值存放在記憶體中的位置 2. 下列方法可讓你的步進馬達快一倍,不過要看你的步進馬達是否可承受如此快的脈波,若無法承受,就只能在Delay函式中修改了 LRUN(0,200,0); delay(200); LRUN(1,200,0); delay(200); RRUN(0,200,0); delay(200); RRUN(1,200,0); delay(200); BOTHRUN(0,200,0); delay(200); BOTHRUN(1,200,0); delay(200); 3.最好附上你的電話,這樣可使大家更容易看 發表人 - Wu-Eric 於 2005/05/08 20:10:25 |
walkincloud
一般會員 發表:1 回覆:3 積分:0 註冊:2005-05-06 發送簡訊給我 |
|
walkincloud
一般會員 發表:1 回覆:3 積分:0 註冊:2005-05-06 發送簡訊給我 |
[1. 0x31,0x32 我想是X,Y值存放在記憶體中的位置
2. 下列方法可讓你的步進馬達快一倍,不過要看你的步進馬達是否可承受如此快的脈波,若無法承受,就只能在Delay函式中修改了
LRUN(0,200,0);
delay(200);
LRUN(1,200,0);
delay(200);
RRUN(0,200,0);
delay(200);
RRUN(1,200,0);
delay(200);
BOTHRUN(0,200,0);
delay(200);
BOTHRUN(1,200,0);
delay(200);
可不可以勞煩解釋一下為什麼要這要改以及程式的意思 PS我在此先承認我的C語言是超低空過關 發表人 - Wu-Eric 於 2005/05/08 20:10:25
[/quote]
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |