Nikan, Посмотрел ваши код, общие замечания:
Почитайте
Switch , а то вы много где не ставили
break; в каждой секции
case а это будет вызывать проблемы.
Функции блока
GSM_AT_Command(F("
команда без AT+"),
Количество повторных отправок ); - отправка АТ команды в том случаи когда ответ должен быть OK или ERROR, функция сам сдвигает GSM_count +1
Если надо проанализировать ответ то в следующем блоке
Case
GSM_analysisResponse(F("
правильный текст ответа") ); если ответ совпадет произойдет то сдвинет GSM_count+1
Если ответ не совпадет и
количество повторных отправок больше 0 то
GSM_count -1 т.е произойдет повторная отправка последней команды.
Если
количество повторных отправок было 0, то будет последовательность отправки будет отменна.
Еще GSM_analysisResponse возвращает 1 если ответ верный и 0 если нет, так что ее можно использовать как условие в if.
Если надо увеличить время ожидания ответа то в туже секцию после команды и перед
break;
вставить
GSM_time =millis() +2000; // время ожидания 2000- 2 секунды
Для разделение разных функций используется GSM_team_room - код текущей операции.
Надо взять следующий свободный (например
8) при вызове отправки надо проверить что сейчас GSM_team_room==0 и присвоить ему GSM_team_room=8
И в главном блоке в switch ( GSM_team_room ) { добавить еще один
case
8: //
if (!GSM_wait) {
GSM_final = GSM_Send_Narodmon_comand(); //
}
break;
По пробуйте внести правки в код согласно описному выше
По результатам отпишетесь.
Если будут вопросу как работают, другие функции задавайте.
П.С. Сам несколько часов вспоминал как что работает.