今天测试了一下无线手柄控制电机转向的改变

   1: #include <PS2X_lib.h>  //for v1.6

   2: #include <Stepper.h>

   3:  

   4: #define PS2_DAT        13  //14    

   5: #define PS2_CMD        11  //15

   6: #define PS2_SEL        10  //16

   7: #define PS2_CLK        12  //17

   8:  

   9: #define pressures   true

  10: //#define pressures   false

  11: #define rumble      true

  12: //#define rumble      false

  13:  

  14: PS2X ps2x; // create PS2 Controller Class

  15:  

  16:  

  17: int error = 0;

  18: byte type = 0;

  19: byte vibrate = 0;

  20: int stepsPerRevolution = 200;

  21:  

  22: Stepper myStepper(stepsPerRevolution,9,7,8,6);

  23:  

  24: void setup(){

  25:  

  26:   myStepper.setSpeed(60);

  27:   Serial.begin(57600);

  28:   

  29:   delay(300);  //added delay to give wireless ps2 module some time to startup, before configuring it

  30:  

  31:   error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);

  32:   

  33:   if(error == 0){

  34:     Serial.print("Found Controller, configured successful ");

  35:     Serial.print("pressures = ");

  36:     if (pressures)

  37:       Serial.println("true ");

  38:     else

  39:       Serial.println("false");

  40:     Serial.print("rumble = ");

  41:     if (rumble)

  42:       Serial.println("true)");

  43:     else

  44:       Serial.println("false");

  45:   }  

  46:   else if(error == 1)

  47:     Serial.println("No controller found, check wiring, see readme.txt to enable debug. ");

  48:    

  49:   else if(error == 2)

  50:     Serial.println("Controller found but not accepting commands.");

  51:  

  52:   else if(error == 3)

  53:     Serial.println("Controller refusing to enter Pressures mode, may not support it. ");

  54:   

  55: }

  56:  

  57: void loop() {

  58:   if(error == 1) //skip loop if no controller found

  59:     return; 

  60:     

  61:   ps2x.read_gamepad(false, vibrate); //read controller and set large motor to spin at 'vibrate' speed

  62:     

  63:     if(ps2x.Button(PSB_START))         //will be TRUE as long as button is pressed

  64:       Serial.println("Start is being held");

  65:     if(ps2x.Button(PSB_SELECT))

  66:       Serial.println("Select is being held");      

  67:  

  68:     if(ps2x.Button(PSB_PAD_UP)) {      //will be TRUE as long as button is pressed

  69:       Serial.print("Up held this hard: ");

  70:       Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);

  71:     }

  72:     if(ps2x.Button(PSB_PAD_RIGHT)){

  73:       stepsPerRevolution = -200;

  74:       Serial.println("clockwise");

  75:     }

  76:     if(ps2x.Button(PSB_PAD_LEFT)){

  77:       stepsPerRevolution = 200;

  78:       Serial.println("counterclockwise"); 

  79:     }

  80:     if(ps2x.Button(PSB_PAD_DOWN)){

  81:       Serial.print("DOWN held this hard: ");

  82:       Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);

  83:     }   

  84:  

  85:     vibrate = ps2x.Analog(PSAB_CROSS);  //this will set the large motor vibrate speed based on how hard you press the blue (X) button

  86:     if (ps2x.NewButtonState()) {        //will be TRUE if any button changes state (on to off, or off to on)

  87:       if(ps2x.Button(PSB_L3))

  88:         Serial.println("L3 pressed");

  89:       if(ps2x.Button(PSB_R3))

  90:         Serial.println("R3 pressed");

  91:       if(ps2x.Button(PSB_L2))

  92:         Serial.println("L2 pressed");

  93:       if(ps2x.Button(PSB_R2))

  94:         Serial.println("R2 pressed");

  95:       if(ps2x.Button(PSB_TRIANGLE))

  96:         Serial.println("Triangle pressed");        

  97:     }

  98:  

  99:     if(ps2x.NewButtonState(PSB_CIRCLE))               //will be TRUE if button was JUST pressed

 100:       Serial.println("Circle just pressed");

 101:     if(ps2x.NewButtonState(PSB_CROSS))               //will be TRUE if button was JUST pressed OR released

 102:       Serial.println("X just changed");

 103:     if(ps2x.ButtonReleased(PSB_SQUARE))              //will be TRUE if button was JUST released

 104:       Serial.println("Square just released");     

 105:  

 106:     if(ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) { //print stick values if either is TRUE

 107:       Serial.print("Stick Values:");

 108:       Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX  

 109:       Serial.print(",");

 110:       Serial.print(ps2x.Analog(PSS_LX), DEC); 

 111:       Serial.print(",");

 112:       Serial.print(ps2x.Analog(PSS_RY), DEC); 

 113:       Serial.print(",");

 114:       Serial.println(ps2x.Analog(PSS_RX), DEC); 

 115:     } 

 116:     

 117:   myStepper.step(stepsPerRevolution);  

 118: }

 

当没有加入电机的代码的时候手柄的反应很快,能马上识别按钮,但是当我加入

   1: myStepper.step(stepsPerRevolution); 

以后,必须长按按钮才能改变方向,这个要好好研究一下

 

另外,当我打开串口监视器时电机才转,搞不清为什么,不知道如果用电池给Arduino供电时会出现什么情况。

无线手柄+步进电机——控制方向的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  2. 玩转X-CTR100 l STM32F4 l PS2无线手柄-4WD智能小车

    我造轮子,你造车,创客一起造起来!更多塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 前面已介绍X-CTR100控制器解码PS2无线手 ...

  3. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  4. SteamVR手柄震动控制实现

    SteamVR手柄震动控制实现 public class handCtrl : MonoBehaviour { public SteamVR_TrackedObject _TrackedObject; ...

  5. 基于MSP430G2系列实现的步进电机控制

    基于MSP430G2系列实现的步进电机控制 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 系列博客说明:此系列博客属于作者在大三大四阶段所储备的关于电子电路 ...

  6. STM32定时器输出PWM频率和步进电机控制速度计算

    1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, t ...

  7. 基于视觉反馈的步进电机X-Y平台控制

    关键词:步进电机.XY平台.视觉反馈 用途:工业自动化 文章类型:原理介绍.随笔纪念 @Author:VShawn(singlex@foxmail.com) @Date:2017-05-01 @Lab ...

  8. UI创意求助:手机贪吃蛇游戏方向控制键设计

    继上一片博文<做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)>之后,尝试做一个手机版本,大部分的功能都已经实现了.但在贪吃蛇的方向控制设计上一直不太满意.由于手机界面的大 ...

  9. 关于Arduino 步进电机Stepper库的一些想法

    官方提供了一些库,使Arduino入门起来更加快速,我们连原理都不用懂,就能通过函数控制终端.但是,这样也带来了很多的缺陷,比如,库函数的功能有限,有些无法实现.然后还有库函数因为要考虑其他的情况,你 ...

随机推荐

  1. android基础(一)

    wrap_conten:包裹实际文本内容 match_parent:当前控件铺满父类容器:2.3api之后添加的一个属性值 fill_parent:包裹实际文本内容,在2.3api之前的一个属性值 a ...

  2. 3、Hibernate三态间的转换

    学过hibernate的人都可能都知道hibernate有三种状态,transient(瞬时状态),persistent(持久化状态)以及detached(离线状态),大家伙也许也知道这三者之间的区别 ...

  3. 重装系统之后Hexo快速配置

    安装准备软件 Node.js Git 打开 Git Bash hexo文件夹,右键: 配置SSH Keys 检查SSH keys设置,看一下电脑现有的ssh key cd ~/. ssh 检查本机的s ...

  4. 简单介绍移动端CSS3单位rem的用法

    PC端大部份是用px单位,小部分用em单位,而移动端,请全部用rem单位吧.目前大部份设备,包括但不限于iOS 5+.Android 2.3+.Window Phone 8+都是可以兼容的,具体兼容表 ...

  5. kindeditor编辑器,图片上传功能齐全

    废话不多说直接上文件包压缩包:kindeditor图片上传(VS2012)

  6. ubuntu下打开chm文件

    CHM文件格式是微软1998年推出的基于HTML文件特性的帮助文件系统,以替代早先的WinHelp帮助系统,它在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件”. chm文件因为 ...

  7. mysql高级查询

    高级查询: 1.连接查询 select * from Info,Nation #得出的结果称为笛卡尔积select * from Info,Nation where Info.Nation = Nat ...

  8. jquery倒计时过几秒页面跳转 js倒计时

    //银行认证成功跳转 var time=setInterval (showTime, 1000); var second=5; function showTime() { if(second==0) ...

  9. Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)

    开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...

  10. selinux策略开发

    所用软件: 1.setools -->seaudit  读取日志以确定所需权限 2.Reference Policy  -->  https://github.com/TresysTech ...