2017-01-28 14 views
2

Я создаю свою собственную библиотеку в arduino для управления насосом. Библиотека очень проста:Получение частного свойства bool из метода в библиотеке 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 внутри функции цикла() в Arduino я всегда ложно и насос немедленно выключается. Что случилось с моим кодом?

+1

Пожалуйста, покажите свой 'loop()' – P0W

+0

. Я отредактировал ответ – CrazYoshi

ответ

2

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

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

+1

спасибо, решена. Просто удалил #define и вместо этого использовал Pump PUMP1 (9); – CrazYoshi