极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9424|回复: 2

求助,程序运行很蹊跷!

[复制链接]
发表于 2013-4-11 09:11:36 | 显示全部楼层 |阅读模式
本帖最后由 fangtaonj 于 2013-4-11 09:15 编辑

再次请大伙帮忙(不好意思,本人小白,处处都遇到困难),这个程序是串口读取GPS字符串,取出其中经度、维度、速度信息显示和串口打印出来。运行结果很蹊跷,现象如下:代码中两个做记号的语句为31行语句A:Serial.print(comdata);   //A和34行语句b://comdata="$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56";//B,若B不屏蔽(这么用是为了调试)则屏幕和串口显示一切正常。但这个数据不是来自串口,真的程序是屏蔽语句B,这样comdata数据来自串口,通过打开语句A,发现执行语句A的结果显示comdata就是$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56,和赋值语句B的内容一样,但此时打印和显示都没有了,一切都不正常,似乎B语句后的程序都不执行了一样,无法显示和打印。我感觉很奇怪但始终找不到原因,求高手帮助找明原因,谢谢!
!代码如下:
  1. #include <LiquidCrystal.h>   
  2. String comdata = "";
  3. String text4;
  4. String text5;
  5. String text6;
  6. int i;
  7. LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
  8. void setup()
  9. {

  10.   lcd.clear();
  11.   Serial.begin(9600);
  12. //  delay(3000);
  13. // Serial.print ("PMTK251,115200");
  14. // Serial.print ("PMTK300,100,0,0,0,0");
  15. Serial.print ("$$$$$$$$$$$$$$$$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29");
  16.   lcd.begin(16,2);
  17.   lcd.print("GPS DEMO");
  18.   delay(3000);
  19.   lcd.clear();
  20. }
  21. void loop()
  22. {//y
  23.    while (Serial.available() > 0)
  24. {   //y
  25.    for (byte i=1;i<=70;i++);
  26.    {
  27. comdata += char(Serial.read());
  28.     delay(2);
  29.    }
  30. Serial.print(comdata);   //A
  31. //comdata.toUpperCase();
  32. // comdata.trim();
  33. //comdata="$$$$$$$$$$$$$$$$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56";//B

  34. text4=(comdata.substring(comdata.indexOf('$$')));
  35. //Serial.println(text4);
  36. text5=(text4.substring(text4.indexOf('A')+2));
  37. text6=(text5.substring(0,text5.indexOf(',')));  
  38. Serial.print(text6);
  39.   lcd.setCursor(0, 0);
  40.   lcd.print((text6));
  41.   
  42.   text5=(text4.substring(text4.indexOf('N')+2));
  43.   text6=(text5.substring(0,text5.indexOf(',')));  
  44.   Serial.print(text6);
  45.   lcd.setCursor(0, 1);
  46.   lcd.print((text6));
  47.   
  48.   text5=(text4.substring(text4.indexOf('E')+2));
  49.   text6=(text5.substring(0,text5.indexOf(',')));  
  50.   Serial.print(text6);
  51.   lcd.setCursor(10, 0);
  52.   lcd.print((text6));
  53. //    lcd.clear();
  54.   comdata = "";

  55. }//y
  56. }
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-11 09:17:54 | 显示全部楼层
代码第36行36.text4=(comdata.substring(comdata.indexOf('$$')));
只有一个$,不知为何变成两个,还改不掉,请复制程序的朋友注意。
回复 支持 反对

使用道具 举报

发表于 2014-1-26 21:27:58 | 显示全部楼层
估计又是内存不够惹的祸
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-6 01:15 , Processed in 0.035263 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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