从Arduino库中的方法获取私有bool属性

时间:2017-01-28 18:27:39

标签: c++ arduino arduino-yun

我正在用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;
}

环()

#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时,我总是得到假,并且泵立即关闭。 我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

您的List<T>只会创建一个PUMP1.IsOpen()类的临时对象,该对象会立即被销毁。

您需要在整个程序执行过程中创建一个Pump的对象。我不熟悉Arduino调用流程,但您可以通过一些初始化/设置方法或使用单例设计来实现这一点,或者对于这个简单的用例创建一个Pump的全局对象(我通常不会教育它)人们反对使用这样的设计)