//Символьные имена линий портов ввода/вывода
#define A_Light 2 //реле освещения
#define A_Buz 3 //звуковой излучатель
#define IL_Mode 4 //индикация режима освещения
#define IW_Mode 6 //индикация режима отопления
#define A_Warm 5 //реле отопления
#define S_Pir 9 //сенсор присутствия
#define K_Light 10 //кнопка упраяления освещением
#define S_Light 11 //сенсор освещения
#define Sw_Light 12 //переключатель освяещения
#define Sw_Mode 13 //переключатель режима освещения
// Наменование и принадлежность пинов
#define S_Temp A0
#define S_Warm A1
#define SDA A4
#define SCL A5
// Формирование и инициализация переменных и констант
boolean Mode = 0;
boolean L_Mode = 0;
boolean W_Mode = 0;
boolean Auto = 0;
boolean Light = 0;
boolean Sens = 0;
boolean L_Previous = 0;
boolean L_Current = 0;
boolean W_Previous = 0;
boolean W_Current = 0;
void setup() {
//Инициализация группы портов на вывод и ввод
for (int i=2; i<=7; i=i+1) {
pinMode(i, OUTPUT);
pinMode(i+6, INPUT_PULLUP);
}
//Вывод начальных состояний и оповещение пользователя
digitalWrite(A_Light, 0);
digitalWrite(IL_Mode, 1);
digitalWrite(A_Warm, 0);
digitalWrite(IW_Mode, 1);
// проигрывать 800 Гц тон в течение 0.1 секунды
tone(A_Buz, 800, 100);
delay(50);
Serial.begin(9600);
Serial.println("Система 'Умный дом' активирована");
Serial.println("Режим освещения автоматический");
Serial.println("Режим отопления автоматический");
}
void loop() {
//Анализ текущего режима работы освещения, если "Авто" - включаем светодиод, иначе гасим
if (digitalRead(Sw_Mode) == 1) {
Auto == 1;
digitalWrite(IL_Mode, Auto);
Serial.println("Режим освещения автоматический");
} else {
Auto == 0;
digitalWrite(IL_Mode, Auto);
Serial.println("Режим освещения ручной");
}
//Анализ текущего режима работы отопления, если "Авто" - включаем светодиод, иначе гасим
// Управление освещением: если достаточное и пользователь
//не включает принудительно, то выключить, иначе - включить
//Если режим "Авто" выключен - только принудитедельное включение пользователем
//проверка нажатия кнопки управления освещением и устранение дребезга
if (digitalRead(K_Light) == 0) {
delay(1000);
if (digitalRead(K_Light) == 1) {
Mode = !Mode;
}
}
if (digitalRead(Sw_Light) == 0 ) {
L_Current = 1;
digitalWrite(A_Light, 0);
} else {
L_Current = 0;
digitalWrite(A_Light, 0);
}
}