Захват последовательного ввода в массиве string / char

У меня есть программная последовательная связь между Arduino Uno и GSM-модулем TC35 для отправки и получения SMS-сообщений. Отправка SMS / вызовов не является проблемой, так как это вопрос отправки соответствующей AT-команды в модуль GSM. Однако я хочу использовать команду AT + CMGR = 1 (которая проверяет первое SMS-сообщение, сохраненное на SIM-карте), чтобы проверить, есть ли какие-либо сообщения, и сохранить сообщение в виде массива char, чтобы я мог затем проверить, содержит ли SMS слово «включен» или «выключен», чтобы активировать светодиод.

Команда AT + CMGR = 1 должна вернуть следующее:

AT+CMGR=1
+CMGR: "REC READ","+3538xxxxxxxx",,"13/03/23,14:29:37+00"Set

OK

Но в методе ниже, когда я печатаю «данные», он просто возвращает:

Сообщение содержит:

В

Любые указатели будут высоко оценены.

void checkMessage() {

gsmSerial.println("AT+CMGR=1");    //Reads the first SMS

for (x=0;x < 255;x++){
data[x]='\0';
}
x=0;
do{
while(gsmSerial.available()==0);
data[x]=gsmSerial.read();
x++;
if(data[x-1]==0x0D&&data[x-2]=='"'){
x=0;
}
}while(!(data[x-1]=='K'&&data[x-2]=='O'));

data[x-3]='\0';        //finish the string before the OK

Serial.println("\r\nMessage contains: \r");
Serial.println(data);    //shows the message

delay(1000);
}

0

Решение

Я не понимаю ваше намерение сделать это:

if(data[x-1]==0x0D&&data[x-2]=='"'){
x=0;
}

Похоже, что вы отбрасываете свои данные и читаете новые данные всякий раз, когда попадаете в строку, содержащую завершающую кавычку и новую строку. Таким образом, ответ на интересующую команду отбрасывается. Я не проверял это, но я думаю, что это сработает, если вы удалите эти три строки.

Я должен также упомянуть, что [x-1] а также [x-2] ссылаются на память до data буфер. Это очень плохая практика, которая может и приведет к неопределенному поведению. Вы должны проверять индекс только за вычетом некоторого значения, когда результат этого вычисления будет положительным значением. Отрицательный индекс массива будут доступ к памяти до начала массива.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]