小白入門,arduino控制PS2,淘寶商家給的碼,貌似不行
實物連接說明:
小車源程序和PS2庫
【PS手柄控制自動循跡紅外避障小車使用說明】
1、準備好PS2手柄及arduino UNO R3控制板
2、安裝好arduino IDE 后,將PS2X_lib.zip解壓到 Arduino\libraries 文件夾中!
3、按照連接圖連接好接收器與控制板(關鍵一步,基本上都是在這里出錯導致無法通信)
4、用USB方口線接到電腦,用IDE打開程序“Car_PS2_2TK_3POA.ino”,設置好端口號,將程序上傳到開發板;
5、使用說明:
1)打開Doit驅動板的電源開關,可觀察到驅動板連接的手柄接收器上的指示燈正處于閃爍狀態,將手柄的開
關撥到“on”檔,稍等片刻待手柄的控制器與接收器配對完成后便可觀察到接收器上的指示燈常亮;
2)分別按下手柄左邊的4個方向按鈕,可以控制小車的前進后退和左右轉,按下“SELECT”鍵小車停止運動;
3)右手按住右搖桿不放,左手分別搖動左搖桿也可以控制小車往不同方向行駛;
4)按下“□”,小車將進入“自動循跡模式”,按任一方向鍵或者“SELECT”小車停止循跡;
5)按下“○”,小車將進入“自動避障模式”,按任一方向鍵或者“SELECT”小車停止避障;
6)分別按下手柄右邊的“△”和“×”鍵可以手動控制小車的車燈亮滅和蜂鳴器鳴叫(注意:有些款式的坦
克車默認沒有裝LED燈故此功能沒有,之前版本里默認沒有蜂鳴器所以該功能也就沒有,但程序默認是有的,
若是非要該功能可自行外接實現);
單片機源程序如下:
- //材料:UNO開發板*1+2路電機&16路舵機驅動板*1+PS2游戲手柄套件*1+紅外循跡模塊*2+光電紅外避障傳感器*3+蜂鳴器*1
- //功能:手柄控制+2路紅外循跡+3路光電紅外避障
- //IIC與A4、A5復用了,所以不能用到!!!
- //避障參數 1--無障礙 0--障礙
- #include <PS2X_lib.h> //for v1.6
- /****************************IO引腳定義*****************************/
- //電機引腳
- #define PWMA 9 //左電機轉速
- #define DIRA 8 //左電機轉向
- #define PWMB 6 //右電機轉速
- #define DIRB 7 //右電機轉向
- //蜂鳴器引腳
- #define BEEP_PIN 3
- //車頭兩LED燈
- #define TLED_PIN 2
- //左右紅外循跡
- #define TRAKLEF A0 //紅外循跡左
- #define TRAKRIT A1 //紅外循跡右
- //3路光電紅外避障
- #define IRavoiFL A2 //紅外避障_前左
- #define IRavoiFM A3 //紅外避障_前中
- #define IRavoiFR A4 //紅外避障_前右
- /*******************************************************************/
- //設置引腳連接到PS2控制器:
- #define PS2_DAT 13
- #define PS2_CMD 11
- #define PS2_SEL 10
- #define PS2_CLK 12
- /******************************************************************
- *選擇PS2控制器的模式:
- * - 壓力=推桿的模擬讀數
- * - 震動?
- *取消注釋每個模式選擇的行1
- ******************************************************************/
- #define pressures true
- // #define pressures false
- #define rumble true
- // #define rumble false
- PS2X ps2x; //創建PS2控制器類
- //現在,庫不支持熱插拔控制器,即連接控制器后,你必須重啟Arduino
- //蜂鳴器響/熄
- #define BEEP_ON digitalWrite(BEEP_PIN, LOW)//蜂鳴器響
- #define BEEP_OFF digitalWrite(BEEP_PIN, HIGH)//蜂鳴器熄
- //車頭兩LED燈
- #define TLED_ON digitalWrite(TLED_PIN, LOW);//亮燈
- #define TLED_OFF digitalWrite(TLED_PIN, HIGH);//滅燈
- //定義小車速度
- uint8_t speedd=255;//小車正常速度
- uint8_t speeddAG=250;//小車循跡速度
- //小車控制標志量
- enum DS
- {
- MANUAL_DRIVE,//手動控制
- AutoTracking, //循跡模式
- AutoObstruct, //避障模式
- }Drive_Status=MANUAL_DRIVE;
- //電機控制標志量
- enum DN
- {
- GO_ADVANCE,
- GO_LEFT,
- GO_RIGHT,
- GO_BACK,
- STOP_STOP,
- DEF
- }Drive_Num=DEF;
- //電機控制相關
- bool flag1=false;
- bool stopFlag = true;
- bool JogFlag = false;
- uint16_t JogTimeCnt = 0;
- uint32_t JogTime=0;
- //PS2手柄
- int error = 0;
- byte type = 0;
- byte vibrate = 0;
- /**********************************************************************************************/
- /******************************功能函數**********************************/
- //電機控制
- void Car_GO_FORWARD(uint8_t spel, uint8_t sper, int tim=0)//小車前進
- {
- uint8_t speeddl=spel;
- uint8_t speeddr=sper;
- digitalWrite(DIRA,HIGH);
- analogWrite(PWMA,speeddl);
- digitalWrite(DIRB,HIGH);
- analogWrite(PWMB,speeddr);
- delay(tim);
- }
- void Car_GO_LEFT(uint8_t spel,uint8_t sper, int tim=0)//車體左轉
- {
- uint8_t speeddl=spel;
- uint8_t speeddr=sper;
- digitalWrite(DIRA,LOW);
- analogWrite(PWMA,speeddl);
- digitalWrite(DIRB,HIGH);
- analogWrite(PWMB,speeddr);
- delay(tim);
- }
- void Car_GO_RIGHT(uint8_t spel,uint8_t sper, int tim=0)//車體右轉
- {
- uint8_t speeddl=spel;
- uint8_t speeddr=sper;
- digitalWrite(DIRA,HIGH);
- analogWrite(PWMA,speeddl);
- digitalWrite(DIRB,LOW);
- analogWrite(PWMB,speeddr);
- delay(tim);
- }
- void Car_GO_STOP(uint8_t spel,uint8_t sper, int tim=0)//車體停止
- {
- uint8_t speeddl=spel;
- uint8_t speeddr=sper;
- digitalWrite(DIRA,LOW);
- analogWrite(PWMA,speeddl);
- digitalWrite(DIRB,LOW);
- analogWrite(PWMB,speeddr);
- delay(tim);
- }
- void Car_GO_BACK(uint8_t spel,uint8_t sper, int tim=0)//車體后退
- {
- uint8_t speeddl=spel;
- uint8_t speeddr=sper;
- digitalWrite(DIRA,LOW);
- analogWrite(PWMA,speeddl);
- digitalWrite(DIRB,LOW);
- analogWrite(PWMB,speeddr);
- delay(tim);
- }
- //讀2路循跡傳感器值
- uint8_t readIRM_ab()
- {
- uint8_t temp1=0, tem=0;
- uint8_t IRt_L = analogRead(TRAKLEF)>500?1:0; //循跡左
- uint8_t IRt_R = analogRead(TRAKRIT)>500?1:0; //循跡右
- temp1 |= IRt_L;
- tem = (temp1<<1)|IRt_R; //循跡狀態值
- return 0x03&tem;
- // Serial.println(String("temp=")+temp);
- }
- uint8_t readIRM_av()
- {
- uint8_t IRa_FL = analogRead(IRavoiFL)>500?1:0; //避障前左
- uint8_t IRa_FM = analogRead(IRavoiFM)>500?1:0;//避障前中左
- uint8_t IRa_FR = analogRead(IRavoiFR)>500?1:0; //避障前右
- uint8_t temp1=0, tem=0;
- temp1 |= IRa_FL;
- temp1 = (temp1 <<1)|IRa_FM;
- tem = (temp1 <<1)|IRa_FR;//避障狀態值
- return 0x07&tem;
- }
- //循跡模式
- void TrakCar()//2路循跡函數
- {
- uint8_t temabir=readIRM_ab();
- switch(temabir)
- {
- case 0://左白右白
- Car_GO_BACK(speeddAG,speeddAG);// 后退
- break;
- case 1://左白右黑
- Car_GO_RIGHT(speeddAG,speeddAG);// 右拐
- break;
- case 2://左黑右白
- Car_GO_LEFT(speeddAG,speeddAG);// 左拐
- break;
- case 3://左黑右黑
- Car_GO_FORWARD(speeddAG,speeddAG);// 前進
- break;
- default://皆不是
- Car_GO_STOP(0,0);//靜止
- }
- }
- void ObstruCar()//3路避障函數
- {
- uint8_t temavoi = readIRM_av();
- if((temavoi&0x02)==0)//中有障礙
- {
- if((temavoi&0x04)==0)//左有障礙
- {
- if((temavoi&0x01)==0)//右有障礙
- {
- Car_GO_STOP(0,0);
- //左中右都有障礙 后退,檢測3次左右還是有障礙的話就停在原地不動
- uint8_t cnt =0;
- for(cnt=0; cnt<3; cnt++)
- {
- BEEP_ON;
- Car_GO_BACK(speedd,speedd, 300);
- temavoi = readIRM_av();
- if((temavoi&0x05)!=0)
- break;
- }
- if(cnt<3)
- {
- if((temavoi&0x04)==0x04)
- {
- BEEP_OFF;
- Car_GO_LEFT(speedd,speedd);
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- else if((temavoi&0x01)==0x01)
- {
- BEEP_OFF;
- Car_GO_RIGHT(speedd,speedd);
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- }
- else
- {
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=STOP_STOP;
- }
- }
- else//右無障礙
- {
- //左中 有障礙-----雙輪向右
- BEEP_OFF;
- Car_GO_RIGHT(speedd,speedd);//MOTOR_GO_RIGHT2;
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- }
- else//左無障礙
- {
- if((temavoi&0x01)==0)//右有障礙
- {
- // 中右 有障礙-----雙輪向左
- BEEP_OFF;
- Car_GO_LEFT(speedd,speedd);//MOTOR_GO_LEFT2;
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- else//右無障礙
- {
- // 中 有障礙------后退
- BEEP_ON;
- Car_GO_BACK(speedd,speedd, 300);//MOTOR_GO_BACK;
- Car_GO_LEFT(speedd,speedd);
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- BEEP_OFF;
- }
- }
- }
- else//中無障礙
- {
- if((temavoi&0x04)==0)//左有障礙
- {
- if((temavoi&0x01)==0)//右有障礙
- {
- //左 右 有障礙-------后退
- uint8_t cne =0;
- for(cne=0; cne<3; cne++)
- {
- BEEP_ON;
- Car_GO_BACK(speedd,speedd, 300);
- temavoi = readIRM_av();
- if((temavoi&0x05)!=0)
- break;
- }
- if(cne<3)
- {
- if((temavoi&0x04)==0x04)
- {
- BEEP_OFF;
- Car_GO_LEFT(speedd,speedd);
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- else if((temavoi&0x01)==0x01)
- {
- BEEP_OFF;
- Car_GO_RIGHT(speedd,speedd);
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- }
- else
- {
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=STOP_STOP;
- }
- }
- else//右無障礙
- {
- //左 有障礙-------雙輪向右
- BEEP_ON;
- Car_GO_RIGHT(speedd,speedd);//MOTOR_GO_RIGHT2;
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- }
- else//左無障礙
- {
- if((temavoi&0x01)==0)//右有障礙
- {
- // 右 有障礙--------雙輪向左
- BEEP_ON;
- Car_GO_LEFT(speedd,speedd);//MOTOR_GO_LEFT2;
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- else//右無障礙
- {
- // 無障礙-------前進
- BEEP_OFF;
- Car_GO_FORWARD(speedd,speedd);//MOTOR_GO_FORWARD;
- JogFlag = true;JogTimeCnt = 1;JogTime=millis();
- }
- }
- }
- if(millis()-JogTime>=700)
- {
- JogTime=millis();
- if(JogFlag == true)
- {
- stopFlag = false;
- if(JogTimeCnt <= 0)
- {
- JogFlag = false; stopFlag = true;
- }
- JogTimeCnt--;
- }
- if(stopFlag == true)
- {
- JogTimeCnt=0;
- Car_GO_STOP(0,0);
- }
- }
- }
- //小車電機控制
- void CAR_Control()
- {
- if(Drive_Status == MANUAL_DRIVE)
- {
- switch (Drive_Num)
- {
- case GO_ADVANCE:Car_GO_FORWARD(speedd,speedd);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;
- case GO_LEFT: Car_GO_LEFT(speedd,speedd);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;
- case GO_RIGHT:Car_GO_RIGHT(speedd,speedd);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;
- case GO_BACK:Car_GO_BACK(speedd,speedd);JogFlag = true;JogTimeCnt = 1;JogTime=millis();break;
- case STOP_STOP:Car_GO_STOP(0,0);JogTime = 0;JogFlag=false;stopFlag=true;break;
- default:break;
- }
- Drive_Num=DEF;
- //小車保持姿態210ms
- if(millis()-JogTime>=210)
- {
- JogTime=millis();
- if(JogFlag == true)
- {
- stopFlag = false;
- if(JogTimeCnt <= 0)
- {
- JogFlag = false; stopFlag = true;
- }
- JogTimeCnt--;
- }
- if(stopFlag == true)
- {
- JogTimeCnt=0;
- Car_GO_STOP(0,0);
- }
- }
- }
- else if(Drive_Status==AutoObstruct)
- {
- ObstruCar();//避障
- }
- }
- ////////////////////////////////////////////////////////////////////////////////////
- // 重置功能
- void (* resetFunc) (void) = 0;
- void check_PS2()
- {
- error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
- if(error == 0)
- {
- Serial.print(F("Found Controller, configured successful "));//Found Controller,配置成功
- }
- else if(error == 1)//沒有控制器,檢查接線,使調試方法見。訪問故障提示www.billporter.info
- Serial.println(F("No controller found!"));
- else if(error == 2)//發現控制器但不接受命令。方法見啟用調試。訪問故障提示www.billporter.info
- Serial.println(F("Controller found but not accepting commands. "));
- else if(error == 3)//控制器拒絕進入壓力模式,可能不支持。
- Serial.println(F("Controller not support Pressures mode."));
- type = ps2x.readType();
- switch(type)
- {
- case 0:
- Serial.println(F("Unknown Controller type found "));//發現未知控制器類型
- break;
- case 1:
- Serial.println(F("DualShock Controller found "));//發現DualShock控制器////////////////////////////
- break;
- case 2:
- Serial.println(F("GuitarHero Controller found "));//guitarhero控制器發現
- break;
- case 3:
- Serial.println(F("Wireless Sony DualShock Controller found "));//無線索尼DualShock控制器發現
- break;
- }
- }
- void PS2_Control()
- {
- /* 您必須讀取Gamepad才能獲取新值并設置振動值
- ?????ps2x.read_gamepad(小電機開/關,較大電機強度從0-255)
- ?????如果不開啟震動功能,請使用ps2x.read_gamepad();
- 沒有值你應該至少稱之為一秒鐘
- */
- if(error == 1)
- { //如果沒有控制器發現,跳過循環
- resetFunc();
- }
- if(type == 2)
- { //guitarhero控制器
- ps2x.read_gamepad();//讀控制器
- return;
- }
- else
- { //DualShock控制器
- ps2x.read_gamepad(false, vibrate); //讀取控制器并設置大電機以“振動”速度旋轉
- if(ps2x.Button(PSB_START)) //按下START啟動遙控 只要按下按鈕,它將為TRUE
- Serial.println(F("Start !"));
- if(ps2x.Button(PSB_SELECT))//按下SELECT(選擇) 停止
- {
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=STOP_STOP;
- }
- if(ps2x.Button(PSB_PAD_UP))//按下 UP上 前進
- {
- speedd = map(ps2x.Analog(PSAB_PAD_UP),0,255,100,255);//方向按鍵壓力轉化為小車的速度--越用力按壓速度越快,下同
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_ADVANCE;
- }
- if(ps2x.Button(PSB_PAD_RIGHT))//按下 RIGHT右 右轉
- {
- speedd = map(ps2x.Analog(PSAB_PAD_RIGHT),0,255,100,255);
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_RIGHT;
- }
- if(ps2x.Button(PSB_PAD_LEFT))//按下 LEFT左 左轉
- {
- speedd = map(ps2x.Analog(PSAB_PAD_LEFT),0,255,100,255);
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_LEFT;
- }
- if(ps2x.Button(PSB_PAD_DOWN))//按下 DOWN下 后退
- {
- speedd = map(ps2x.Analog(PSAB_PAD_DOWN),0,255,100,255);
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_BACK;
- }
- vibrate = ps2x.Analog(PSAB_CROSS); //這將根據您按下藍色(X)按鈕的難度設置大型電機振動速度
- if (ps2x.NewButtonState())
- { //如果任何按鈕改變狀態(關閉或關閉至開啟)將為TRUE
- if(ps2x.Button(PSB_L3))//按下左搖桿
- {
- Serial.println(F("L3 pressed"));
- }
- if(ps2x.Button(PSB_TRIANGLE))//按下 △
- {
- BEEP_ON;//蜂鳴器響
- TLED_ON;//亮燈
- }
- }
- if(ps2x.NewButtonState(PSB_CROSS)) //按下按下 X
- {
- BEEP_OFF;//蜂鳴器滅
- TLED_OFF;//滅燈
- }
- if(ps2x.ButtonReleased(PSB_SQUARE)) //按下 □ 循跡
- {
- Drive_Status=AutoTracking;//循跡
- }
- if(ps2x.ButtonPressed(PSB_CIRCLE)) //按下 ○ 避障
- {
- Drive_Status=AutoObstruct;//避障
- }
- if(ps2x.Button(PSB_R3))//按下右搖桿 搖動左搖桿控制小車前進后退左右轉
- {
- if(ps2x.Analog(PSS_LX)>127)
- {
- speedd = map(ps2x.Analog(PSS_LX),127,255,0,255);
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_RIGHT;
- }
- if(ps2x.Analog(PSS_LX)<127)
- {
- speedd = map(ps2x.Analog(PSS_LX),127,0,0,255);
- Drive_Status=MANUAL_DRIVE;
- Drive_Num=GO_LEFT;
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼- #include <PS2X_lib.h> //for v1.6
- PS2X ps2x; // create PS2 Controller Class
- //right now, the library does NOT support hot pluggable controllers, meaning
- //you must always either restart your Arduino after you conect the controller,
- //or call config_gamepad(pins) again after connecting the controller.
- int error = 0;
- byte type = 0;
- byte vibrate = 0;
- void setup(){
- Serial.begin(57600);
- //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
- error = ps2x.config_gamepad(13,11,10,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error
- if(error == 0){
- Serial.println("Found Controller, configured successful");
- Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
- Serial.println("holding L1 or R1 will print out the analog stick values.");
- Serial.println("Go to www*billporter*info for updates and to report bugs.");
- }
- else if(error == 1)
- Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www*billporter*info for troubleshooting tips");
- else if(error == 2)
- Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www*billporter*info for troubleshooting tips");
- else if(error == 3)
- Serial.println("Controller refusing to enter Pressures mode, may not support it. ");
- //Serial.print(ps2x.Analog(1), HEX);
- type = ps2x.readType();
- switch(type) {
- case 0:
- Serial.println("Unknown Controller type");
- break;
- case 1:
- Serial.println("DualShock Controller Found");
- break;
- case 2:
- Serial.println("GuitarHero Controller Found");
- break;
- }
- }
- void loop(){
- /* You must Read Gamepad to get new values
- Read GamePad and set vibration values
- ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
- if you don't enable the rumble, use ps2x.read_gamepad(); with no values
- you should call this at least once a second
- */
- if(error == 1) //skip loop if no controller found
- return;
- if(type == 2){ //Guitar Hero Controller
- ps2x.read_gamepad(); //read controller
- if(ps2x.ButtonPressed(GREEN_FRET))
- Serial.println("Green Fret Pressed");
- if(ps2x.ButtonPressed(RED_FRET))
- Serial.println("Red Fret Pressed");
- if(ps2x.ButtonPressed(YELLOW_FRET))
- Serial.println("Yellow Fret Pressed");
- if(ps2x.ButtonPressed(BLUE_FRET))
- Serial.println("Blue Fret Pressed");
- if(ps2x.ButtonPressed(ORANGE_FRET))
- Serial.println("Orange Fret Pressed");
- if(ps2x.ButtonPressed(STAR_POWER))
- Serial.println("Star Power Command");
- if(ps2x.Button(UP_STRUM)) //will be TRUE as long as button is pressed
- Serial.println("Up Strum");
- if(ps2x.Button(DOWN_STRUM))
- Serial.println("DOWN Strum");
- if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed
- Serial.println("Start is being held");
- if(ps2x.Button(PSB_SELECT))
- Serial.println("Select is being held");
- if(ps2x.Button(ORANGE_FRET)) // print stick value IF TRUE
- {
- Serial.print("Wammy Bar Position:");
- Serial.println(ps2x.Analog(WHAMMY_BAR), DEC);
- }
- }
- else { //DualShock Controller
- ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed
- if(ps2x.Button(PSB_START)) //will be TRUE as long as button is pressed
- Serial.println("Start is being held");
- if(ps2x.Button(PSB_SELECT))
- Serial.println("Select is being held");
- if(ps2x.Button(PSB_PAD_UP)) { //will be TRUE as long as button is pressed
- Serial.print("Up held this hard: ");
- Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
- }
- if(ps2x.Button(PSB_PAD_RIGHT)){
- Serial.print("Right held this hard: ");
- Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
- }
- if(ps2x.Button(PSB_PAD_LEFT)){
- Serial.print("LEFT held this hard: ");
- Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
- }
- if(ps2x.Button(PSB_PAD_DOWN)){
- Serial.print("DOWN held this hard: ");
- Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
- }
- vibrate = ps2x.Analog(PSAB_BLUE); //this will set the large motor vibrate speed based on
- //how hard you press the blue (X) button
- if (ps2x.NewButtonState()) //will be TRUE if any button changes state (on to off, or off to on)
- {
- if(ps2x.Button(PSB_L3))
- Serial.println("L3 pressed");
- if(ps2x.Button(PSB_R3))
- Serial.println("R3 pressed");
- if(ps2x.Button(PSB_L2))
- Serial.println("L2 pressed");
- if(ps2x.Button(PSB_R2))
- Serial.println("R2 pressed");
- if(ps2x.Button(PSB_GREEN))
- Serial.println("Triangle pressed");
- }
- if(ps2x.ButtonPressed(PSB_RED)) //will be TRUE if button was JUST pressed
- Serial.println("Circle just pressed");
- if(ps2x.ButtonReleased(PSB_PINK)) //will be TRUE if button was JUST released
- Serial.println("Square just released");
- if(ps2x.NewButtonState(PSB_BLUE)) //will be TRUE if button was JUST pressed OR released
- Serial.println("X just changed");
- if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) // print stick values if either is TRUE
- {
- Serial.print("Stick Values:");
- Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX
- Serial.print(",");
- Serial.print(ps2x.Analog(PSS_LX), DEC);
- Serial.print(",");
- Serial.print(ps2x.Analog(PSS_RY), DEC);
- Serial.print(",");
- Serial.println(ps2x.Analog(PSS_RX), DEC);
- }
- }
- delay(50);
- }
復制代碼
所有資料51hei提供下載:
手柄控制2路紅外自動循跡3路紅外光電避障小車使用說明.rar
(463.7 KB, 下載次數: 28)
2018-5-30 12:53 上傳
點擊文件名下載附件
|