【雕爷学编程】Arduino动手做(120)---游戏摇杆扩展板
37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百二十:JoyStick Shield PS2游戏摇杆扩展板 模拟键盘鼠标功能 大摇杆模块
双轴摇杆参数
一、MECHANICAL CHARACTERISTIC 机械特性
1、Operating force of lever 摇杆作动力 :120±70 gf
2、Operating angle 操作角度:26° Max
二、ELECTRICAL CHARACTERISTIC 电气特性
1、Rating power 额定功率:0.0125W
2、Maximum operating voltage最高使用电压:AC 50V DC 5V
3、Voltage divider error 分压误差:44%~56%
4、Insulation resistance 绝缘阻抗:100M? 1 Minute at DC 250V
5、Dielectric voltage 耐电压:1 Minute at AC 250V
三、SWITCH CHARACTERISTICS 开关规格
1、Operating force 开关按压力:740±300gf
2、Contact resistance 接触阻抗:100mΩ Max
3、Rating power 额定功率:DC12V 50mA
四、ENDURANCE CHARACTERISTIC 耐久特性
1、Rotational life 旋转寿命:2000,000 cycles Min
2、Push operating life 开关按压寿命:1,000,000 cycles Min
摇杆工作原理
摇杆电位器在直流电路中作为电流调节使用时,将有电流通过摇杆电位器的滑动臂,此时由于阳极氧化的原因会导致电阻值异常增加。在这种情况下,建议将连接电阻体的端子接负极,滑动臂接正极。如果直流电流直接通过摇杆电位器,摇杆电位器的阳极就会受到氧化损伤,从而让摇杆电位器的阻抗变大,因此最好是将电流的负极接在跟碳膜片接触的端子上,正极接在跟刷子(摇杆电位器接触片)的端子上。摇杆电位器作为可变电阻器时,建议作调整电压的分压器使用,同时摇杆电位器的负载电阻RL应不小于摇杆电位器公称阻值RT的10倍。在稳压器中用来调节输出电压,故设计摇杆电位器应满中顺时针调节时输出电压升高,反时针调节器节时输出电压降低;在可调恒流充电器中摇杆电位器用来调节充电电流折大小,设计摇杆电位器时应满中顺时针调节时,电流增大。IC座,设计印刷板图时,在使用IC座的场合下,一定要特别注意IC座上定位槽放置的方位是否正确,并注意各个IC脚位是否正确。
游戏摇杆扩展板技术参数:
(A)1个PS2带按钮十字摇杆,4颗圆形按钮,2个小按键。
(B)板载的开关电压可以在3.3V和5V之间切换。
(C)1个复位按键
(D)xbee/Bluetooh Bee/APC220蓝牙无线数传接口
(E)2.4G NRF24L01 RF无线数传接口
(F)Nokia 5110 LCD接口
添加nRF24L01的RF接口
添加Nokia 5110 LCD接口, 这样非常方便游戏开发。
添加蓝牙模块的接口,方便蓝牙无线串口通讯。
添加I2C通讯接口,方便I2C设备的连接
同时,JoyStick Shield 有1个PS2带按钮十字摇杆,还有4颗圆形按钮,2个小按键。为Arduino提供了摇杆和按键的输入扩展。板载开关可以在3.3V 和5V 之间切换,可以将此模块用于其它3.3V单片机平台,比如STM32。
游戏摇杆扩展板的使用
(A)2.4G NRF24L01使用
模板的RF SPI接口对应
IRQ-->D8;CE-->D9;CSN-->D10;MOSI -->D11;
MISO-->D12;CLK -->D13;
(B)Bluetooh蓝牙使用
模板的蓝牙接口对应 RXD-->D1(TX);TXD-->D0(RX);
注意:当蓝牙写AT命令时,把板载上APC&BT附近的拨动开关拨到“H”,表示蓝牙的KEY脚置高,或把板载上的“KEY”脚跳线到IO口,通过软件控制蓝牙的KEY。在蓝牙其他情况下,拨动开关拨到“L”。
(C)Nokia 5110 LCD使用
模板的Nokia 5110接口对应
SCE-->D13;RST-->D12;DC-->D11;MOSI-->D10;SCLK-->D9;
(D)板载的按键参考代码:
模板的按键接口对应
A-->D2;B-->D3;C-->D4;D-->D5;E-->D6;F-->D7;
X-->A0;Y-->A1;
S-->悬空(该键为摇杆的Z键,如果需要,可以跳线接入IO口)
游戏摇杆扩展板的接脚配置
PS2游戏摇杆(X轴A0,Y轴A1,Z轴按键D6)
四个独立按键(D2、D3、游戏摇杆扩展板的接脚配置
PS2游戏摇杆(X轴A0,Y轴A1,Z轴按键D6)
四个独立按键(D2、D3、D4、D5)
预留扩展接口:
1个I2C接口 D4、D5)
预留扩展接口:
1个I2C接口
1个TTL串口
模拟量接口(A2-A5)
数字量接口(D8-D13)
Arduino复位按键
完全兼容Arduino UNO R3接口
摇杆X\Y轴输出为两个电位器,可以通过AD转换读出扭动角度
向下按摇杆,可以触发一路轻触开关,为数字输出
四路独立按键,数字输出,方便使用
板上标注有各个模块的端口配置,方便调试
预留了其他没有占用的端口,方便后期扩展
通过该扩展板可以制作一个遥控手柄,结合XBee模块可实现无线控制
结合Arduino Leonardo还可以模拟电脑鼠标等
Arduino实验开源代码
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百二十:JoyStick Shield PS2游戏摇杆扩展板 模拟键盘鼠标功能 大摇杆模块 项目:摇杆扩展板测试 */ int FirstShotX , FirstShotY; void setup(){ for(int i=0; i<19; i++) { pinMode(i, INPUT); digitalWrite(i, 1); } Serial.begin(9600); FirstShotX = 0; FirstShotY = 0; } void loop(){ int i, someInt, flag = 0; for(i=2; i<8; i++) { someInt = digitalRead(i); if(someInt == 0) { flag =1; break; } } if(flag == 1) { switch(i) { case 2: Serial.println("--------> Button A"); break; case 3: Serial.println("--------> Button B"); break; case 4: Serial.println("--------> Button C"); break; case 5: Serial.println("--------> Button D"); break; case 6: Serial.println("--------> Button E"); break; case 7: Serial.println("--------> Button F"); break; default: break; } flag=0; } int sensorValue = analogRead(A0); if(FirstShotX == 0) { FirstShotX = sensorValue; Serial.print("FirstShotX = "); Serial.println(FirstShotX); } Serial.print("X = "); Serial.println(sensorValue - FirstShotX); sensorValue = analogRead(A1); if(FirstShotY == 0) { FirstShotY = sensorValue; Serial.print("FirstShotY = "); Serial.println(FirstShotY); } Serial.print("Y = "); Serial.println(sensorValue - FirstShotY); delay(200); }
实验串口返回情况
Arduino实验开源代码之二
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百二十:JoyStick Shield PS2游戏摇杆扩展板 模拟键盘鼠标功能 大摇杆模块 项目:摇杆扩展板测试之二 */ char button0=7, Y=6, R=3, G=4, B=5; void setup(void){ pinMode(R, INPUT); //设置口按键为输入状态,并配置上拉。 digitalWrite(R, HIGH); pinMode(button0, INPUT); digitalWrite(button0, HIGH); pinMode(G, INPUT); digitalWrite(G, HIGH); pinMode(B, INPUT); digitalWrite(B, HIGH); pinMode(Y, INPUT); digitalWrite(Y, HIGH); Serial.begin(9600); //设置串口通信9600波特率 } void loop(void){ Serial.print(analogRead(1)); //读取摇杆Y轴的值,串口显示 Serial.print(","); Serial.print(analogRead(0)); //读取摇杆X轴的值,串口显示 Serial.print(","); Serial.print(digitalRead(button0)); //读按键值,串口显示 Serial.print(digitalRead(R)); Serial.print(digitalRead(G)); Serial.print(digitalRead(B)); Serial.println(digitalRead(Y)); delay(100); //100ms刷新一次 }
实验串口返回情况
Arduino实验开源代码之三
/* 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验一百二十:JoyStick Shield PS2游戏摇杆扩展板 模拟键盘鼠标功能 大摇杆模块 项目:摇杆扩展板测试之三 */ char K=8 ,A=2, B=3, C=4, D=5, E=6,F=7; void setup(void){ pinMode(K, INPUT); digitalWrite(K, HIGH); pinMode(A, INPUT); //设置口按键为输入状态,并配置上拉。 digitalWrite(A, HIGH); pinMode(B, INPUT); digitalWrite(B, HIGH); pinMode(C, INPUT); digitalWrite(C, HIGH); pinMode(D, INPUT); digitalWrite(D, HIGH); pinMode(E, INPUT); digitalWrite(E, HIGH); pinMode(F, INPUT); digitalWrite(F, HIGH); Serial.begin(9600); //设置串口通信9600波特率 } void loop(void){ Serial.print("X轴;"); Serial.print(analogRead(0)); //读取摇杆X轴的值,串口显示 Serial.print(" Y轴;"); Serial.print(analogRead(1)); //读取摇杆Y轴的值,串口显示 Serial.print(" K键"); Serial.print(digitalRead(K)); Serial.print(" A键"); Serial.print(digitalRead(A)); Serial.print(" B键"); Serial.print(digitalRead(B)); Serial.print(" C键"); Serial.print(digitalRead(C)); Serial.print(" D键"); Serial.print(digitalRead(D)); Serial.print(" E键"); Serial.print(digitalRead(E)); Serial.print(" F键"); Serial.print(digitalRead(F)); Serial.println(); delay(100); //100ms刷新一次 }
实验串口返回情况
Arduino实验场景图