2 датчика DHT22 и одна функция "чтения показаний"?
- Войдите на сайт для отправки комментариев
Пнд, 16/12/2013 - 18:31
Вот мой код:
#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);
}
подскажите, как правильно сделать одной функцией?
Передавать в функцию сенсор
та это я понял.. но че-то у меня не получается...((
Показывай как пробуешь и что не получается. Ошибки вылезают?
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); }при чем влажность на Sensor_2 падает и когда достигает ниже 1000, в порте лезут непонятные символы:
Решил проблему заменой библиотеки:
#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"); }Этот скетч шлёт нули...