Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino SNES无线接收器代码问题_Arduino_Wireless - Fatal编程技术网

Arduino SNES无线接收器代码问题

Arduino SNES无线接收器代码问题,arduino,wireless,Arduino,Wireless,我正在为两个SNES控制器构建一对发射机和接收机,因为我不喜欢使用长延长线将控制器连接到沙发上。我使用的是AVRs,RF24l01无线收发器使用的是ManiacBugs RF24库。我在发射机上使用一个改进的snesPad库来轮询两个控制器的按钮状态,并将它们作为32位无符号长返回,然后将其发送到接收机。所有标准库,到目前为止没有问题 然而,在接收器端,我必须正确响应来自SNE的闩锁和时钟信号,我还没有找到任何用于此的库。对于那些不熟悉SNES控制器的人,它们基本上是两个串联的8位并行串行移位寄

我正在为两个SNES控制器构建一对发射机和接收机,因为我不喜欢使用长延长线将控制器连接到沙发上。我使用的是AVRs,RF24l01无线收发器使用的是ManiacBugs RF24库。我在发射机上使用一个改进的snesPad库来轮询两个控制器的按钮状态,并将它们作为32位无符号长返回,然后将其发送到接收机。所有标准库,到目前为止没有问题

然而,在接收器端,我必须正确响应来自SNE的闩锁和时钟信号,我还没有找到任何用于此的库。对于那些不熟悉SNES控制器的人,它们基本上是两个串联的8位并行串行移位寄存器。它们在闩锁信号上升沿上闩锁所有按钮状态12µs脉冲高,通常低,驱动闩锁下降沿上的第一位,然后驱动时钟上升沿上的每个连续位6µs延迟,从闩锁下降开始,通常高,6µs低-6µs高循环

我决定使用一个外部中断来触发锁存脉冲和每个时钟脉冲的正确行为。不过,我对Arduinos编程还是新手,对C/C++也是新手。虽然我的代码将被编译,但我不确定它是否真的能按预期运行。如果有人谁与AVR的一些经验,可以看看我的代码,让我知道它是否会工作,如果没有,在哪里和为什么,我将非常感谢

Arduino如下:

/* 版权C 2012约翰·拜尔斯 这个程序是自由软件;您可以重新分发它和/或 根据GNU通用公共许可证的条款对其进行修改 自由软件基金会发布的版本3 */ /** *双无线复古控制器适配器发射机 * *这是适配器集的接收器端代码。 */ 包括 包括 包括 包括 // //硬件配置 // RF24-9,10; // //变量初始化 // 易失性无符号长状态2=0xFFFFFFFF; 易失字节i=0; const uint64_t pipes[2]={0xf0e1ll,0xf0d2ll}; int选通=2; int时钟=3; 易失性int-data1=5; 易失性int数据2=6; bool firstLoop=true; volatile int status2=1; 无效设置 { 收音机。开始; 无线电。设置重试0,15; radio.enableDynamicPayloads; Serial.begin57600; 针织衫,输入; pinModeclock,输入; pinModedata1,输出;digitalWritedata1,低电平; pinModedata2,输出;digitalWritedata2,低电平; radio.openWritingPipepipes[1]; radio.openReadingPipe1,pipes[0]; // //转储RF单元的配置以进行调试 // 收音机.印刷品详情; // //设置中断 // 连接断路器、插销、上升; 连接中断时钟、数据、上升; } 空穴环 { 如果第一个循环{ int status1=1; bool ok=radio.write&status1,sizeofint; firstLoop=false; 收音机、收音机、收音机; 如果!好的{ Serial.printlnsync数据包传输失败; } 否则{ Serial.printlnsync数据包传输成功; } } 如果有无线电,请联系我们 { 无符号长状态=0; radio.read&state,sizeofunsigned long; Serial.printlnstate,BIN; state2=状态; } 其他的 { Serial.println尚未收到任何数据; } } //锁存中断程序 空闩 { i=0; 数字写入TA1,高; 数字写入TA2,高; digitalWritedata1,bitReadstate2,i; 数字写入TA2,位读取状态2,i+16; Serial.printlnBit0输出; } //数据中断程序 无效数据 { i++; digitalWritedata1,bitReadstate2,i; 数字写入TA2,位读取状态2,i+16; 串行打印位; Serial.printi; 串行打印输出; ifi=15 { 数字写入TA1,低; 数字写入TA2,低; 停止收听; int status1=status2; bool ok=radio.write&status1,sizeofint; 如果!好的{ Serial.printlnsync数据包传输失败; } 否则{ Serial.printlnsync数据包传输成功; } 收音机、收音机、收音机; } }
也许更适合这里:谢谢,那我就把它放在那边。我是新来的,不知道该放在哪里。。。。