小白入门,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)
|