// Библиотека для работы с SPI #include // Библиотека для работы с SD-картами #include // Библиотека для работы с ИК-приёмником и передатчиком #include // Имя пина, которому подключен приёмник #define RECV_PIN 4 // Имя пина, к которому подключен передатчик #define SEND_PIN 9 // Имя для CS пина microSD-карты #define SD_CS_PIN 8 // Имена пинов для кнопок #define BUTTON_S1 A2 #define BUTTON_S2 A3 #define BUTTON_S3 3 #define BUTTON_S4 6 // Строка с хранением данных введенных в последовательный порт #define command_S1 "C_S1.txt" #define command_S2 "C_S2.txt" #define command_S3 "C_S3.txt" #define command_S4 "C_S4.txt" // Создаём объект для ИК-передатчика IRsend irsend; // Флаги для однократного срабатывания кнопок bool fS1 = false; bool fS2 = false; bool fS3 = false; bool fS4 = false; // Частота (КГц) с которой будут передаваться сигналы int khz = 38; void setup() { // определяем пины кнопок, как входы с подтяжкой pinMode(BUTTON_S1, INPUT_PULLUP); pinMode(BUTTON_S2, INPUT_PULLUP); pinMode(BUTTON_S3, INPUT_PULLUP); pinMode(BUTTON_S4, INPUT_PULLUP); // открываем последовательный порт Serial.begin(9600); // выводим сообщение в Serial-порт о поиске карты памяти Serial.println("Initializing SD card..."); // если microSD-карта не была обнаружена if (!SD.begin(SD_CS_PIN)) { // выводим сообщение об ошибке Serial.println("Card failed, or not present"); // завершаем процесс return; } else { Serial.println("Card initialized."); } } void loop() { // считываем сигналы с кнопок bool bS1 = !digitalRead(BUTTON_S1); bool bS2 = !digitalRead(BUTTON_S2); bool bS3 = !digitalRead(BUTTON_S3); bool bS4 = !digitalRead(BUTTON_S4); // проверяем, какая из кнопок нажата, кнопка S1?... if (bS1 == true && fS1 == true) { fS1 = false; // если пришла команда C_S1, выполняем отправку соответствующей команды sending (command_S1); // выводим сообщение об отправке Serial.println("Signal \"C_S1\" sent."); } if (bS1 == false) fS1 = true; // ... кнопка S2?... if (bS2 == true && fS2 == true) { fS2 = false; // если пришла команда C_S2, выполняем отправку соответствующей команды sending (command_S2); // выводим сообщение об отправке Serial.println("Signal \"C_S2\" sent."); } if (bS2 == false) fS2 = true; // ... кнопка S3?... if (bS3 == true && fS3 == true) { fS3 = false; // если пришла команда C_S3, выполняем отправку соответствующей команды sending (command_S3); // выводим сообщение об отправке Serial.println("Signal \"C_S3\" sent."); } if (bS3 == false) fS3 = true; // ... кнопка S4?... if (bS4 == true && fS4 == true) { fS4 = false; // если пришла команда C_S4, выполняем отправку соответствующей команды sending (command_S4); // выводим сообщение об отправке Serial.println("Signal \"C_S4\" sent."); } if (bS4 == false) fS4 = true; } // функция отправки ИК-команд void sending (String command) { // создаём файл для отправки File dataRead = SD.open(command, FILE_READ); // если файл доступен для чтения if (dataRead) { // промежуточный массив для декодирования символов int num [6]; // счетчик степеней декодированного сигнала int count = 0; // счетчик массива сигналов int j = 0; // пока считываются данные из файла while (dataRead.available()) { // записываем из файла посимвольно данные в промежуточный массив for (int i = 0; i < sizeof(num) / sizeof(num[0]); i++) { // переменная для хранения полученного символа char point = dataRead.read(); if (point == ' ') { break; } else { // преобразуем полученные символы в числа num[i] = point - '0'; count++; } } // преобразуем массив с отдельными числами в единый сигнал и записываем его в массив for (int i = 0; i < count; i++) { irparams.rawbuf[j] += num[i] * ceil (pow(10, count - i - 1)); } // переходим к следующему элементу массива j++; count = 0; } // отправляем массив сигналов irsend.sendRaw(irparams.rawbuf, sizeof(irparams.rawbuf) / sizeof(irparams.rawbuf[0]), khz); // после отправки очищаем массив for (int i = 0; i < sizeof(irparams.rawbuf) / sizeof(irparams.rawbuf[0]); i++) { irparams.rawbuf[i] = 0; } // закрываем файл dataRead.close(); } else { // если файл не доступен Serial.println("Error opening in \"sending\""); } }