Как преобразовать входящие символы, поступающие от gsm-модуля, в строку?

Это мой первый раз, когда я использую GSM Shield для своего Arduino, поэтому я немного запутался, поэтому мне нужны указания. Моя цель - прочитать сообщение, отправленное на мой GSM-экран, а затем сравнить это сообщение с определенной строкой. если они одинаковые, ардуино что-то сделает. Например, GSM-шилд получил текстовое сообщение, содержащее СТАТУС, ардуино что-то сделает. Проблема, с которой я сейчас столкнулся, заключается в том, как прочитать входящие символы из модуля 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)

person jpvisto    schedule 29.01.2013    source источник
comment
Inchar выглядит так, как должно? Если это так, вы уверены, что можете сравнивать массивы только с ==? (Я не знаю, я просто немного удивлен, увидев это в таком виде)   -  person MortenSickel    schedule 29.01.2013
comment
@MortenSickel я понял, что это неправильно. Но я все еще не могу найти способ сделать эту работу. Я надеюсь, что вы можете мне помочь.   -  person jpvisto    schedule 29.01.2013
comment
На что это похоже? - это просто случайное сочетание символов, или вы можете как-то распознать строку, которую хотите увидеть?   -  person MortenSickel    schedule 29.01.2013
comment
Нет, на самом деле я этого не делал. :( может быть, вы можете помочь мне изменить мои коды? спасибо.   -  person jpvisto    schedule 30.01.2013
comment
Можете ли вы опубликовать пример - каждый раз было одно и то же или оно менялось?   -  person MortenSickel    schedule 30.01.2013
comment
Есть ли примеры с библиотекой gsm-shield? Они часто являются отличной отправной точкой.   -  person MortenSickel    schedule 30.01.2013


Ответы (1)


inchar — это строка, поэтому попробуйте использовать strcmp(inchar,command) для их сравнения.

person j319sn    schedule 20.02.2013