|
|
本帖最后由 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语句后的程序都不执行了一样,无法显示和打印。我感觉很奇怪但始终找不到原因,求高手帮助找明原因,谢谢!
!代码如下:- #include <LiquidCrystal.h>
- String comdata = "";
- String text4;
- String text5;
- String text6;
- int i;
- LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
- void setup()
- {
- lcd.clear();
- Serial.begin(9600);
- // delay(3000);
- // Serial.print ("PMTK251,115200");
- // Serial.print ("PMTK300,100,0,0,0,0");
- Serial.print ("$$$$$$$$$$$$$$$$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29");
- lcd.begin(16,2);
- lcd.print("GPS DEMO");
- delay(3000);
- lcd.clear();
- }
- void loop()
- {//y
- while (Serial.available() > 0)
- { //y
- for (byte i=1;i<=70;i++);
- {
- comdata += char(Serial.read());
- delay(2);
- }
- Serial.print(comdata); //A
- //comdata.toUpperCase();
- // comdata.trim();
- //comdata="$$$$$$$$$$$$$$$$GPRMC,091859.800,A,3204.8736,N,11853.4971,E,1.46,14.92,280313,,,A*56";//B
- text4=(comdata.substring(comdata.indexOf('$$')));
- //Serial.println(text4);
- text5=(text4.substring(text4.indexOf('A')+2));
- text6=(text5.substring(0,text5.indexOf(',')));
- Serial.print(text6);
- lcd.setCursor(0, 0);
- lcd.print((text6));
-
- text5=(text4.substring(text4.indexOf('N')+2));
- text6=(text5.substring(0,text5.indexOf(',')));
- Serial.print(text6);
- lcd.setCursor(0, 1);
- lcd.print((text6));
-
- text5=(text4.substring(text4.indexOf('E')+2));
- text6=(text5.substring(0,text5.indexOf(',')));
- Serial.print(text6);
- lcd.setCursor(10, 0);
- lcd.print((text6));
- // lcd.clear();
- comdata = "";
- }//y
- }
复制代码 |
|