_pin является глобальной переменной, но я все еще получаю сообщение об ошибке: _pin не был объявлен в этой области

Язык программирования: с ++

Когда я компилирую свою программу, я получаю эту ошибку:
/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

Решение

_pin является не глобальная переменная; это переменная-член.

Вы пытаетесь использовать его как глобальную переменную, потому что вы определяете longPush (глобальная функция) вместо Button::longPush (функция-член).

Вот:

   bool Button::longPush(unsigned long interval){
//      ^^^^^^^^

У вас нет этой проблемы с другими функциями, потому что их определения не имеют этой опечатки.

Однако сделать ошибку легко: я сделал это по крайней мере дважды только сегодня!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]