从 Arduino 库中的方法获取 private bool 属性
Getting private bool property from method in Arduino library
我在 arduino 中创建自己的库来控制泵。
图书馆很简单:
Pump.h
#ifndef Pump_h
#define Pump_h
#include "Arduino.h"
class Pump
{
public:
Pump(int pin);
void Open(void);
void Close(void);
boolean IsOpen(void);
private:
int _pin;
bool _status;
};
#endif
Pump.cpp
#include "Arduino.h"
#include "Pump.h"
Pump::Pump(int pin)
{
pinMode(pin, OUTPUT);
digitalWrite(pin,HIGH);
_pin = pin;
_status = false;
}
void Pump::Open(void)
{
digitalWrite(_pin, LOW);
_status = true;
}
void Pump::Close(void)
{
digitalWrite(_pin, HIGH);
_status = false;
}
boolean Pump::IsOpen(void)
{
return _status;
}
loop()
#include <Pump.h>
#define PUMP1 Pump(9)
void loop() {
BridgeClient client = server.accept(); // Get clients coming from server
if (client) { // There is a new request from client?
Console.println("Client connected");
process(client); // Process request
client.stop(); // Close connection and free resources.
}
Console.println(PUMP1.IsOpen());
delay(50); // Poll every 50ms
}
问题是,当我在 Arduino 的 loop() 函数中调用函数 IsOpen 时,我得到的结果总是 false 并且 Pump 立即关闭。
我的代码有什么问题?
您的 PUMP1.IsOpen()
只是创建了 Pump
class 的临时对象,该对象会立即被销毁。
您需要创建一个 Pump
的对象,该对象在整个程序执行过程中都存在。我不熟悉 Arduino 调用流程,但您可以使用一些 initialization/setup 方法或使用单例设计来实现这一点,或者对于这个简单的用例创建一个 Pump
的全局对象(我通常不教育人并且反对使用这样的设计)
我在 arduino 中创建自己的库来控制泵。 图书馆很简单:
Pump.h
#ifndef Pump_h
#define Pump_h
#include "Arduino.h"
class Pump
{
public:
Pump(int pin);
void Open(void);
void Close(void);
boolean IsOpen(void);
private:
int _pin;
bool _status;
};
#endif
Pump.cpp
#include "Arduino.h"
#include "Pump.h"
Pump::Pump(int pin)
{
pinMode(pin, OUTPUT);
digitalWrite(pin,HIGH);
_pin = pin;
_status = false;
}
void Pump::Open(void)
{
digitalWrite(_pin, LOW);
_status = true;
}
void Pump::Close(void)
{
digitalWrite(_pin, HIGH);
_status = false;
}
boolean Pump::IsOpen(void)
{
return _status;
}
loop()
#include <Pump.h>
#define PUMP1 Pump(9)
void loop() {
BridgeClient client = server.accept(); // Get clients coming from server
if (client) { // There is a new request from client?
Console.println("Client connected");
process(client); // Process request
client.stop(); // Close connection and free resources.
}
Console.println(PUMP1.IsOpen());
delay(50); // Poll every 50ms
}
问题是,当我在 Arduino 的 loop() 函数中调用函数 IsOpen 时,我得到的结果总是 false 并且 Pump 立即关闭。 我的代码有什么问题?
您的 PUMP1.IsOpen()
只是创建了 Pump
class 的临时对象,该对象会立即被销毁。
您需要创建一个 Pump
的对象,该对象在整个程序执行过程中都存在。我不熟悉 Arduino 调用流程,但您可以使用一些 initialization/setup 方法或使用单例设计来实现这一点,或者对于这个简单的用例创建一个 Pump
的全局对象(我通常不教育人并且反对使用这样的设计)