struct stLampParam {
//# поля для пользовтальских настроек установок
bool isUsed; // используется
bool onDay[7]; // дни включения лампы
uint32_t onTime[7]; // время в секундах с начала дня для включения
uint32_t offTime[7]; // время в секундах с начала дня для вЫключения
uint8_t Power; // мощьность лампы 0=100
int8_t maxTemp; // максимальныя температура лампы, если выше то произойдет отключение
uint8_t maxFanSpeed; // максимальная скорость вентилятора
//# поля информационные изменяются программой
bool isUpdatedData; // обновлено состояние устройства
bool isUpdatedSetup; // обновлено состояние настроек
bool isEnabled; // состояние, включена или нет
int8_t workTemp; // температура лампы
uint8_t fanSpeed; // скорость вентилятора
uint8_t SensorAddr[8]; // адрес сенсора DS18B20
};
stLampParam stLampsParam[4];
void setup() {
Serial.begin(115200);
//# объявим массив для адресов сенсоров
uint8_t lSensorAddr[6][8] = { {90,90,90,90,90,90,90,90}, {80,80,80,80,80,80,80,80}, {50,50,50,50,50,50,50,50}, {10,20,30,40,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}};
//# объявим массив вспомогательных данны
uint8_t lSensorData[6][3] = { {0,0,0}, {1,0,0}, {1,0,0}, {1,0,0}, {0,0,0}, {0,0,0}};
stLampsParam[0].SensorAddr[0] = 90;
stLampsParam[0].SensorAddr[1] = 90;
stLampsParam[0].SensorAddr[2] = 90;
stLampsParam[0].SensorAddr[3] = 90;
stLampsParam[0].SensorAddr[4] = 90;
stLampsParam[0].SensorAddr[5] = 90;
stLampsParam[0].SensorAddr[6] = 90;
stLampsParam[0].SensorAddr[7] = 90;
stLampsParam[1].SensorAddr[0] = 50;
stLampsParam[1].SensorAddr[1] = 50;
stLampsParam[1].SensorAddr[2] = 50;
stLampsParam[1].SensorAddr[3] = 50;
stLampsParam[1].SensorAddr[4] = 50;
stLampsParam[1].SensorAddr[5] = 50;
stLampsParam[1].SensorAddr[6] = 50;
stLampsParam[1].SensorAddr[7] = 50;
stLampsParam[2].SensorAddr[0] = 10;
stLampsParam[2].SensorAddr[1] = 20;
stLampsParam[2].SensorAddr[2] = 30;
stLampsParam[2].SensorAddr[3] = 40;
stLampsParam[2].SensorAddr[4] = 00;
stLampsParam[2].SensorAddr[5] = 00;
stLampsParam[2].SensorAddr[6] = 00;
stLampsParam[2].SensorAddr[7] = 00;
stLampsParam[3].SensorAddr[0] = 80;
stLampsParam[3].SensorAddr[1] = 80;
stLampsParam[3].SensorAddr[2] = 80;
stLampsParam[3].SensorAddr[3] = 80;
stLampsParam[3].SensorAddr[4] = 80;
stLampsParam[3].SensorAddr[5] = 80;
stLampsParam[3].SensorAddr[6] = 80;
stLampsParam[3].SensorAddr[7] = 80;
//# ищем сенсоры
// for (uint8_t cI = 0; cI < 6; cI++) {
// //# мы должный найти 4 адреса, если этого не произошло, присвоим код ошибки и выйдем из функции
// if (!gDSSensors.search(lSensorAddr[cI])) {
// gDSSensors.reset_search();
// gErrorCode = 20;
// delay(250);
// return;
// }
// lSensorData[cI][0] = 1;
// }
uint8_t lOverlapCount = 0;
//# сколько то сенсоров мы нашли, теперь смотрим привязку к лампам, ламп у нас 4
//# cI - адреса сенсоров в лампах
//# cN - найденные адреса сенсоров
for (uint8_t cI = 0; cI < 4; cI++) {
//# сенсоров может быть 6
lOverlapCount = 0;
for (uint8_t cN = 0; cN < 6; cN++) {
if (!lSensorData[cN][0]) {
//# венсора нет, продолжим
Serial.print("Сенсор № ");
Serial.print(cN);
Serial.println(" отсутствует");
continue;
}
//# массив сравниваем поэлементно
for (uint8_t cM = 0; cM < 8; cM++) {
if (stLampsParam[cI].SensorAddr[cM] == lSensorAddr[cN][cM]) {
//# есть совпадение, увеличим счетчик совпадений
lOverlapCount++;
}
}
//# если мы имеем 8 совпадений то значит адрес у лампы записан правильно
if (lOverlapCount == 8) {
//# если адрес совпал то пропишем номер лампы к которой привязан сенсор
lSensorData[cN][1] = cI + 1;
//# и перейдем к другой лампе
Serial.print("Сенсор № ");
Serial.print(cN);
Serial.print(" указан у лампы № ");
Serial.println(cI);
break;
}
}
}
bool lSensorAssigned = false;
//# если пришли сюда то проверим лампы сенсоры которых не найдены и обнулим их
for (uint8_t cI = 0; cI < 4; cI++) {
lSensorAssigned = false;
for (uint8_t cN = 0; cN < 6; cN++) {
if (!lSensorData[cN][0]) {
//# cенсора нет, продолжим
continue;
}
if (lSensorData[cN][1] == (cI + 1)) {
// нашли лампу, прерываем цикл
lSensorAssigned = true;
break;
}
}
Serial.print("У лампы № ");
Serial.print(cI);
//# нет такого сенсора, обнулим в лампе адрес
if (!lSensorAssigned) {
stLampsParam[cI].SensorAddr[8] = { 0 };
Serial.println(" указан несуществующий сенсор, обнулим");
}
else {
Serial.println(" указан сенсор");
}
}
bool lSensorNotUsed = false;
//# теперь смотрим остались ли у нас сенсоры без назначенных ламп
for (uint8_t cN = 0; cN < 6; cN++) {
if (!lSensorData[cN][0]) {
//# cенсора нет, продолжим
continue;
}
if (lSensorData[cN][1] != 0) {
//# лампа назначена
continue;
}
lSensorNotUsed = true;
break;
}
//# если у нас остались не привязанные сенсоры и лампы без сенсоров то надо провреить принадлежат ли какие либо сенсоры лампам
if (lSensorNotUsed) {
//# запускаем процедуру привязки
Serial.println("Есть сенсоры без ламп");
}
else{
Serial.println("Нет сенсоров без ламп");
}
// Serial.println("Client mode");
// Serial.println("AP mode");
}
void loop() {
delay(10); // this speeds up the simulation
}