上下文
问题的背景是我正在编写一个与Arduino一起使用的小型库,以便充当游戏控制器.我遇到的问题与C++有关,而不是Arduino特有的.
我已经在下面包含了库的头文件和源代码,然后是Arduino代码.我尽可能地截断了它.
问题
简而言之,只有我定义的最后一个开关/动作实际上得到了正确的句柄.
这些操作在Arduino设置功能中定义.例如:
controller.addSwitchContinuous(10, 0); // Pin 10; btn index 0
Run Code Online (Sandbox Code Playgroud)
表示引脚10映射到按钮0.当引脚10关闭时,这被视为按下按钮.这适用于单个操作,但是当我开始添加更多时,只有最后一个操作才有效.因此,在以下示例中,仅识别引脚9:
controller.addSwitchContinuous(10, 0); // <-- Doesn't work
controller.addSwitchContinuous(9, 1); // <-- Works
Run Code Online (Sandbox Code Playgroud)
这适用于任意数量的操作:
controller.addSwitchContinuous(10, 0); // <-- Doesn't work
controller.addSwitchContinuous(9, 1); // <-- Doesn't work
controller.addSwitchContinuous(8, 2); // <-- Doesn't work
controller.addSwitchContinuous(7, 3); // <-- Works
Run Code Online (Sandbox Code Playgroud)
可能的原因
我是C++的新手,所以我怀疑我在使用指针做错了.更具体地说,Joystick_实例如何传递似乎有些不对劲.
我一直在摆弄构造函数并尝试使用引用而不是指针,但我无法让它正常工作.
我可以确认JFSF ::循环中的迭代会迭代所有操作,如果我修改它:
void JFSF::loop()
{
for (int n = 0; n < _nextActionIndex; n++)
{
if (_actions[n])
{
_actions[n]->loop();
_joystick->setButton(n, PRESSED); // Debug: Set button …Run Code Online (Sandbox Code Playgroud)