Получение приватного свойства bool из метода в библиотеке Arduino

Я создаю свою собственную библиотеку в 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
}

Проблема в том, что когда я вызываю функцию IsOpen внутри функции loop () Arduino, я всегда получаю значение false, и Pump немедленно отключается.
Что не так с моим кодом?

2

Решение

Ваш PUMP1.IsOpen() просто создает временный объект Pump класс, который немедленно уничтожен.

Вам нужно создать объект Pump что живут на протяжении всего выполнения программы. Я не знаком с потоком вызовов Arduino, но вы могли бы достичь этого с помощью некоторого метода инициализации / настройки или использовать одноэлементный дизайн или для этого простого варианта использования создать глобальный объект Pump (который я обычно не обучаю людей и против использования такого дизайна)

2

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector