Если мне надо считывать данные с нескольких датчиков DHT, чтобы потом по их значениям индивидуально управлять отоплением в каждой комнате, то код будет такой?
arduino_mega_server.ino
Код: Выделить всё
// Features
#define DHT_FEATURE
// Modules
byte moduleDHT = NOT_COMPILLED;
void setup() {
#ifdef DHT_FEATURE
initDHT();
#endif
}
void loop() {
#ifdef DHT_FEATURE
workDHT();
#endif
}
temp_dht.ino
Код: Выделить всё
#ifdef DHT_FEATURE
#include "DHT.h"
#define MAX_DHT_SENSORS 14
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// DHT Sensors
const int DHTKuhPin = 40;
const int DHTKladPin = 41;
const int DHTShowerPin = 42;
const int DHTHallPin = 43;
const int DHTCabinetPin = 44;
const int DHTCorridorPin = 45;
const int DHTStairsPin = 46;
const int DHTBathroomPin = 47;
const int DHTRoom1Pin = 48;
const int DHTRoom2Pin = 49;
const int DHTRoom3Pin = 50;
const int DHTBoilerPin = 51;
const int DHTBasementPin = 52;
const int DHTOutdoorPin = 53;
// Initialize DHT sensors.
DHTKuhnja dht(DHTKuhPin, DHTTYPE);
DHTKladovka dht(DHTKladPin, DHTTYPE);
DHTShower dht(DHTShowerPin, DHTTYPE);
DHTHall dht(DHTHallPin, DHTTYPE);
DHTCabinet dht(DHTCabinetPin, DHTTYPE);
DHTCorridor dht(DHTCorridorPin, DHTTYPE);
DHTStairs dht(DHTStairsPin, DHTTYPE);
DHTBathroom dht(DHTBathroomPin, DHTTYPE);
DHTRoom1 dht(DHTRoom1Pin, DHTTYPE);
DHTRoom2 dht(DHTRoom2Pin, DHTTYPE);
DHTRoom3 dht(DHTRoom3, DHTTYPE);
DHTBoiler dht(DHTBoiler, DHTTYPE);
DHTBasement dht(DHTBasement, DHTTYPE);
DHTOutdoor dht(DHTOutdoor, DHTTYPE);
// массив objDHTSens хранит названия датчиков
char objDHTSens[MAX_DHT_SENSORS] = {"Kuh", "Klad", "Shower", "Hall", "Cabinet", "Corridor", "Stairs", "Bathroom", "Room1", "Room2", "Room3", "Boiler", "Basement", "Outdoor"};
// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];
void initDHT() {
moduleDHT = MODULE_ENABLE;
started("DHT");
}
void workDHT() {
if (cycle5m) {
for (int i = 0; i < MAX_DHT_SENSORS; i++) {
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Failed to read from DHT sensor!");
strcpy(celsiusTemp,"Failed");
strcpy(fahrenheitTemp, "Failed");
strcpy(humidityTemp, "Failed");
}
else{
float hic = dht.computeHeatIndex(t, h, false);
dtostrf(hic, 6, 2, celsiusTemp);
float hif = dht.computeHeatIndex(f, h);
dtostrf(hif, 6, 2, fahrenheitTemp);
dtostrf(h, 6, 2, humidityTemp);
// выводи в монитор порта название датчика и его показания
Serial.print(objDHTSens[i]);
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t Temperature: ");
Serial.print(t);
Serial.println(" *C ");
}
}
}
}
#endif
server_ajax.ino
Код: Выделить всё
// Make Response
#ifdef DHT_FEATURE
for (int i = 0; i < MAX_DHT_SENSORS; i++) {
s += makeTag(objDHTSens[i], "temp", String(t, 1));
s += makeTag(objDHTSens[i], "hum", String(h, 1));
}
#endif
dash.js
Код: Выделить всё
// DHT's temperature
var dhtTName = ['Кухня', 'Кладовка', 'Душевая', 'Зал', 'Кабинет', 'Коридор', 'Лестница', 'Ванная', 'Комната 1', 'Комната 2', 'Комната 3', 'Котельная', 'Подвал', 'Улица'];
var dhtTXml = ['Kuhtemp', 'Kladtemp', 'Showertemp', 'Halltemp', 'Cabinettemp', 'Corridortemp', 'Stairstemp', 'Bathroomtemp', 'Room1temp', 'Room2temp', 'Room3temp', 'Boilertemp', 'Basementtemp', 'Outdoortemp'];
var dhtTId = ['dash-Kuhtemp', 'dash-Kladtemp', 'dash-Showertemp', 'dash-Halltemp', 'dash-Cabinettemp', 'dash-Corridortemp', 'dash-Stairstemp', 'dash-Bathroomtemp', 'dash-Room1temp', 'dash-Room2temp', 'dash-Room3temp', 'dash-Boilertemp', 'dash-Basementtemp', 'dash-Outdoortemp'];
// DHT's humidity
var dhtHName = ['Кухня', 'Кладовка', 'Душевая', 'Зал', 'Кабинет', 'Коридор', 'Лестница', 'Ванная', 'Комната 1', 'Комната 2', 'Комната 3', 'Котельная', 'Подвал', 'Улица'];
var dhtHXml = ['Kuhhum', 'Kladhum', 'Showerhum', 'Hallhum', 'Cabinethum', 'Corridorhum', 'Stairshum', 'Bathroomhum', 'Room1hum', 'Room2hum', 'Room3hum', 'Boilerhum', 'Basementhum', 'Outdoorhum'];
var dhtHId = ['dash-Kuhhum', 'dash-Kladhum', 'dash-Showerhum', 'dash-Hallhum', 'dash-Cabinethum', 'dash-Corridorhum', 'dash-Stairshum', 'dash-Bathroomhum', 'dash-Room1hum', 'dash-Room2hum', 'dash-Room3hum', 'dash-Boilerhum', 'dash-Basementhum', 'dash-Outdoorhum'];
function getDashData() {
// DHT's temp
for (var i = 0; i < dhtTName.length; i++) {
try {
var ddht = this.responseXML.getElementsByTagName(dhtTXml[i])[0].childNodes[0].nodeValue;
} catch (err) {
ddht = '-1';
//alert('Error' + err.name + ':' + err.message + '\n' + err.stack);
}
try {
document.getElementById(dhtTId[i]).innerHTML = ddht[i];
} catch (err) { }
}
// DHT's hum
for (var i = 0; i < dhtHName.length; i++) {
try {
var ddht = this.responseXML.getElementsByTagName(dhtHXml[i])[0].childNodes[0].nodeValue;
} catch (err) {
ddht = '-1';
//alert('Error' + err.name + ':' + err.message + '\n' + err.stack);
}
try {
document.getElementById(dhtHId[i]).innerHTML = ddht[i];
} catch (err) { }
}
}