Библиотека для датчиков DHT

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

Понадобилось подключить несколько датчиков к ардуине и для этих целей была переделана одна из существующих либ.

Пример:

#include "stDHT.h"
DHT sens(DHT22); // Указать датчик DHT11, DHT21, DHT22

void setup() 
{
  Serial.begin(57600);
  pinMode(2, INPUT);
  digitalWrite(2, HIGH);
  pinMode(3, INPUT);
  digitalWrite(3, HIGH);
}

void loop() 
{
  int t = sens.readTemperature(2); // чтение датчика на пине 2
  int h = sens.readHumidity(2);    // чтение датчика на пине 2
  delay(2000);
  
  int t2 = sens.readTemperature(3); // чтение датчика на пине 3
  int h2 = sens.readHumidity(3);    // чтение датчика на пине 3
  delay(2000);
  
  Serial.print("Hum: ");
  Serial.print(h);
  Serial.print(" %");
  Serial.print("Temp: ");
  Serial.print(t);
  Serial.println(" C ");
  Serial.print("Hum2: ");
  Serial.print(h2);
  Serial.print(" %");
  Serial.print("Temp2: ");
  Serial.print(t2);
  Serial.println(" C "); 
}

Скачать и узнать подробности, можно здесь.

 

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

А до того не получалось использовать несколько датчиков одновременно?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

переделал пример. должно по идее работать. но опрос только для 1 сделал, лень было для второго делать

#include <DHT22.h>
//#include <stdio.h>

#define DHT22_1 7
#define DHT22_2 8

DHT22 myDHT22_1(DHT22_1);
DHT22 myDHT22_2(DHT22_2);

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

void loop(void)
{ 
  DHT22_ERROR_t errorCode;
  
  // The sensor can only be read from every 1-2s, and requires a minimum
  // 2s warm-up after power-on.
  delay(2000);
  
  Serial.print("Requesting data...");
  errorCode = myDHT22_1.readData();
  switch(errorCode)
  {
    case DHT_ERROR_NONE:
      Serial.print("Got Data ");
      Serial.print(myDHT22_1.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22_1.getHumidity());
      Serial.println("%");
      // Alternately, with integer formatting which is clumsier but more compact to store and
	  // can be compared reliably for equality:
	  //	  
      char buf[128];
      sprintf(buf, "Integer-only reading: Temperature %hi.%01hi C, Humidity %i.%01i %% RH",
                   myDHT22_1.getTemperatureCInt()/10, abs(myDHT22_1.getTemperatureCInt()%10),
                   myDHT22_1.getHumidityInt()/10, myDHT22_1.getHumidityInt()%10);
      Serial.println(buf);
      break;
    case DHT_ERROR_CHECKSUM:
      Serial.print("check sum error ");
      Serial.print(myDHT22_1.getTemperatureC());
      Serial.print("C ");
      Serial.print(myDHT22_1.getHumidity());
      Serial.println("%");
      break;
    case DHT_BUS_HUNG:
      Serial.println("BUS Hung ");
      break;
    case DHT_ERROR_NOT_PRESENT:
      Serial.println("Not Present ");
      break;
    case DHT_ERROR_ACK_TOO_LONG:
      Serial.println("ACK time out ");
      break;
    case DHT_ERROR_SYNC_TIMEOUT:
      Serial.println("Sync Timeout ");
      break;
    case DHT_ERROR_DATA_TIMEOUT:
      Serial.println("Data Timeout ");
      break;
    case DHT_ERROR_TOOQUICK:
      Serial.println("Polled to quick ");
      break;
  }
}

 

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

Я ещё повыпиливал оттуда часть функций.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

так если функция не используется в коде то и не используется при компиляции

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

Либа стала легче на ~два килобайта.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

либа или код после компиляции?

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

До:

 

После:

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

int и float для температуры. почему?

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

int.

Размер глобальных переменных почти не изменился.

В своей либе я убрал float.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хорошо. ты меня убедил. ты сократил код

stdima
stdima аватар
Offline
Зарегистрирован: 11.03.2015

Не преследовал целей убеждения кого-либо. Библиотеку делал для собственных нужд, чтоб было удобно добавлять датчики.