1、首先,本次的控制程序属于是进阶版Ps2手柄舵机控制。要想实现要想实现Ps2手柄控制舵机任意角度控制,必须要了解怎样实现Ps2手柄与arduino nano的通信和解码以及舵机的工作原理,这个比较简单,大家去自行了解一下就OK了。

2、舵机的工作原理是:向舵机发送周期为20ms的脉冲信号,当这段脉冲中高电位占比为0.5ms的时候,舵机会转至0度,当高电位占比为2.5ms的时候,舵机会转至180度。(这部分做一下简单了解,在程序中并未体现)。

3、本次采用arduino的库函数文件Servo.h。可以轻松地实现舵机旋转任意角度。具体功能在程序中也有标注出来,比较清晰,读者可以自行观看。(老牛的程序是可以直接COPY过去使用的,没有的库文件,老牛已经放在百度网盘,建议大家自己下载一下)。链接:https://pan.baidu.com/s/1XTgef2rl0iQFTJU2PuGJ5A 
提取码:66ln

链接:https://pan.baidu.com/s/1Fozo8eEGHAFu-ZLSgziuKg 
提取码:66ln

4、基本原理很简单,废话不多说,上连接图。

5、代码。

/*****************************************This program just belong to Niu Lao.Don't spread it on website casually. Auther: Niu LaoFunction:1、实现Ps2手柄与arduino nano通信2、实现舵机转至任意角度3、实现任意IO引脚控制舵机
******************************************/
#include <PS2X_lib.h>
#define PS2_DAT        13
#define PS2_CMD        11
#define PS2_SEL        10
#define PS2_CLK        12
#define pressures   false
#define rumble      false
int error = 0;
//int speed = 0;
byte type = 0;
byte vibrate = 0;
PS2X ps2x;
void (* resetFunc) (void) = 0;
//以上为手柄配置
int PWM;//舵机脉宽变量
int sck = 2; //定义舵机输出引脚void duoji(int sck, int jiaodu) {  //舵机角度控制子函数PWM = (jiaodu * 11) + 500; //将角度值转化为500—2480digitalWrite(sck, HIGH); //将舵机输出引脚拉高delayMicroseconds(PWM);//设定高电位脉冲宽度digitalWrite(sck, LOW); //将舵机输出引脚拉低delayMicroseconds(20000 - PWM); //设定低电位脉冲宽度
}void setup() {// put your setup code here, to run once:Serial.begin(115200);pinMode(sck, OUTPUT);delay(300);type = ps2x.readType();error = ps2x.config_gamepad(PS2_CLK, PS2_CMD, PS2_SEL, PS2_DAT, pressures, rumble);
}void loop() {// put your main code here, to run repeatedly:if (error == 1) {resetFunc();}if (type == 2) {ps2x.read_gamepad();}else {ps2x.read_gamepad(false, vibrate);vibrate = ps2x.Analog(PSAB_CROSS);int LY1 = ps2x.Analog(PSS_LY);int LX1 = ps2x.Analog(PSS_LX);int RY1 = ps2x.Analog(PSS_RY);int RX1 = ps2x.Analog(PSS_RX);int ly = map(LY1, 0, 255, 0, 170);int lx = map(LX1, 0, 255, 0, 170);int ry = map(RY1, 0, 255, 0, 170);int rx = map(RX1, 0, 255, 0, 170);Serial.print(LY1);Serial.print(',');Serial.print(LX1);Serial.print(',');Serial.print(RY1);Serial.print(',');Serial.print(RX1);Serial.print('\n');if (ps2x.Button(PSB_L1) || ps2x.Button(PSB_R1)) {if (ps2x.Button(PSB_GREEN)) {duoji( sck,  0);delay(50);}if (ps2x.Button(PSB_PINK)) {duoji( sck,  30);delay(50);}if (ps2x.Button(PSB_BLUE)) {duoji(sck, 60);delay(50);}if (ps2x.Button(PSB_RED)) {duoji( sck, 90);delay(50);}}else {digitalWrite(sck, LOW); //将舵机输出引脚拉低delay(50);}if (ps2x.Button(PSB_L2) || ps2x.Button(PSB_R2)) {duoji(sck, ly);delay(50);}else {digitalWrite(sck, LOW); //将舵机输出引脚拉低delay(50);}}
}

6、简单总结一下,本次介绍了arduino实现Ps2手柄控制舵机任意角度。需要掌握的部分有:map(Value,Min1,Max1,Min2,Max2)函数,实现不同限定变化范围的转换、调用库文件函数(本次基本是库文件程序作用)、基础电路知识、基础C语言知识、舵机工作原理。老牛也会努力让更多小白能够触摸到电路控制的乐趣,后续还会继续更新一些遥控小车,语音遥控等等一些有趣的开发项目。

7、本次老牛的目的所在就是为了让更多的小伙伴能够实现自己手动创建任意占空比的PWM,并且通过任意的IO口进行输出。

有问题欢迎私信老牛~

arduino nano与Ps2手柄通过任意IO口控制舵机旋转至任意角度相关推荐

  1. IO口多路查理复用:三个单片机IO口控制六个LED

    简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...

  2. 如何使用一个单片机的IO口控制两个LED?

    简 介: 本文介绍了一种使用单个IO口独立控制两个LED点亮的方案.并对于不同颜色的LED和不同工作电压下的MCU进行了讨论.给出了在不同的颜色组合.工作电压的情况下不同的驱动方案. 关键词: IO, ...

  3. 单片机两个IO口控制三个LED灯

    在项目中经常会遇到单片机IO口资源不够用的情况,那么如何让单片机的IO口利用最大化呢,这里分享一下用单片机两个IO口控制三个LED灯的几种方法. 方法一:      S1和S2分别接单片机两个IO口, ...

  4. 单片机io口的控制实验c语言,单片机io口控制实验报告

    <单片机io口控制实验报告>由会员分享,可在线阅读,更多相关<单片机io口控制实验报告(5页珍藏版)>请在人人文库网上搜索. 1.单片机io口控制实验报告 精品文档,仅供参考单 ...

  5. 使用Arduino开发ESP32(11):IO口与相关外设说明与记录

    文章目录 目的 数字IO口 基本使用 外部中断 使用示例 参考链接 LEDC(PWM) 常用方法 使用示例 参考链接 SigmaDelta 参考链接 ADC 常用方法 使用示例 参考链接 存在的问题 ...

  6. 启明云端分享|ESP32-C3 IO口控制灯的应用及串口通信示例

    启明云端作为乐鑫代理,一直都尽最大可能做完善的教程能帮助更多的开发小伙伴快速上手各种应用:今天小明为大家带来ESP32-C3IO口控制灯的应用及串口通信示例,每一个步骤我们都分享出来供小伙伴们参考! ...

  7. 1.2基本IO口控制

    1.2.1从最基础的点LED灯开始 单片机通过寻址找到 IO口 怎么(编程)找到IO口呢:ANSI C sfr"指令": 用来直接描述硬件地址,先理解成"一组IO口&qu ...

  8. 一个IO口控制多个按键方法

    使用注意:   ADC测到的电压值只是大约的范围,例如假如上面K1算得1.0V,那么实际可能是在0.9V-1.1V之间波动:   电路中的电阻应合理计算,使各按键对应的电压值均匀分布在 0-DVCC之 ...

  9. 微信小程序控制开关 控制io口 控制灯

    准备材料 8266 1个 按键 2个 led 1 个以上 扫描微信小程序 下载固件1.0.1 链接:https://pan.baidu.com/s/1em71pN_oXIT3o4wX_YUAag 提取 ...

  10. 51c语言单片机io口控制实验报告,单片机I/O口控制实验

    描述 实验 单片机I/O 口控制实验 一. 实验目的 利用单片机的P1 口作IO 口,使用户学会利用P1 口作为输入和输出口. 二. 实验设备及器件 IBM PC 机 一台 DP-51PROC 单片机 ...

最新文章

  1. php+文件+加密+原理,PHP的加密方式及原理
  2. 实验室管理系统LIMS有没有好的企业推荐?
  3. 福布斯2020年AI领域10大预测:人工智能越来越“边缘化”!
  4. 关于x86、i386、i486、i586和i686等名词的解释
  5. TiDB 官方设计文档翻译(三)
  6. tensorflow 开始——创建定制化 Estimator(创建自定义评估器)
  7. ionic4 手机启动页进入首页慢问题修改
  8. 函数式接口作为方法的参数案例
  9. c#求三角形面积周长公式_C#源代码—三角形面积、圆的面积
  10. 计算机专业论文选题网站方面,5大网站汇总,搞定新颖的计算机专业毕业设计网站汇总...
  11. python实现卷积操作
  12. lammps教程:如何更清晰观察晶体结构?Ovito渲染技巧介绍
  13. bwa manul page
  14. 中国塑料加工工业协会侵犯群益公司名誉权 法院判决赔偿财产损失和赔礼道歉30天
  15. 黑客教父郭盛华:11个IDA Pro反汇编程序的替代品
  16. 层次低的人复杂,境界高的人简单,总结得真深刻!
  17. 华为方舟编译器开源官网正式上线,并首次开放了框架源码!
  18. 微软证实10月25日正式发布Windows8系统
  19. 安装驱动显卡重启计算机,win7系统安装显卡驱动后电脑一直重启的解决方法
  20. java实现第五届蓝桥杯幂一矩阵

热门文章

  1. CS5532 HAL库版本工程代码
  2. 低通滤波与RC振荡产生正弦波
  3. unity 获取 AudioSource 分贝值
  4. vb在服务器上新建文件夹,VB 创建文件夹
  5. AUTOCAD——形位公差如何标注、CAD打断于点的操作
  6. C# 使用Panel控件实现窗体嵌套
  7. 防火墙 firewall 及端口查看
  8. Android开发环境的搭建教程
  9. 为你写诗(LSTM 诗歌生成器)
  10. html自动写对联,html+css纯代码给自己的网站添加对联广告位