我开始创建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();
}
“你有问题,因为你试图多次定义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);
}
答案是在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);
}
谢谢,它的确有效!!
我没有读取传感器数据,所以我在方法的开头添加了这两行并且它正常工作。
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) {}