//Макет системы управления лазерной сеткой полётного поля
//Подключаем библиотеки
#include "IRremote.h" // ИК пульт, дистанционное управление
//Формируем символьные имена для переменных, констант и массивов
#define Buz 9 //указываем пин, к которому подключен динамик
#define IR 12 //указываем пин, к которому подключен ИК-приёмник
byte N=4; //указываем количество управляющих реле (излучателей)
int Td=500; //указываем время тестового включения управляющих реле (излучателей)
int Timer=3000; //указываем время включения управляющих реле (излучателей) на заданный временнойя интервал
void setup() {
Serial.begin(9600); // выставляем скорость COM порта для обмена с компьютером и отладки
Serial.println("Инициализация системы");
for(byte i=2; i<=N+1; i++) {
pinMode (i, OUTPUT); //программируем пины на цифровой вывод
digitalWrite(i, 0); //выключаем управляющее реле (сетку)
}
digitalWrite(Buz, 0); //выключаем звуковой сигнал
IrReceiver.begin(IR); // инициализируем ИК-приёмник
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
}
void loop() {
// Проверяем наличие сигнала на ИК-приёмнике
if (IrReceiver.decode()) {
Serial.println("Десятичный код кнопки: "+ String(IrReceiver.decodedIRData.command)); //выводим код кнопки
switch(IrReceiver.decodedIRData.command) {
case 34: //кнопка "Тест"
test(); //вызываем процедуру тестирования
break;
case 168: //кнопка "Исполнить"
turn_all(); //включаем все излучатели
break;
case 176: //кнопка "Сброс"
turn_off(); //выключаем все излучатели
break;
case 48: //кнопка "1"
turn_on(2); //включаем первый излучатель
break;
case 24: //кнопка "2"
turn_on(3); //включаем второй излучатель
break;
case 122: //кнопка "3"
turn_on(4); //включаем третий излучатель
break;
case 16: //кнопка "4"
turn_on(5); //включаем четвертый излучатель
break;
case 194: //кнопка "Возврат"
turn_Timer(); //включаем все ищлучатели на заданное время
break;
}
IrReceiver.resume(); //принимаем следующую команду
}
}
//Функции
void test() {
Serial.println("Тестирование системы");
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
for(byte i=2; i<=N+1; i++) digitalWrite(i, 0); //предварительно выключаем управляющее реле (сетку)
delay(1000);
for(byte i=2; i<=N+1; i++) {
digitalWrite(i, 1); //последовательно включаем управляющее реле (сетку) с небольшой задержкой
delay(Td);
}
for(byte i=2; i<=N+1; i++) digitalWrite(i, 0); //выключаем управляющее реле (сетку)
// tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
}
void turn_off() {
Serial.println("Выключение всех излучателей");
for(byte i=2; i<=N+1; i++) digitalWrite(i, 0); //выключаем управляющее реле (сетку)
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
}
void turn_on(byte n) {
digitalWrite(n, 1); //включаем управляющее реле (сетку)
Serial.println("Включение выбранного излучателя");
}
void turn_all() {
Serial.println("Включение всех излучателей");
for(byte i=2; i<=N+1; i++) digitalWrite(i, 1); //выключаем управляющее реле (сетку)
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
}
void turn_Timer() {
Serial.println("Включение всех излучателей");
for(byte i=2; i<=N+1; i++) digitalWrite(i, 1); //выключаем управляющее реле (сетку)
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
Serial.println("Выключение всех излучателей");
delay(Timer);
for(byte i=2; i<=N+1; i++) digitalWrite(i, 0); //выключаем управляющее реле (сетку)
//tone(Buz, 800, 500); // генерируем звук 800 Гц в течение 500 миллисекунд
}