无线手柄+步进电机——控制方向

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

   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供电时会出现什么情况。

转载于:https://www.cnblogs.com/zjjsxuqiang/p/3475806.html

无线遥控直流电机小型步进电机控制板JMDM-WXMT02zip,一、简介 JMDM-WXMT02 直流电机遥控控制器是深圳市精敏数字机器有限公司自主研发的高可靠工业级控制器,采用专门的直流电机运动控制芯片,具有无触点、直流电机调速、正反转等功能,可用于无线控制、直流电机控制、继电器控制、小型步进电机控制(无需驱动)、电磁阀控制等智能控制场合。可实现如下功能: 1、可用无线控制或手动按键控制继电器、直流电机、步进电机、电磁阀等机电器件; 2、可为客户编程设计特定的程序用于特定的智能控制场合。 3、可以通过RS485网络进行组网通信,构成大的联网控制系统。 二、 使用说明 (一) 独立控制模式: 1. 打开随产品附送的电子版技术资料,阅览一遍技术资料; 2. 根据说明书所附接线图连接好电脑和控制器之间的串口通信线; 3. 安装随产品附送的Keil C 编程软件,安装随产品附送的STC-ISP.EXE程序下载软件; 4. 在KEIL C 软件中打开C51范例程序学习,参考范例程序,使用输入输出库函数、自行编写单片机C语言程序; 5. 编好程序编译通过后,使用STC-ISP下载软件将C语言程序下载到JMDM-WXMT02控制器; 6. 仔细检查无误后,连接好控制器的电源;接好外围输入输出信号,即可独立实现输入输出的逻辑、时序控制。 (二) 串口控制模式: 1. 打开随产品附送的电子版技术资料,阅览一遍技术资料; 2. 根据说明书所附接线图连接好控制器和设备之间的接线、电脑和控制器之间的串口通信线; 3. 仔细检查无误后,连接好控制器的电源; 4. 安装范例串口监控软件:直接双击support文件夹下的小灯泡图标或者双击setup.exe安装; 5. 使用范例串口监控软件测试基本功能。 6. 客户二次开发使用:客户可根据通信协议和范例VB源码,自行二次开发集成到第3方系统软件中;或者使用通用的串口调试软件,根据通信协议发送串口指令给控制器。 三、 功能描述 1. 有一路标准的RS232串口通信接口,可以与电脑通信,也可与多台控制器通信构成大的控制系统。 2. 上位机(PC机或主PLC)通过串口连接到本控制器后,向控制器发送一串字符(或ASCII代码)指令即可控制某个(或全部)直流电机的打开或关闭,完全不必要考虑直流电机的硬件电路上选择、驱动等问题。比如,串口输入O(002,1)则第一个直流电机反转;串口输入“O(003, 1)”,则第二个直流电机正转。 3. 串口控制器和控制主机之间距离可以通过485总线延长,最长组网可以达到一千米; 4. 2路高速晶体管输出,可控制电磁阀,步进电机,LED灯串等机电器件。 5. 2路直流电机控制输出,可控制直流电机的正反转,可编程实现PWM(脉宽调制)速度控制,最大控制电流为5A,也可控制外部设备的电源,普通三相电机,接触器,灯炮等机电器件。 6. 6个光电隔离数字信号输入,信号电压范围可选(5V/12V/24等)可根据客户要求编程设定其功能,如手动启动,手动停机,手动正反转,电机限位等用途。 7. 4个无线遥控通道,遥控距离为100m(可定做成200米)的。可根据客户要求编程控制外部设备的电源、普通二相电机、普通三相电机、接触器、灯炮等机电器件的动作或关闭。 8. 联网通信或与主控电脑联网通信的场合可提供串口通信协议或代为开发专用程序。 9. 1个运行指示灯,一般用于显示控制器的运行状态;运行指示灯的闪烁表示本控制器工作正常。 四、 用途 1、用于各种集散型控制系统,远程控制系统,无线遥控控制系统; 3、可用各种直流电机、电磁阀、步进电机、二相交流电机、三相交流电机的控制场合。 4、经典应用场合有以下几种; 1)各种电动自动门; 2)各种电动卷帘门; 3)自动窗帘控制器; 4)车位锁控制器; 5)智能水塔控制器; 6)各种遥控道闸控制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值