电子说
步骤1:所需的材料
所需的材料如下:
-1 Arduino
-1小面包板
- 1个您不介意拆除的旧SNES控制器
-10-15跳线(我使用11个)
-5个LEDs
-胶带
第2步:连接Arduino的所有电线
将跳线插入arduino的2-9针中。参见下文,了解每个引脚的功能以及我推荐的配色方案。
引脚2:频闪引脚。从控制器连接到橙色导线,所以我将跳线设置为粉红色或橙色。
引脚3:时钟引脚。从控制器连接到黄色电线,所以我建议使用黄色跳线。
引脚4:数据引脚。控制器上有红色导线,所以最好使用红色跳线。
引脚5:顶部LED的电源。引脚6:右侧LED的电源。引脚7:底部LED的电源。
Pin 8:左侧LED的电源。引脚5-8的跳线颜色应相同。我选择“深绿色”。
Pin 9:指示灯电源。我使用了浅绿色。
5V:电源引脚,连接到控制器的白线,所以我用了白色的跳线。
GND:控制器的棕线,我用了黑色的跳线。
GND:用于将面包板的所有接地线重新连接到arduino,所有接地线都使用蓝色。
步骤3:设置LED和面包板
将您的LED以菱形放置在面包板上。确保没有2个LED引脚共享相同编号的行。将所有阴极(LED上的短引脚)连接到面包板上的接地线,然后将接地线连接到arduino的GND之一。将针脚5-8上的跳线连接到LED的阳极,与它们的位置相对应,如上一步中所述。
对于游戏指示器LED,只需将其与其他LED放开,将其阳极连接到Pin 9,其阴极连接到接地轨。
步骤4:连接控制器
到现在为止,您完全不必弄乱控制器。现在,您必须从电线末端切下塑料外壳,以便可以进入电线内部。它们上应该有一些金属小端(请参阅图片),因此,将跨接导线钩起来应该相当简单,对吗?
错。
首先将控制器线由arduino绑在桌子上。如果任其发展,就很难建立良好的联系。我的跳线直接从小金属物品中滑出,所以我拿了一把小刀,将两端撬开(见图),这样我就可以将跳线垂直地插入插座中。将5根线连接到控制器时,请确保它们彼此之间不接触,并且确保正确匹配颜色。
步骤5:
在这一点上,您应该已正确连接好一切并准备就绪。下载链接的Arduino草图,对其进行编译,然后将其上传到您的arduino。要播放,请等待游戏指示灯LED停止闪烁,然后将AXBY用作4个基本方向。在接下来的两个步骤中,我将尝试解释代码,但是如果您想要的只是一个运行中的游戏,则可以在此处停止。
Simon_Says_snes.ino
步骤6:代码,第1部分
首先介绍了控制器如何发送数据的一些背景知识。为了从控制器接收数据,您将选通引脚设置为高电平,然后读取数据的第一位(最低有效位)。要获得第二位,请切换时钟引脚,然后从数据引脚读取。您将继续执行16次。控制器的状态是一个2字节数字,其中12个最低有效字节包含当前被按下的按钮,而4个最高有效字节则无用。
所以前7行非常简单,因为它们只是分配名称
第8-20行声明用于检测按下控制器上哪个按钮的十六进制数据。每个十六进制值都会在数据流中打开一个单独的位,因此您可以使用移位来确定是否按下了某个按钮,或者仅使用按位和。
变量“数组”只是一个数组长度为30 ints的整数。这将存储游戏的按顺序。‘pos’是位置变量。
‘timeForPress’是必须按下按钮的时间。
接下来的是setup()方法。我们从播种随机数生成器开始,然后为每个引脚2-9设置引脚模式。接下来,我们出于调试目的打开串行通信,并将按钮顺序设置为全“ 4”。我这样做是因为b/c的LED编号系统最多只能增加3个,因此4个基本上只是一个占位符。现在我们将timeForPress设置为1000,并调用genSequence()方法,该方法将数组填充为0到3(含3)之间的随机整数。接下来,将我们的位置设置为0,以表明它尚未开始游戏,然后闪烁游戏指示器以表明游戏即将开始。
步骤7:代码,第2部分
在这一步中,我将快速介绍用于从控制器获取数据的方法。我在上一步中告诉了您理论知识,但是现在我将列出实际的函数调用。
我认为我从这个可指导的代码中获得了一些代码。但是,还不能完全确定。
有三种方法可用于检查控制器输入:
buttons()
频闪()
shiftin()
buttons()方法首先设置了返回值变量和一个位置计数器。然后,它选通(使用strobe()),并进入for()循环。在for循环中,它使用shiftin()方法和按位运算符一次读取并存储一位数据。
strobe()方法非常简单。基本上只是将选通引脚设置为高电平,然后立即返回至低电平。很简单的东西。这告诉控制器开始传输数据。
shiftin()方法实际上读取数据。它从数据引脚获取数据,然后切换时钟引脚,告诉控制器发送下一位。
仅使用这三种方法,您就可以读取控制器的状态。您永远不必直接调用strobe()或shiftin()。最后一点,当检查按钮是否被按下时,必须使用2个按位运算符。 〜(波浪号)不是按位的,而是反转数据,然后&检查状态与您要按下的按钮的关系。
步骤8:代码,第3部分
这是关于代码的最后一步。我只是要快速了解游戏循环的操作,因为对于新手程序员来说,这应该很容易理解。
loop()方法通过串行打印控制器的状态开始。然后,它播放存储在数组中的序列,然后使用readAndCheckInput方法检查用户输入,该方法本质上只是一个带有一些if语句的for循环。如果您弄错了,它就会跳出循环并执行闪烁的操作,然后结束。
全部0条评论
快来发表一下你的评论吧 !