_pin是全局变量,但我仍然收到错误:在此范围内未声明“ _pin”

时间:2018-10-30 16:39:21

标签: c++ arduino visual-studio-code platformio

编程语言:c ++

编译程序时出现此错误:
/Button.cpp:50:18: error: '_pin' was not declared in this scope

这是在告诉我变量_pin不在函数范围内声明
bool longPush(unsigned log interval),但已声明,我什至在其他函数中都使用了_pin没问题。

这是引起我麻烦的库Button的文件:

Button.h:

#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

Button.cpp:

#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;
}

1 个答案:

答案 0 :(得分:2)

sudo apt install clang-format 不是是全局变量;这是一个成员变量。

您正试图像将其用作全局变量一样使用它,因为要定义_pin(全局函数)而不是longPush(成员函数)。

这里:

Button::longPush

其他功能没有问题,因为它们的定义没有错字。

这是一个容易犯的错误:我今天至少做过两次!