2 датчика DHT22 и одна функция "чтения показаний"?

Life23
Offline
Зарегистрирован: 10.08.2013

Вот мой код:

#include <DHT22.h>


#define Sensor_PIN1 4
#define Sensor_PIN2 5

char DHT_Statment[128];

// Setup a DHT22 instance
DHT22 Sensor_1(Sensor_PIN1);
DHT22 Sensor_2(Sensor_PIN2);



void setup()
{
   Serial.begin(9600);
  Serial.println("DHT22 Library Demo");
}

void loop()
{ 
  readSensor1();
  delay(2000);  
  readSensor2();
  delay(2000);
} 


void readSensor1(){ 
  Serial.print("Requesting data Sensor_1...");
  DHT22_ERROR_t errorCode;
  errorCode = Sensor_1.readData();
  sprintf(DHT_Statment, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
  Sensor_1.getTemperatureCInt()/10, abs(Sensor_1.getTemperatureCInt()%10),
  Sensor_1.getHumidityInt()/10, Sensor_1.getHumidityInt()%10);
  Serial.println(DHT_Statment);
}

void readSensor2(){ 
  Serial.print("Requesting data Sensor_2...");
  DHT22_ERROR_t errorCode;
  errorCode = Sensor_2.readData();
  sprintf(DHT_Statment, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
  Sensor_2.getTemperatureCInt()/10, abs(Sensor_2.getTemperatureCInt()%10),
  Sensor_2.getHumidityInt()/10, Sensor_2.getHumidityInt()%10);
  Serial.println(DHT_Statment);
}

подскажите, как правильно сделать одной функцией?

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

 Передавать в функцию сенсор

Life23
Offline
Зарегистрирован: 10.08.2013

та это я понял.. но че-то у меня не получается...((

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Показывай как пробуешь и что не получается. Ошибки вылезают?

CityCat
CityCat аватар
Offline
Зарегистрирован: 13.06.2013

Life23, ну как-то так (набросал быстро - не лучший вариант наверное, но сойдет):

#include <DHT22.h>

#define Sensor_PIN1 4
#define Sensor_PIN2 5

char DHT_Statment[128];

// Setup a DHT22 instance
DHT22 Sensor_1(Sensor_PIN1);
DHT22 Sensor_2(Sensor_PIN2);

DHT22 sens[] = {Sensor_1, Sensor_2};

#define sens_size (sizeof(sens)/sizeof(DHT22))

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT22 Library Demo");
}

void loop()
{
 for (int i=1; i<=sens_size; i++)
 {
  readSensor(sens[i], i);
  delay(2000);
 }
}

void readSensor(DHT22 Sensor, int i)
{ 
  Serial.print("Requesting data Sensor_");
  Serial.print(i);
  Serial.print("...");
  DHT22_ERROR_t errorCode;
  errorCode = Sensor.readData();
  sprintf(DHT_Statment, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
  Sensor.getTemperatureCInt()/10, abs(Sensor.getTemperatureCInt()%10),
  Sensor.getHumidityInt()/10, Sensor.getHumidityInt()%10);
  Serial.println(DHT_Statment);
}
Life23
Offline
Зарегистрирован: 10.08.2013
Requesting data Sensor_1...Integer-only reading: Temperature 26.5 C, Humidity 40.3 % RH
Requesting data Sensor_2...Integer-only reading: Temperature 0.0 C, Humidity 2867.2 % RH
 
Переставил пины на оборот. Все равно на Sensor_2 - глюки.. ((
 
Life23
Offline
Зарегистрирован: 10.08.2013

при чем влажность на Sensor_2 падает и когда достигает ниже 1000, в порте лезут непонятные символы:

Requesting data Sensor_2...Integer-only reading: Temperature 0.0 C, Humidity 1075.2 % RH
Requesting data Sensor_1...Integer-only reading: Temperature 26.3 C, Humidity 41.7 % RH
R¥V¥F) 
´Í¥Í/ö2¹®åié*²õ¹V²
¤ÊD¥Á%ÑM+ ÌÁÐÄ U­¥Z¸N. -ý²)µ5´Ê
´ÍÉÍö1¹Wå´éY½.å VR¹'i©Á%´M%$6ÍÐÄ ª­E¥Z´ÌÝ 2ª©²µi´å
´ÍÉÍ/ö2¹®åié*²ó¹V²
¤ÊD¥%ÑM+ ÌÁÐÄ U­¥t²³4á 2ª©² µi´ä
´ÍÉÍ/ö1¹®åÑé*²ë¹V²ÊD¥%ÑM%H6Í ÄATk)Ñ¢1Ý 2Õ©
Life23
Offline
Зарегистрирован: 10.08.2013

Решил проблему заменой библиотеки:

#include "DHT.h"

DHT dht;
#define pin_sensor1 4 // 4-й Пин дачика 1
#define pin_sensor2 5 //5-й Пин датчика 2

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");
delay(2000); //Время старта датчиков
}

void loop()
{
  SensorRead(pin_sensor1);
    delay(2000);
  SensorRead(pin_sensor2);
    delay(2000);
}

void SensorRead(int i){
dht.setup(i);
  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(dht.getHumidity(), 1);
  Serial.print("\t\t");
  Serial.print(dht.getTemperature(), 1);
  Serial.println("\t\t");
}

 

Starter381
Offline
Зарегистрирован: 12.12.2020

Этот скетч шлёт нули...