6 датчиков DHT11 на одном пине

medossa
Offline
Зарегистрирован: 10.07.2012

Подскажите, как реализуется код для такого случая. Есть код из примера:

/*####################################################################
 FILE: dht11_functions.pde
 VERSION: 0.4.5
 PURPOSE: Test DHT11 Temperature & Humidity Sensor library functions
 LICENSE: GPL v3 (http://www.gnu.org/licenses/gpl.html)

 DATASHEET: http://feed.virtuabotix.com/wp-content/uploads/2011/11/DHT11.pdf
 GET UPDATES: http://feed.virtuabotix.com/?239
 
     --##--##--##--##--##--##--##--##--##--##--  
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     | ##  ##  ##  ##  ##  ##  ##  ##  ##  ## |
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     | ##  ##  ##  ##  ##  ##  ##  ##  ##  ## |
     ##  ##  ##  ## DHT11 SENSOR ##  ##  ##  ##
     ##  ##  ##  ##  ##FRONT ##  ##  ##  ##  ##
     | ##  ##  ##  ##  ##  ##  ##  ##  ##  ## |
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     | ##  ##  ##  ##  ##  ##  ##  ##  ##  ## |
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     ##  ##  ##  ##  ##  ##  ##  ##  ##  ##  ##
     --##--##--##--##--##--##--##--##--##--##--
         ||       ||          || (Not    || 
         ||       ||          || Used)   || 
       VDD(5V)   Readout(I/O)          Ground
                 
 HISTORY:
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.5 (11/11/11)
 Mod by Joseph Dattilo (Virtuabotix LLC) - Version 0.4.0 (06/11/11)
 Mod by Rob Tillaart - Version 0.3 (28/03/2011)
 Mod by SimKard - Version 0.2 (24/11/2010)
 George Hadjikyriacou - Original version (??)
#######################################################################*/

#include <dht11.h>

dht11 DHT11;

#define DHT11PIN 2

void setup()
{
  Serial.begin(9600);
  Serial.println("DHT11 TEST PROGRAM ");
  Serial.print("LIBRARY VERSION: ");
  Serial.println(DHT11LIB_VERSION);
}

void loop()
{
  Serial.println("\n");

  int chk = DHT11.read(DHT11PIN);

  Serial.print("Read sensor: ");
  switch (chk)
  {
    case 0: Serial.println("OK"); break;
    case -1: Serial.println("Checksum error"); break;
    case -2: Serial.println("Time out error"); break;
    default: Serial.println("Unknown error"); break;
  }

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, DEC);

  Serial.print("Temperature ( °C): ");
  Serial.println((float)DHT11.temperature, DEC);

  Serial.print("Temperature ( °F): ");
  Serial.println(DHT11.fahrenheit(), DEC);

  Serial.print("Temperature ( °K): ");
  Serial.println(DHT11.kelvin(), DEC);

  Serial.print("Dew Point ( °C): ");
  Serial.println(DHT11.dewPoint(), DEC);

  Serial.print("Dew PointFast ( °C): ");
  Serial.println(DHT11.dewPointFast(), DEC);

  delay(2000);
}


  delay(2000);
}

Т.е. здесь датчик повешен на второй пин и вывод температуры и влажности происходит путём:

  Serial.print("Humidity (%): ");
  Serial.println((float)DHT11.humidity, DEC);

  Serial.print("Temperature ( °C): ");
  Serial.println((float)DHT11.temperature, DEC);

Как вывести остальные пять датчиков? не воткну что-то))

maksim
Offline
Зарегистрирован: 12.02.2012
#define DHT11PIN_1 2
#define DHT11PIN_2 3
#define DHT11PIN_3 4
#define DHT11PIN_4 5
.........

DHT11.read(DHT11PIN_1);
DHT11.temperature;
DHT11.humidity;
...
DHT11.read(DHT11PIN_2);
DHT11.temperature;
DHT11.humidity;
...
DHT11.read(DHT11PIN_3);
DHT11.temperature;
DHT11.humidity;
...
DHT11.read(DHT11PIN_4);
DHT11.temperature;
DHT11.humidity;
...

 

medossa
Offline
Зарегистрирован: 10.07.2012

я просто подумал, что объект может надо создавать для каждого датчика, dht11 DHT1, dht11 DHT2 и т.д.

в вашем примере получается, что каждый датчик на своём пине сидит?

maksim
Offline
Зарегистрирован: 12.02.2012

А вы как хотели? Все на один вывод посадить? Так не получится.

medossa
Offline
Зарегистрирован: 10.07.2012

я туплю или это датчики работающие по 1-Wire?

ds18b20 можно ведь десятками на пин вешать.... Думал, что эти такие же.

maksim
Offline
Зарегистрирован: 12.02.2012

Нет, они не общаются по 1-Wire.

leshak
Offline
Зарегистрирован: 29.09.2011

>я просто подумал, что объект может надо создавать для каждого датчика

Зависит от того какую библиотеку вы используете. Открывайте файл .h ее и смотрите, кто принимает параметр pin. Конструктор или кокретные функции чтения. 

Я, к примеру, использую https://github.com/adafruit/DHT-sensor-library

И там какой пин использовать (и какого типа датчик) передается именно в конструкторе. И действительно нужно "создавать объект для каждого датчика".

Но, судя по вашему изначальному скетчу, у вас библиотека где в read() нужно пихать пин каждый раз, а объект - один на всех. Вообщем с вашей библиотекой нужно работать именно так как показал Максим.

>>medossa: ds18b20 можно ведь десятками на пин вешать.... Думал, что эти такие же.
>maksim:Нет, они не общаются по 1-Wire

Не уверен за DHT11, но DHT22 внутри себя используют именно DS18B20. Хотя, конечно, это ничего не меняет. Снаружи это увидеть никак нельзя. Просто "любопытный факт" ;) 

medossa
Offline
Зарегистрирован: 10.07.2012

to maksim, to leshak - мои благодарности.

maksim
Offline
Зарегистрирован: 12.02.2012

leshak пишет:

Не уверен за DHT11, но DHT22 внутри себя используют именно DS18B20. Хотя, конечно, это ничего не меняет. Снаружи это увидеть никак нельзя. Просто "любопытный факт" ;) 

Дело в том, что в  DHT11 и DHT22 стоит микроконтроллер, который в случае с DHT22 и общается с DS18B20.

leshak
Offline
Зарегистрирован: 29.09.2011

maksim пишет:

leshak пишет:

Не уверен за DHT11, но DHT22 внутри себя используют именно DS18B20. Хотя, конечно, это ничего не меняет. Снаружи это увидеть никак нельзя. Просто "любопытный факт" ;) 

Дело в том, что в  DHT11 и DHT22 стоит микроконтроллер, который в случае с DHT22 и общается с DS18B20.

Перепрошить гада и заставить работать по One-wire ;)

maksim
Offline
Зарегистрирован: 12.02.2012

Перепрошить врядли так просто получится. А вот то что разводка сходна с ATtiny24/44/84 это очень вероятно, так что можно заменить на тиню.