DEMON_BY 发表于 2014-10-14 20:39:28

ardunio串口通信问题

先上代码
这是ardunio和sim900a通信的代码
int x=1;
#define MAXCHAR 81
String comdata;
char data;
int j=0;         //recive index   
void setup()
{
Serial.begin(115200);
}
void loop()
{
while(x==1)
{
      delay(5000);
       Serial.print("AT+CSCS=\"GSM\"\r\n");
   delay(1000);
   Serial.print("AT+CMGF=1\r\n");
   delay(1000);
   x++;
}
    while (Serial.available() > 0)
    {
      comdata += char(Serial.read());
      delay(2);
    }
    if (comdata.length() > 0)
    {
      Serial.println("123"+comdata+"456");
      delay(2000);
      comdata = "";
    }
   delay(2000);
    Serial.flush();
   delay(2000);
}
按照代码comdata应该每次都是清空然后输出一行,但是输出的内容是:
AT+CSCS="GSM"
AT+CMGF=1
123AT+CSCS="GSM"

OK
AT+CMGF=1

OK
456
123123AT+CSCS="GSM"

OK
AT+CMGF=1

OK
456

OK
456
123123123AT+CSCS="GSM"

OK
AT+CMGF=1

OK
456

OK
456

O456
123123123123AT+CSCS="GSM"

OK
AT+CMGF=1

OK
456

OK
456
456
123123123123123AT+CSCS="GSM"

OK
AT+CMGF=1

OK
456

OK
45456
请问下是怎么回事,谢谢大神了,都困扰了一个星期了,怎么也查不出来

Super169 发表于 2014-10-15 01:48:23

沒用過 sim900a, 請問 sim900a 是會直接 echo + "OK" 嗎?
如果是的話, 結果沒問題, 看來應該是 TX 接了 sim900a, 每次收到的都再送回去, 再加 OK 回傳.
發出後, 把回傳的首尾加上 "123" - "456" 再發出, 又再把回傳的加上首尾 "123" - "456"....
分別只在於第一次每行之間有 delay, 之後是一次把全部發出去.

DEMON_BY 发表于 2014-10-16 10:46:24

Super169 发表于 2014-10-15 01:48 static/image/common/back.gif
沒用過 sim900a, 請問 sim900a 是會直接 echo + "OK" 嗎?
如果是的話, 結果沒問題, 看來應該是 TX 接了 s ...

sim900a接到命令会发送ok回来,但是现在不知道是在什么时候每次收到的都再送回去,这跟ardunio的串口缓存有关系么,有什么解决办法没有,,搞了好久, 没有一点头绪

Super169 发表于 2014-10-16 10:50:56

DEMON_BY 发表于 2014-10-16 10:46 static/image/common/back.gif
sim900a接到命令会发送ok回来,但是现在不知道是在什么时候每次收到的都再送回去,这跟ardunio的串口缓存有 ...

如果 sim900a 只回傳 OK, 那就有點奇怪, 從給果上先, 應該是把 收到的資料回傳再加上 "OK".

可以說說你的接線嗎?會否是其他地方把要發出的資料送到 Rx 去?

Super169 发表于 2014-10-16 10:53:18

Super169 发表于 2014-10-16 10:50 static/image/common/back.gif
如果 sim900a 只回傳 OK, 那就有點奇怪, 從給果上先, 應該是把 收到的資料回傳再加上 "OK".

可以說說 ...

或者先把問題簡化, 做簡單的測試, 不要把程式放入 loop 之中, 只放在 setup 最尾, 執行一次.

看看當 arduino 送出 AT+CSCS=\"GSM\"\r\n後, 會收到什麼回來.
页: [1]
查看完整版本: ardunio串口通信问题