【发布时间】:2013-01-29 11:23:54
【问题描述】:
这是我第一次在我的 arduino 上使用 gsm shield,所以我有点困惑,所以我需要指导。我的目标是阅读发送到我的 gsm 屏蔽的消息,然后将该消息与特定字符串进行比较。如果它们相同,arduino 会做一些事情。例如,GSM shield 收到一条包含 STATUS 的短信,arduino 会做一些事情。我现在遇到的问题是如何将来自 gsm 模块的传入字符读入单个字符串,然后将该字符串与特定单词进行比较。我现在有这个代码。
#include <SoftwareSerial.h>
#include <String.h>
char inchar[255];
SoftwareSerial cell(2,3);
int led1 = 22;
#define powerOn 4
int i;
//char comparestring[160];
char command[]={'S','T','A','T','U','S','\0'}; // this is a string for command ended with null terminator
void setup()
{
// ilagay sa loob ng setup
digitalWrite(powerOn, HIGH);
delay(1500);
digitalWrite(powerOn, LOW);
delay(5000);
pinMode(led1, OUTPUT);
digitalWrite(led1, LOW);
Serial.begin(9600);
cell.b-egin(9600);
delay(30000);
cell.println("AT+CMGF=1"); // set SMS mode to text
delay(200);
cell.println("AT+CNMI=1,2,0,0,0 "); // set module to send SMS data to serial out upon receipt
delay(200);
Serial.println("GSM SHIELD IS NOW OK AND READY");
}
void loop()
{
while(cell.available() >0)
{
inchar[i]=cell.read();
i++;
inchar[i] = '\0';
Serial.print(inchar);
if (inchar==command)
{
digitalWrite(led1, HIGH);
cell.write("AT+CMGS=\"");
cell.write("09267955775");
cell.write("\"\r");
delay(1000);
cell.write("\nTerminal Monitoring System");
delay(1000);
cell.write(0x1A); // End the SMS with a control-z
}
else
{
Serial.println("\nInvalid Keyword! Type ?");
dig-italWrite(led1, LOW);
}
}
}
这些代码是应该起到作用的代码,但我认为它不起作用。我希望你能教我正确的方法。谢谢!
while(cell.available() >0)
{
inchar[i]=cell.read();
i++;
inchar[i] = '\0';
Serial.print(inchar);
if (inchar==command)
【问题讨论】:
-
“inchar”看起来应该是这样吗?如果是这样,您确定可以仅使用“==”与数组进行比较吗? (不知道,只是看到这样有点意外)
-
@MortenSickel 我意识到这是错误的。但我仍然无法找到一种方法来完成这项工作。我希望你能帮助我。
-
它是什么样子的? - 它只是一个随机的字符组合,还是你能以某种方式识别你想看到的字符串?
-
不,实际上我没有。 :(也许你可以帮我修改我的代码?谢谢。
-
你能举个例子吗?每次都一样还是变了?