Страницы

Поиск по вопросам

вторник, 5 марта 2019 г.

Как узнать сколько денег на счете сим карты в gsm модеме, Arduino?

Скажите, пожалуйста, как в arduino вы можете узнать, сколько денег на SIM-карте в gsm модеме. Я знаю команду AT ("AT+CUSD=1,\"#100#\""), но я не знаю, как записать ответ на переменную. Помогите сделать это.


Ответ

вопрос был решён довольно давно.. но вдруг кому-то пригодится
char inputGsmFullArr[200] = {0}; //массив для хранения всей смс short int indxGsm = 0; // счетчик символов для буфера String inputGsmFullStr = ""; //входящая строка с gsm модема - полная bool flagGsmActive = false; char ch = NULL;
void loop() { while (gprsSerial.available()) { delay(1); flagGsmActive = true; byte c = gprsSerial.read(); inputGsmFullArr[indxGsm++] = c; logger.LogPrintBytes(c); } if (!gprsSerial.available() && flagGsmActive) { for (int i = 0; i < indxGsm; i++) { inputGsmFullStr += inputGsmFullArr[i]; } ReadGsmStr(inputGsmFullStr); ClearBufferArray(inputGsmFullArr, indxGsm); indxGsm = 0; flagGsmActive = false; Serial.flush(); gprsSerial.flush(); } }
void ClearBufferArray(char *array, short int sizeBuf) // function to clear buffer array { for (byte i = 0; i < sizeBuf; i++) { array[i] = NULL; } }
//Обработка смс приемника-передатчика //---------------------------------- boolean isStringMessage = false; //Флаг, что данные с GSM содержат текстовое сообщение String lineFullStr = ""; // Входная строка построчно из inputGsmFullStr String currNumTmp = ""; //---------------------------------- //--------------------------------------------------------------------------------------------------// void ReadGsmStr(String fullGmsStr) { //Очистили подстроку главной строки lineFullStr = ""; //Читаем посимвольно нашу полную СМС и выдергиваем оттуда подстроки //А вид она имеет следующий
+CMT: "+79999999999","NAME","16/01/28,00:36:38+24"
// 1234567890
// 1234567890
for (int i = 0; i < fullGmsStr.length(); i++) { //Если находим символ возврата каретки if (fullGmsStr.charAt(i) == '
') { // если это продолжение полной смс - само тело без заголовка - 1234567890
- то обрабатываем то что внутри (команды) if (isStringMessage) { lineFullStr.toUpperCase();
CheckGsmSubString(lineFullStr);
isStringMessage = false; } else { CheckGsmSubString(lineFullStr); } lineFullStr = ""; } else if ('
' != fullGmsStr.charAt(i)) { lineFullStr += fullGmsStr.charAt(i); } else if ('
' == fullGmsStr.charAt(i)) { lineFullStr += '
'; } } inputGsmFullStr = ""; //Очищаем то что пришло с GSM } //--------------------------------------------------------------------------------------------------// void CheckGsmSubString(String gsmSubStr) { // если это текстовое сообщение if (StringContains(gsmSubStr, "+CMT")) { //Парсим смс } // если это звонок else if (StringContains(gsmSubStr, "+CLIP")) { //Парсим звонок } // этот блок отлавливает ответ на запрос баланса и отправляет его смской else if (StringContains(gsmSubStr, "+CUSD")) { IsRequestBalanceFromGsm(gsmSubStr); }
//---------------------КОМАНДЫ---------------------------- // делаем запрос баланса (мтс), ответ ловится +CUSD else if (StringContains(gsmSubStr, "BAL")) { gprsSerial.println("ATD#100#"); } } //--------------------------------------------------------------------------------------------------//
// запрос баланса и отправляет его смской +CUSD void IsRequestBalanceFromGsm(String str) { str = str.substring(str.indexOf("Balance"), str.indexOf("r")); delay(1500); str += " is your balance of number " + currentNumber; SendSms("ТУТ НОМЕР НА КОТОРЫЙ ОТПРАВЛЯТЬ ОТВЕТ", str); } //--------------------------------------------------------------------------------------------------// const char q = (char)34; // символ " const char r = (char)13; // символ возврата каретки (Enter) const char z = (char)26; // передача ^Z // Функция отправки смс void SendSms(String number, String text) { logger.LogPrintlnStr("SEND SMS FUNC RETURN: "); logger.LogPrintlnStr("NUMBER: " + number + "
TEXT: " + text); gprsSerial.println("AT+CMGD=4"); //удалить все сообщения на сим карте delay(1500); gprsSerial.print("AT+CMGS="); // send the SMS the number gprsSerial.print(q); // передача в порт символа " gprsSerial.print(number); // передача номера телефона gprsSerial.print(q); // передача в порт символа " gprsSerial.print(r); delay(1500); gprsSerial.println(text); // передача текста сообщения delay(500); gprsSerial.print(z); // передача ^Z gprsSerial.print(r); // передача Enter }

Комментариев нет:

Отправить комментарий