如何在arduino中创建另一个类库的实例变量

问题描述 投票:0回答:3

我开始创建arduino库。包含已创建的库时出错。

这是使用Arduino Ide将DHT22传感器库包含在另一个库中。

参考文献:

Arduino c++ classes, How to make instance variables of another class/library

https://www.arduino.cc/en/Hacking/LibraryTutorial

图书馆DHT22:

https://github.com/adafruit/DHT-sensor-library

使用的文件:

这个文件的温度是PUOO

#ifndef temperaturaPOO_h
#define temperaturaPOO_h
#include "Arduino.h" 
#include <DHT.h>

DHT dht(1, DHT22);

class temperaturaPOO {  
    int sensor_humedad;
    int sensor_temperatura;
    public:
        temperaturaPOO(int); // ?? x
        void mostrar();     
};
#endif

这个文件的数据是pureuraPOO.cpp

#include <temperaturaPOO.h>
temperaturaPOO::temperaturaPOO(int pin){
    DHT dht(pin, DHT22);
}

void temperaturaPOO::mostrar()
{
    sensor_humedad = dht.readHumidity();  
    sensor_temperatura = dht.readTemperature();

    Serial.print("Humidity:");
    Serial.println(sensor_humedad);
    Serial.print("Temperature:");
    Serial.println(sensor_temperatura);
}

这个文件是blinkLedPOO.ino

#include <temperaturaPOO.h>
temperaturaPOO temp(1); // se instancia
void setup() {
    Serial.begin(9600);
}
void loop() {
    temp.mostrar();
}
c++ class oop object arduino
3个回答
0
投票

“你有问题,因为你试图多次定义DHT dht(1, DHT22);

试试这个: 你的.h文件应该是这样的

#ifndef temperaturaPOO_h
#define temperaturaPOO_h
#include "Arduino.h" 
#include <DHT.h>

class temperaturaPOO {  
private:
    DHT dht;            //define dth here
    int sensor_humedad;
    int sensor_temperatura;
    public:
        temperaturaPOO(int); // ?? x
        void mostrar();     
};
#endif

和.cpp

#include "temperaturaPOO.h"
temperaturaPOO::temperaturaPOO(int pin){
    dth = DHT(pin, DHT22);
}

void temperaturaPOO::mostrar()
{
    sensor_humedad = dht.readHumidity();  
    sensor_temperatura = dht.readTemperature();

    Serial.print("Humidity:");
    Serial.println(sensor_humedad);
    Serial.print("Temperature:");
    Serial.println(sensor_temperatura);
}

0
投票

答案是在one of the links you posted。注释解释了如何在构造函数中初始化对象。传递成员构造函数时,您想使用initializer list

标题看起来应该是这样的。

#ifndef temperaturaPOO_h
#define temperaturaPOO_h
#include "Arduino.h" 
#include <DHT.h>

class temperaturaPOO {  
    int sensor_humedad;
    int sensor_temperatura;
public:
    temperaturaPOO(int);
    void mostrar();

private:
    DHT dht;
};
#endif

这是实施。看看dht是如何初始化的。

#include <temperaturaPOO.h>

temperaturaPOO::temperaturaPOO(int pin): dht(pin, DHT22) {}

void temperaturaPOO::mostrar()
{
    sensor_humedad = dht.readHumidity();  
    sensor_temperatura = dht.readTemperature();

    Serial.print("Humidity:");
    Serial.println(sensor_humedad);
    Serial.print("Temperature:");
    Serial.println(sensor_temperatura);
}

0
投票

谢谢,它的确有效!!

我没有读取传感器数据,所以我在方法的开头添加了这两行并且它正常工作。

temperaturaPOO.cpp

void temperaturaPOO::mostrar()
{
    dht.begin(); // add this
    delay(2000); // add this
    sensor_humedad = dht.readHumidity();  
    sensor_temperatura = dht.readTemperature();
    Serial.print("Humidity:");
    Serial.println(sensor_humedad);
    Serial.print("Temperature:");
    Serial.println(sensor_temperatura);
}

我对构造函数的属性初始化有一个疑问:

你怎么读这一行,换句话说如何记录下来以便做好理解,谢谢!

这条线:

temperaturaPOO::temperaturaPOO(int pin): dht(pin, DHT22) {}
© www.soinside.com 2019 - 2024. All rights reserved.