Разобрался с датчиками температуры - теперь температуры выводит в жёсткой зависимости от порядкового номера сирийника и порядкового номера названия датчика в массиве. Если датчик сломался - то он просто игнорируется. Поэтому избавился от системы здоровья, за ненадобностью. Теперь осталось выкинуть библиотеку далласа и проверить всё на железе (тестил в протеусе)
Код: Выделить всё
/*
Modul Temperature
part of Arduino Mega Server project
*/
#ifdef TEMP_FEATURE
#include <DallasTemperature.h>
#include <OneWire.h>
#define ONE_WIRE_BUS 2
byte const MAX_TEMP_SENSORS = 7;
byte const MAX_ID_DIGITS = 7;
//byte const FULL_HEALTH = 100;
//byte const ZERO_HEALTH = 0;
//byte tempSensorHealth[MAX_TEMP_SENSORS];
//byte tempModulHealth;
char objSens[MAX_TEMP_SENSORS][12] = {"tempSTR", "tempHOM", "tempWRM","sens4","sens5","sens6","sens7"};
// Sensors ID's
byte idTempDat[MAX_TEMP_SENSORS][MAX_ID_DIGITS] = {
{40, 50, 197, 184, 0, 0, 0}, // STR
{40, 52, 197, 184, 0, 0, 0},// SRV
{40, 48, 197, 184, 0, 0, 0}, // WRM
{40, 54, 197, 184, 0, 0, 0}, // 4
{40, 49, 197, 184, 0, 0, 0},// 5
{40, 53, 197, 184, 0, 0, 0}, // 6
{40, 55, 197, 184, 0, 0, 0}, // 7
};
float current_temp[MAX_TEMP_SENSORS];
int temp_[MAX_TEMP_SENSORS];
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempSensor[MAX_TEMP_SENSORS];
void tempInit() {
initStart("Temperature");
sensors.begin();
timeStamp();
Serialprint(" Parasite power ");
if (sensors.isParasitePowerMode()) {Serialprint("ON\r");}
else {Serialprint("OFF\r");}
oneWire.reset_search();
// locate devices on the bus
timeStamp();
Serialprint(" Found ");
Serial.print(sensors.getDeviceCount());
Serialprint(" devices\r");
for (byte i = 0; i < MAX_TEMP_SENSORS; i++) {
sensors.getAddress(tempSensor[i], i);
}
oneWire.reset_search();
showSensorsId();
modulTemp = MODUL_ENABLE;
initDone();
}
void showSensorsId() {
for (byte n = 0; n < MAX_TEMP_SENSORS; n++) {
timeStamp();
Serialprint("#");
Serial.print(n);
Serialprint(":");
for (byte i = 0; i < MAX_ID_DIGITS; i++) {
Serialprint(" ");
Serial.print(tempSensor[n][i]);
}
Serialprint(" ");
//Serial.println(objSens[n]);
}
}
void tempWorks() {
sensors.requestTemperatures();
getTemperature(0); // STR
getTemperature(1); // HOM
getTemperature(2); // WRM
getTemperature(3); // 4
getTemperature(4); // 5
getTemperature(5); // 6
getTemperature(6); // 7
getTemperature(7); // 8
}
void getTemperature(byte n) {
for (byte i = 0; i < MAX_TEMP_SENSORS; i++) {
if (!memcmp(tempSensor[i], idTempDat[n], MAX_TEMP_SENSORS)){
current_temp[i] = sensors.getTempC(tempSensor[i]);
timeStamp();
Serial.print(objSens[n]);
Serialprint(": ");
Serial.println(current_temp[i]);
temp_[i] = (current_temp[i] - (int)current_temp[i]) * 100;
if ((current_temp[i] > -1) && (current_temp[i] < 0)) {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM(objSens[n], "-", (int)current_temp[i], abs(temp_[i]));
#endif
} else {
#ifdef MAJORDOMO_FEATURE
sendRequestMinusM(objSens[n], "", (int)current_temp[i], abs(temp_[i]));
#endif
}
}
else {}
}
} // getTemperature( )
#endif // TEMP_FEATURE