#elif USE_TELEPHONE_ANSWERING_OR_RECORD_AUDIO_FILES == 0 // код, для записи аудиофайлов
#define FACTORY_RESET_SIM800L "AT&F" // Сброс настроек до заводских - SIM800L
#define RESTART_SIM800L "AT+CFUN=1,1" // перезагружаем - SIM800L
#define MODULE_STATUS_REQUEST "AT+CPAS" // Запрос статуса модуля - SIM800L
#define RESPONSE_MODULE_READY_WORK "+CPAS: 0" // ответ - модуль готов к работе
#define SHOW_ALL_FILENAMES_USER_DIRECTORY R"(AT+FSLS=C:\User\)" // показать все названия файлов из каталога User
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // pins 2, 3 - RX, TX
#define SERIAL_BAUD 4800 // скорость Serial
/* ###################################### */
void FOO_writeNewFile_SIM800L();
void setup() {
Serial.begin(SERIAL_BAUD);
mySerial.begin(SERIAL_BAUD);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("CODE - WRITE AUDIO FILE");
do
{
Serial.println("FACTORY_RESET_SIM800L");
mySerial.println(FACTORY_RESET_SIM800L);
} while (!mySerial.find("OK")); // стоим на месте - ждём ответа
Serial.println("RESTART_SIM800L");
mySerial.println(RESTART_SIM800L); // mySerial.println(F("AT+CFUN=1,1"));
do
{
Serial.println("MODULE_STATUS_REQUEST");
mySerial.println(MODULE_STATUS_REQUEST);
} while (!mySerial.find(RESPONSE_MODULE_READY_WORK)); // стоим на месте - ждём ответа
Serial.println("RESPONSE_MODULE_READY_WORK");
//delay(10000);
// ПОЖАЛУЙСТА ЖДИТЕ ПОКА СВЕТОДИОД НЕ ПОГАСНЕТ
Serial.println("START - WRITE AUDIO FILE - PLEASE WAIT UNTIL THE LED GOES OUT");
FOO_writeNewFile_SIM800L();
digitalWrite(LED_BUILTIN, LOW);
Serial.println("END - WRITE AUDIO FILE ");
mySerial.setTimeout(1000);
mySerial.println(RESTART_SIM800L); // mySerial.println(F("AT+CFUN=1,1"));
while (!mySerial.find("OK")); // стоим на месте - ждём ответа
do
{
Serial.println("RESTART_SIM800L");
mySerial.println("AT");
} while (!mySerial.find("OK")); // стоим на месте - ждём ответа
Serial.println("show all filenames from the User directory");
mySerial.println(SHOW_ALL_FILENAMES_USER_DIRECTORY); // показать все названия файлов из каталога User
while (1) {
if (Serial.available())mySerial.write(Serial.read());
if (mySerial.available())Serial.write(mySerial.read());
}
}
void loop() {
}
void FOO_writeNewFile_SIM800L() {
mySerial.setTimeout(36000); // время ожидания данных, поступающих от (SIM800L)
static const PROGMEM byte audioFile_messageMaleRu[] {
NULL
};
static const PROGMEM byte audioFile_messageFemaleRu[] {
NULL
};
static const PROGMEM byte audioFile_messageMaleEn[] {
NULL
};
const char* const table[] PROGMEM = {
audioFile_messageMaleRu,
audioFile_messageFemaleRu,
audioFile_messageMaleEn
};
const int sizeofArr[(sizeof(table) / 2)] {
(sizeof(audioFile_messageMaleRu) - 1),
(sizeof(audioFile_messageFemaleRu) - 1),
(sizeof(audioFile_messageMaleEn) - 1)
};
const char fileName[(sizeof(table) / 2)][17] = { // (3) часть - массив с именами, для аудио файлов
"messageMaleRu",
"messageFemaleRu",
"messageMaleEn"
};
for (int index = 0; index < (sizeof(table) / 2); index++) {
do
{
Serial.println((String)("create a new file name") + ('\t') + (fileName[index]));
mySerial.println((String)((R"(AT+FSCREATE=C:\User\)")) + (fileName[index]) + (".amr")); // создать новый файл
} while (!mySerial.find("OK")); // стоим на месте, ждём ответа "OK", от модуля SIM800L
do
{ // подготовка файла, для записи в него массива
Serial.println((String)("preparing file for writing to name ") + (fileName[index]) + (" size ") + (sizeofArr[index]));
mySerial.println((String)((R"(AT+FSWRITE=C:\User\)")) + fileName[index] + (".amr,0,") + (sizeofArr[index]) + (",34"));
} while (!mySerial.find('>')); // стоим на месте, ждём ответа ">", от модуля SIM800L
do
{
Serial.println((String)("start writing the array to a file name ") + (fileName[index]));
for (int i = 0; i < sizeofArr[index]; i++)mySerial.write(pgm_read_byte(table[index] + i)); // записываем в файл массив
} while (!mySerial.find("OK")); // стоим на месте, ждём ответа "OK", от модуля SIM800L
do
{ // воспроизвести аудиофайл
Serial.println((String)("play audio file name ") + (fileName[index]));
mySerial.println((String)((R"(AT+CREC=4,"C:\User\)")) + (fileName[index]) + (".amr") + ((R"(",0,100)")));
} while (!mySerial.find("+CREC: 0")); // стоим на месте, ждём ответа "+CREC: 0", от модуля SIM800L
}
}
#endif
/* ###################################### */
/* ###################################### */
/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
/*
AT+FSCREATE=C:\User\1.amr // создать новый файл с именем 1.amr
AT+FSWRITE=C:\User\1.amr,0,627,24 // подготовить файл для записи в него данных
AT+CREC=4,"C: \User\1.amr",0,100 // воспроизвести аудио файл 1.amr
AT+FSLS=C:\User\ // показать все названия файлов из каталога User
AT+FSLS=C:\REC\ // показать все названия файлов из каталога REC
AT+FSFLSIZE=C:\User\1.amr // узнать размер файла с именем 1.amr
AT+FSREAD=C:\User\1.amr,0,9999,1 // показать содержимое файла 1.amr
AT+FSDEL=C:\User\1.amr // удалить файл с именем 1.amr
AT+FSDEL=C:\User\SelectMenu.amr // удалить файл с именем SelectMenu.amr
AT+FSRENAME=C:\User\test.txt,C:\User\new_name_test.txt // переименовать файл
AT+FSLS=C:\ // узнать имена-количество каталогов на диске C
AT+FSMKDIR=dir_name // Создать новый каталог
AT+FSRMDIR=dir_name // Удалить каталог dir_name (удаляется, только пустой каталог!)
AT+FSRMDIR=User // Удалить каталог User (удаляется, только пустой каталог!)
AT+FSMEM // узнать количество оставшихся памяти default: 180224 bytes
AT+CGMR // Запрос версии установленного ПО Revision:1418B04SIM800L24
*/
/* ###################################### */
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев