|
|
本帖最后由 fangtaonj 于 2013-4-12 08:32 编辑
编辑大人最好不要把我这个帖子挪到提问区,那边没人气啊!总没人回帖。
两段程序都正常,但合起来就不正常了。
这个程序的目的是用串口读取GPS字符串,取出其中经度、维度、速度信息显示和串口打印出来。
最终目的是用GPS,但是到现在为止,我都是用PC通过串口给arduino板输出一个模拟的GPS信号,同时再接受板子的输出结果,接收板子的输出结果的目的是调试程序,等调试好了Serial.print()语句就会去掉的。
程序运行结果却总是不正常。。
之前把这个程序分成两段调试。分别是串口数据读入和字符串内需要的部分挑选出来并显示。
1、第一个目的是读串口,在代码中基本上就是22行到第31行的语句。单独也调通了,用串口工具软件发送"$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56",第31行31.Serial.print(comdata); 能够正确显示该字符串,说明串口读取正确。
2、第二个目的是把这个字符串内需要的部分挑选出来并显示。当时用赋值语句comdata="$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56";整个程序就是我附的代码中34行和之后的部分。这样做也调通了。能正常串口输出和显示屏输出。
3、然后把上面两段程序组合起来,却运行不了,不能正常执行我想要的结果,显示屏不显示,串口输出经纬度和速度也都不显示。去掉31行的//让它打印comdata,说明commdata应该得到了真确的结果,是正常的。为什么总的程序不正常?一直找不到原因。
请各位高手帮帮忙给看看什么原因?
不知我说清楚了吗?
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.
11. lcd.clear();
12. Serial.begin(9600);
13.// delay(3000);
14.// Serial.print ("PMTK251,115200");
15.// Serial.print ("PMTK300,100,0,0,0,0");
16.Serial.print ("$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29");
17. lcd.begin(16,2);
18. lcd.print("GPS DEMO");
19. delay(3000);
20. lcd.clear();
21.}
22.void loop()
23.{//y
24. while (Serial.available() > 0)
25.{ //y
26. for (byte i=1;i<=70;i++);
27. {
28.comdata += char(Serial.read());
29. delay(2);
30. }
31.Serial.print(comdata); //A
32.//comdata.toUpperCase();
33.// comdata.trim();
34.//comdata="$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56";//B
35.
36.text4=(comdata.substring(comdata.indexOf('$')));
37.//Serial.println(text4);
38.text5=(text4.substring(text4.indexOf('A')+2));
39.text6=(text5.substring(0,text5.indexOf(',')));
40.Serial.print(text6);
41. lcd.setCursor(0, 0);
42. lcd.print((text6));
43.
44. text5=(text4.substring(text4.indexOf('N')+2));
45. text6=(text5.substring(0,text5.indexOf(',')));
46. Serial.print(text6);
47. lcd.setCursor(0, 1);
48. lcd.print((text6));
49.
50. text5=(text4.substring(text4.indexOf('E')+2));
51. text6=(text5.substring(0,text5.indexOf(',')));
52. Serial.print(text6);
53. lcd.setCursor(10, 0);
54. lcd.print((text6));
55.// lcd.clear();
56. comdata = "";
57.
58.}//y
59.}
第一段程序本来输出的结果就是comdata="$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56",第二段程序的输入用赋值语句也让comdata为上面字符串时也正常,程序的蹊跷之处在于让第一段程序的结果(comdata)直接作为第二段程序的输入时,就不正常了。两段程序单独调试却都没问题,请高手再给看看。 |
|