|
英文原文地址:
http://www.artlum.com/gameduino/nes.html
NES手柄是比较常见的用来连接Gameduino的手柄。有方向键(四方向)、START键、SELECT键、A键、B键。
手柄原理
NES手柄通过串行方式和主板进行通信。Data线串行发送数据。另外的几根线提供电源和控制。(用的4201串转并移位芯片)
接口图
GND 地线
CLOCK 时钟线,一个上边沿发送一位数据
STROBE 使能(触发),由高变低的时候,按键数据读入4201
DATA 数据线
VCC 电源线,5V供电
第一步 确定线序
我拿到的线结论如下
+5V | Red | GND | Brown | STROBE | Black | CLOCK | Yellow | DATA | Orange |
第二部 连线到Arduino
第三步 编写代码
- 使能STROBE
- 获取一个按键数据
- CLOCK由低变高
- 获取下一个数据
- LOOP到最后一个
- 通过STROBE 线Disable芯片
代码如下- // Pin definitions - where the wires are connected
- #define NES_DATA A0
- #define NES_STROBE A1
- #define NES_CLOCK A2
- // Configure the Arduino pins for an NES controller
- Joystick::Joystick()
- {
- pinMode(NES_DATA,INPUT); digitalWrite(NES_DATA,HIGH);
- pinMode(NES_STROBE,OUTPUT); digitalWrite(NES_STROBE,HIGH);
- pinMode(NES_CLOCK,OUTPUT); digitalWrite(NES_CLOCK,HIGH);
- }
- // Read the next button
- static byte readNesBit(byte button)
- {
- const bool b = (digitalRead(NES_DATA)==LOW);
- digitalWrite(NES_CLOCK,LOW);
- digitalWrite(NES_CLOCK,HIGH);
- return (b)? button: 0;
- }
- // Read complete controller state
- void Joystick::read()
- {
- ...
- digitalWrite(NES_STROBE,LOW);
- buttons = readNesBit(buttonA);
- buttons |= readNesBit(buttonB);
- buttons |= readNesBit(buttonSelect);
- buttons |= readNesBit(buttonStart);
- dpad = readNesBit(0x01);
- dpad |= readNesBit(0x02);
- dpad |= readNesBit(0x04);
- dpad |= readNesBit(0x08);
- digitalWrite(NES_STROBE,HIGH);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|