求助,程序运行很蹊跷!
本帖最后由 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
}
代码第36行36.text4=(comdata.substring(comdata.indexOf('$$')));
只有一个$,不知为何变成两个,还改不掉,请复制程序的朋友注意。 估计又是内存不够惹的祸
页:
[1]