// Библиотека для работы с SPI #include // Библиотека для работы с SD-картами #include // Библиотека для работы с ИК-приёмником и передатчиком #include // Имя пина, которому подключен приёмник #define RECV_PIN 4 // Имя пина, к которому подключен передатчик #define SEND_PIN 9 // Имя для CS пина microSD-карты #define SD_CS_PIN 8 // Строка с хранением данных введенных в последовательный порт #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; // Частота (КГц) с которой будут передаваться сигналы int khz = 38; // Строка с хранением данных введенных в последовательный порт String command = ""; void setup() { // открываем последовательный порт 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() { // пока в Serial port поступают символы... while (Serial.available() > 0) { // ...символ записываем в переменную char symbol = Serial.read(); // если приходит символ разрыва строки... if (symbol == '\n') { // выводим полученную команду Serial.println(command); // идентифицируем полученную команду if ( command == "C_S1") { // если пришла команда C_S1, выполняем отправку соответствующей команды sending (command_S1); // выводим сообщение об отправке Serial.println("Signal \"C_S1\" sent."); } else if (command == "C_S2") { // если пришла команда C_S2, выполняем отправку соответствующей команды sending (command_S2); // выводим сообщение об отправке Serial.println("Signal \"C_S2\" sent."); } else if (command == "C_S3") { // если пришла команда C_S3, выполняем отправку соответствующей команды sending (command_S3); // выводим сообщение об отправке Serial.println("Signal \"C_S3\" sent."); } else if (command == "C_S4") { // если пришла команда C_S4, выполняем отправку соответствующей команды sending (command_S4); // выводим сообщение об отправке Serial.println("Signal \"C_S4\" sent."); } command = ""; } else { // ... если символ не является символом разрыва строки, то вписываем его в последовательность command += symbol; } } } // функция отправки ИК-команд 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\""); } }