我是初学者,如果垃圾邮件或其他等对不起......
当我尝试比较某些传入数据时,我遇到了一个小问题.... 当我发送
AT+CSQ
Answer:
+CSQ: 23,0
OK
我希望在接收时闪烁LED + CSQ:23,0这是代码:
#define PINNUMBER "1111"
#define led 7 //blue
#define led2 8 //green
char buffer[256];
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
int inChar = 0;
int incomingByte = 0;
void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
inputString.reserve(200);
start_GSM();
}
void loop() {
Serial.println("AT+CSQ");
delay(100);
if (stringComplete) {
digitalWrite(led,LOW);
delay(50);
digitalWrite(led,HIGH);
stringComplete = false;
delay(2000);
}
}
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '+CSQ: 23,0') { //Led blink when I put + only charter here
stringComplete = true;
}
}
}
void start_GSM() {
{
digitalWrite(led,HIGH);
digitalWrite(led2,HIGH);
}
Serial.println("AT");
delay(1000);
Serial.println("AT+CREG?");
delay(1000);
Serial.println("ATE0");
delay(500);
}
非常感谢您的帮助,最好的问候Chriss
答案 0 :(得分:0)
我怀疑问题出在线上:
if (inChar == '+CSQ: 23,0') {
单引号('
)用于标识字符文字。它们通常仅用作multi-character literals have undefined behavior的单个字符(即可以做任何事情并且很可能不会做你期望的事情)。包含多个字符的字符串必须用双引号括起来("
)。此外,inChar
被声明为char
,这意味着它只能存储单个字符。这就是当您更改为仅使用'+'
时代码有效的原因。
由于您已经将从串行端口读取的字符附加到inputString
字符串,因此将serialEvent
函数更改为:
void serialEvent() {
while (Serial.available()) {
char inChar = (char)Serial.read();
inputString += inChar;
if (inputString == "+CSQ: 26,0") {
stringComplete = true;
}
}
}
应该解决问题。