Arduino Char比较

时间:2015-03-29 11:29:35

标签: char arduino compare

我是初学者,如果垃圾邮件或其他等对不起......

当我尝试比较某些传入数据时,我遇到了一个小问题.... 当我发送

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

1 个答案:

答案 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;
        }
    }
}

应该解决问题。