- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用带有 sim900 gps/gprs 模块的 Arduino Uno,并且我正在使用 at 命令,我如何获得 at 命令的响应(即 OK、ERROR),以便我可以执行一些操作 if 响应==“确定”
或响应==“错误”
最佳答案
如果您尚未阅读 V.250 specification 中的第 5 章全部内容请停止阅读此处并立即阅读,这是本答案其余部分的重要基础,我会等到你回来。一些对字母表(简短版本:忽略它/将其视为 ASCII)和 S 寄存器的引用可能看起来很神秘,但不要放弃,它会很快让你感兴趣。
<小时/>处理调制解调器输出的唯一正确方法是将输出分成完整的行并一次迭代一整行。这是通用的,并且绝对适用于所有 AT 命令(除了我能想到的一个异常(exception)1)。
让我强调一下:您应该只在严格的行尾边界 ("\r\n"
) 上分割调制解调器响应文本,并在一个操作中处理生成的行字符串。所以你真的应该去实现我在 previous answer 中建议的 read_line_from_modem
函数。 .
这意味着每当您想要检查 OK
结果代码时,您应该只使用 strcmp(line, "OK\r\n")
而不是 strstr 或类似,因为您知道您正在处理一个完整的完整行,该行应该从最终结果代码开始,并且后面总是跟着 "\r\n"
2.
现在最终结果代码不仅仅是 OK
和 ERROR
,而不必尝试自己弄清楚所有内容3我建议查看 this answer 中列出的 is_final_result_code 或 isFinalResponseSuccess .
1AT+CMGS
的 "\r\n> "
前缀是您执行一些不同操作的唯一位置,即在严格线路以外的其他位置开始处理调制解调器响应边界。
2除非您错误配置了 S3
和 S4
,而您绝对不应该这样做。
3V.250 中的列表并不完整,27.005 和 27.007 中还定义了一些。
关于arduino - 获取AT命令响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36884514/
我是一名优秀的程序员,十分优秀!