求助!程序运行很蹊跷!-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: fangtaonj

求助!程序运行很蹊跷!

[复制链接]
发表于 2013-4-12 13:07 | 显示全部楼层
用if语句比较下,再输出个比较结果,如果比较出来不一样,你就得仔细看看两者的区别了~

另外建议你读入数据时,以判断结束符来结束读取操作,例如使用\n 作为结束符
 楼主| 发表于 2013-4-12 21:28 | 显示全部楼层
奈何col 发表于 2013-4-12 09:12
问题可能是出在你那个while 循环上,你gps是怎么输出的?

奈何兄你好!我找到原因了,是每次的loop循环通过串口只读到一个字符,而不是这串字符都读出来再送到后面显示。每次一个字符当然不能显示,前半段调通的原因是它多次loop循环猜得到正确结果,而不是一次得到,我很奇怪,我设置70次的FOR循环读入难道有错误吗?各请奈何兄帮帮忙,虽然原因找到但我怎么改程序呢?
发表于 2013-4-12 21:44 | 显示全部楼层
你的70次for循环就是为了读出字符串的,  我不知道你的gps模块输出是嘛样的,如果有结束符,直接for70是不行的,最好用结束符判断字符串是否读完
 楼主| 发表于 2013-4-13 09:30 | 显示全部楼层
本帖最后由 fangtaonj 于 2013-4-13 09:32 编辑
奈何col 发表于 2013-4-12 13:04
你的70次for循环就是为了读出字符串的,  我不知道你的gps模块输出是嘛样的,如果有结束符,直接for70是不行的,最好用结束符判断字符串是否读完


奈何兄谢谢您的回复!我读到的GPS字符串都是“$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56”这样的,要说结束符特征,应该是A*再加校验码(上例是56),  之后还有回车换行符,用回车换行符做判断应该最好,但我不知道怎末表达这个回车换行符,记得最早的DBASEIII数据库语言对回车和换行是CHR$(13)表示的,不知道arduino怎么表示。
您这个建议非常启发我,这样就不用猜测字符串数量了,用回车换行哪怕是校验码之前的A*都能解决这个问题。
再次感谢您多次的指导!!

发表于 2013-4-13 11:05 | 显示全部楼层
acsii码  或者\r\n
 楼主| 发表于 2013-4-13 13:41 | 显示全部楼层
奈何col 发表于 2013-4-13 11:05
acsii码  或者\r\n

谢谢!那么我怎么在程序中表示?
如下程序:
char comdata = Serial.read();
delay(2);
if (comdata!=“$"){
其它语句
}
上面语句是和$比较,如果是和回车换行比较,那$符号是不是要改变成if (comdata!=“\r”){或if (comdata!=“\n”){
谢谢奈何兄啊,给你添了不少麻烦!

点评

直接=ascii码可以,直接="\r\n"也可以  详情 回复 发表于 2013-4-13 14:09
发表于 2013-4-13 14:09 | 显示全部楼层
fangtaonj 发表于 2013-4-13 13:41
谢谢!那么我怎么在程序中表示?
如下程序:
char comdata = Serial.read();

直接=ascii码可以,直接="\r\n"也可以
 楼主| 发表于 2013-4-14 09:03 | 显示全部楼层
谢谢奈何兄的耐心回复!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-28 15:35 , Processed in 0.105641 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表