极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14935|回复: 0

NES手柄接Gameduino

[复制链接]
发表于 2011-11-12 13:17:31 | 显示全部楼层 |阅读模式
英文原文地址:
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芯片
代码如下
  1. // Pin definitions - where the wires are connected
  2. #define NES_DATA A0
  3. #define NES_STROBE A1
  4. #define NES_CLOCK A2

  5. // Configure the Arduino pins for an NES controller
  6. Joystick::Joystick()
  7. {
  8.   pinMode(NES_DATA,INPUT);     digitalWrite(NES_DATA,HIGH);
  9.   pinMode(NES_STROBE,OUTPUT);  digitalWrite(NES_STROBE,HIGH);
  10.   pinMode(NES_CLOCK,OUTPUT);   digitalWrite(NES_CLOCK,HIGH);
  11. }

  12. // Read the next button
  13. static byte readNesBit(byte button)
  14. {
  15.   const bool b = (digitalRead(NES_DATA)==LOW);
  16.   digitalWrite(NES_CLOCK,LOW);
  17.   digitalWrite(NES_CLOCK,HIGH);
  18.   return (b)? button: 0;
  19. }

  20. // Read complete controller state
  21. void Joystick::read()
  22. {
  23.   ...
  24.   digitalWrite(NES_STROBE,LOW);
  25.   buttons  = readNesBit(buttonA);
  26.   buttons |= readNesBit(buttonB);
  27.   buttons |= readNesBit(buttonSelect);
  28.   buttons |= readNesBit(buttonStart);
  29.   dpad  = readNesBit(0x01);
  30.   dpad |= readNesBit(0x02);
  31.   dpad |= readNesBit(0x04);
  32.   dpad |= readNesBit(0x08);
  33.   digitalWrite(NES_STROBE,HIGH);
  34. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 20:53 , Processed in 0.041268 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表