CapacitiveSensor problems

CapacitiveSensor problems

本文关键字:problems CapacitiveSensor      更新时间:2023-10-16

我一直在使用电容按钮为Arduino编写Pong游戏,并且我一直在获得"调用' capacitivessensor:: capacitivessensor()'没有匹配的函数"错误。下面是我一直错误的类的代码:

//Input.cpp
#include <CapacitiveSensor.h>
#include "Input.h"
#include "Arduino.h"
Input::Input (byte sPin, byte rPin1, byte rPin2) { //I get the error on this line
    upButton = CapacitiveSensor(sPin, rPin1);
    downButton = CapacitiveSensor(sPin, rPin2);
}
//Continued for bChk

然后这是标题:

//Input.h
#ifndef Input_H
#define Input_H
#include "Arduino.h"
#include <CapacitiveSensor.h>
class Input{
    public:
        const static byte up = 0;
        const static byte down = 1;
        CapacitiveSensor upButton;
        CapacitiveSensor downButton;
        boolean bChk(byte button);
        Input(byte sPin, byte rPin1, byte rPin2);
};
#endif

我知道标准命名约定说常量应该大写,但是它们已经被保留了。而且变量之类的应该是私有的。我很懒。此外,我得到的错误在不同的行,而不是我调用构造函数…我也没有创建CapacitiveSensor类。

我用的是Mac电脑,如果这很重要(我怀疑)。

似乎CapacitiveSensor类没有定义默认构造函数,因此Input类不知道如何构造upButtondownButton

一个选项是在Input构造函数中初始化upButtondownButton,传递所需的参数:

class Input {
public:
    Input(byte sPin, byte rPin1, byte rPin2)
        : upButton(CapacitiveSensor(sPin, rPin1))
        , downButton(CapacitiveSensor(sPin, rPin2))
    {}
    CapacitiveSensor upButton;
    CapacitiveSensor downButton;
};

另一种选择是将这些成员转换为指针,并使用new用所需的参数分配它们。例子:

class Input {
public:
    Input() : upButton(NULL), downButton(NULL) {}
    void initializeMembers(byte sPin, byte rPin1, byte rPin2) {
        upButton = new CapacitiveSensor(sPin, rPin1);
        downbutton = new CapacitiveSensor(sPin, rPin2);
    }
    CapacitiveSensor *upButton;
    CapacitiveSensor *downButton;
};

最后,您可以扩展CapacitiveSensor类,定义一个默认构造函数,并将固定参数传递给超构造函数。我相信这不是你想要的,但无论如何:

class CustomCapacitiveSensor : public CapacitiveSensor {
public:
    CustomCapacitiveSensor() {
        CapacitiveSensor(1, 2);
    }
};

要使用您所展示的代码,CapacitiveSensor类必须同时具有不接受参数的默认构造函数和等号操作符重载(赋值)。这可能不是您想要的,因为它是浪费的,因为它构造了一个临时对象,然后将其赋值给类成员。

要构造成员对象,可以使用以下代码:

Input::Input(byte sPin, byte rPin1, byte rPin2) :
  upButton(sPin, rPin1), downButton(sPin, rPin2)
{
...
}

这将直接构造两个对象实例。