// Библиотека для работы с 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" // Создаём объект для ИК-приёмника IRrecv irrecv(RECV_PIN); // Создаём объект для ИК-передатчика IRsend irsend; // Создаём объект для декодированных команд с ИК-пульта decode_results results; // Строка с хранением данных введенных в последовательный порт String command = ""; void setup() { // открываем последовательный порт Serial.begin(9600); // Запускаем работу ИК-приёмника irrecv.enableIRIn(); // выводим сообщение в 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 == "RC_S1") { // удаляем предыдущую команду SD.remove(command_S1); // если пришла команда C_S1, выполняем отправку соответствующей команды reading (&results, command_S1); // выводим сообщение об отправке Serial.println("Signal \"C_S1\" sent."); } else if (command == "RC_S2") { // удаляем предыдущую команду SD.remove(command_S2); // если пришла команда C_S2, выполняем отправку соответствующей команды reading (&results, command_S2); // выводим сообщение об отправке Serial.println("Signal \"C_S2\" sent."); } else if (command == "RC_S3") { // удаляем предыдущую команду SD.remove(command_S3); // если пришла команда C_S3, выполняем отправку соответствующей команды reading (&results, command_S3); // выводим сообщение об отправке Serial.println("Signal \"C_S3\" sent."); } else if (command == "RC_S4") { // удаляем предыдущую команду SD.remove(command_S4); // если пришла команда C_S4, выполняем отправку соответствующей команды reading (&results, command_S4); // выводим сообщение об отправке Serial.println("Signal \"C_S4\" sent."); } command = ""; } else { // ... если символ не является символом разрыва строки, то вписываем его в последовательность command += symbol; } } } // функция режима "чтение ИК-сигнала" void reading (decode_results *results, String command) { // создаём файл для записи File dataWrine = SD.open(command, FILE_WRITE); // если файл доступен для записи if (dataWrine) { // "Введите команду с пульта дистанционного управления" Serial.println("Enter the command from the remote control. "); while (1) { // ожидаем, пока придет команда с пульта if (irrecv.decode(results)) { for (int i = 1; i < results->rawlen; i++) { dataWrine.print(results->rawbuf[i] *USECPERTICK, DEC); dataWrine.print(' '); } break; } } dataWrine.close(); // перезапустим ИК-приёмник irrecv.resume(); } else { // если файл не доступен Serial.println("Error opening in \"reading\""); } }