как сделать переменные экземпляра другой библиотеки классов в Arduino - PullRequest
0 голосов
/ 07 апреля 2019

Я начинаю с создания библиотек arduino. У меня возникают ошибки при включении уже созданных библиотек.

Включение библиотеки датчиков DHT22 в другую библиотеку с использованием Arduino Ide.

Ссылки:

Arduino c ++ классы, Как создать переменные экземпляра другого класса / библиотеки

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

Библиотека DHT22:

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

Используемые файлы:

Этот файл temperaturaPOO.h

#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

Этот файл temperaturaPOO.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();
}

Ответы [ 3 ]

0 голосов
/ 07 апреля 2019

Ответ: по одной из опубликованных вами ссылок .Комментарии объясняют, как инициализировать объекты в конструкторе.Когда вы передаете конструктор-член, вы хотите использовать список инициализатора .

. Заголовок должен выглядеть примерно так:

#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 голосов
/ 08 апреля 2019

Спасибо, это работает !!

Я не читал данные датчика, поэтому я добавил эти две строки в начале метода, и он работает правильно.

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) {}
0 голосов
/ 07 апреля 2019

"У вас проблема, потому что вы пытались определить 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...