编程语言:c ++
编译程序时出现此错误:
/Button.cpp:50:18: error: '_pin' was not declared in this scope
这是在告诉我变量_pin
不在函数范围内声明
bool longPush(unsigned log interval)
,但已声明,我什至在其他函数中都使用了_pin
没问题。
这是引起我麻烦的库Button
的文件:
#ifndef Button_h
#define Button_h
#include <Arduino.h>
class Button
{
private:
byte _pin;
byte _anti_bounce;
bool _est_ant;
bool _push;
public:
enum PullRes : bool {FLOATING = false, PULLUP = true,};
Button(byte pin, byte anti_bounce, PullRes = FLOATING);
bool falling();
bool rissing();
bool check();
bool longPush(unsigned long interval);
};
#endif
#include <Arduino.h>
#include <Button.h>
#include <Timer.h>
Button::Button(byte pin, byte anti_bounce, PullRes mode = FLOATING) {
_pin = pin;
_anti_bounce = anti_bounce;
if(mode == PULLUP) pinMode(pin,INPUT_PULLUP);
else pinMode(pin,INPUT);
}
bool Button::rissing() { //Funcion que retorna un 1 cuando se detecta un rissing en el pin <_pin>
bool puls;
if ((digitalRead(_pin) == 1) && (_est_ant == 0)) {
puls = 1;
_est_ant = 1;
}
else {
puls = 0;
_est_ant = digitalRead(_pin);
}
delay(_anti_bounce);
return puls;
}
bool Button::falling() { //Funcion que retorna un 1 cuando se detecta un falling en el pin <_pin>
bool puls;
if ((digitalRead(_pin) == 0) && (_est_ant == 1)) {
puls = 1;
_est_ant = 0;
}
else {
puls = 0;
_est_ant = digitalRead(_pin);
}
delay(_anti_bounce);
return puls;
}
bool Button::check(){ //Funcion que retorna el estado actual del pin <_pin>
return digitalRead(_pin);
}
bool longPush(unsigned long interval){
static Timer timer(interval);
timer.setInterval(interval);
static bool released = true;
if(digitalRead(_pin)){
timer.end();
released = true;
return false;
} else if (!timer.isRunning() && released){
released = false;
timer.init();
return false;
} else if (timer.read()){
timer.end();
released = false;
return true;
}
return false;
}
.cpp文件中的错误:
bool longPush(unsigned long interval){
static Timer timer(interval);
timer.setInterval(interval);
static bool released = true;
////////////////////////////////////////
if(digitalRead(_pin)){// <--- right here
timer.end();
released = true;
return false;
} else if (!timer.isRunning() && released){
released = false;
timer.init();
return false;
} else if (timer.read()){
timer.end();
released = false;
return true;
}
return false;
}
答案 0 :(得分:2)
sudo apt install clang-format
不是是全局变量;这是一个成员变量。
您正试图像将其用作全局变量一样使用它,因为要定义_pin
(全局函数)而不是longPush
(成员函数)。
这里:
Button::longPush
其他功能没有问题,因为它们的定义没有错字。
这是一个容易犯的错误:我今天至少做过两次!