Библиотека для датчиков DHT
- Войдите на сайт для отправки комментариев
Пт, 04/09/2015 - 10:34
Понадобилось подключить несколько датчиков к ардуине и для этих целей была переделана одна из существующих либ.
Пример:
#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 ");
}
Скачать и узнать подробности, можно здесь.
А до того не получалось использовать несколько датчиков одновременно?
переделал пример. должно по идее работать. но опрос только для 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; } }Я ещё повыпиливал оттуда часть функций.
так если функция не используется в коде то и не используется при компиляции
Либа стала легче на ~два килобайта.
либа или код после компиляции?
До:
После:
int и float для температуры. почему?
int.
Размер глобальных переменных почти не изменился.
В своей либе я убрал float.
хорошо. ты меня убедил. ты сократил код
Не преследовал целей убеждения кого-либо. Библиотеку делал для собственных нужд, чтоб было удобно добавлять датчики.