NES手柄接Gameduino
英文原文地址:http://www.artlum.com/gameduino/nes.html
NES手柄是比较常见的用来连接Gameduino的手柄。有方向键(四方向)、START键、SELECT键、A键、B键。
手柄原理
NES手柄通过串行方式和主板进行通信。Data线串行发送数据。另外的几根线提供电源和控制。(用的4201串转并移位芯片)
接口图
GND 地线
CLOCK 时钟线,一个上边沿发送一位数据
STROBE 使能(触发),由高变低的时候,按键数据读入4201
DATA 数据线
VCC 电源线,5V供电
第一步 确定线序
我拿到的线结论如下
+5VRed
GNDBrown
STROBEBlack
CLOCKYellow
DATAOrange
第二部 连线到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);
}
页:
[1]