Преобразование типов при отправке и получении строки в Arduino в C#

Я пытаюсь отправить SMS из модуля Arduino и GSM в приложении С#. Я успешно отправил и получил данные, но проблема заключается в моей полученной строке, которая не соответствует формату, который я отправил. Мой код С#:

        string mystr = "012345678900"

            char [] buf = new char[13];
            buf = mystr.ToCharArray();
            int intReturnASCII = 0;
            char charReturnValue = (Char)intReturnASCII;
            currentPort.Open();
            currentPort.Write(buf, 0, 5);
            Thread.Sleep(7500);
            int count = currentPort.BytesToRead;
            string returnMessage = "";
            while (count > 0)
            {
                intReturnASCII = currentPort.ReadByte();
                returnMessage = returnMessage + Convert.ToChar(intReturnASCII);
                count--;
            }
            currentPort.Close();

            str = returnMessage;

И мой код Arduino:

int ledPin_3 = 13;
byte inputByte_0;
byte inputByte_1;
byte inputByte_2;
byte inputByte_3;
byte inputByte_4;
byte inputByte_5;
byte inputByte_6;
byte inputByte_7;
byte inputByte_8;
byte inputByte_9;
byte inputByte_10;
byte inputByte_11;
byte inputByte_12;

void setup() {

  pinMode(ledPin_3, OUTPUT);
  Serial.begin(9600);
  digitalWrite(ledPin_3, HIGH);
  delay(250);
  digitalWrite(ledPin_3, LOW);
  delay(250);
}

void loop() {

  if (Serial.available() == 13) 
  {
    inputByte_0 = Serial.read();
    delay(100);    
    inputByte_1 = Serial.read();
    delay(100);      
    inputByte_2 = Serial.read();
    delay(100);      
    inputByte_3 = Serial.read();
    delay(100);
    inputByte_4 = Serial.read();
    delay(100); 
    inputByte_5 = Serial.read();
    delay(100);  
    inputByte_6 = Serial.read();
    delay(100);
    inputByte_7 = Serial.read();
    delay(100);
    inputByte_8 = Serial.read();
    delay(100);
    inputByte_9 = Serial.read();
    delay(100);
    inputByte_10 = Serial.read();
    delay(100);
    inputByte_11 = Serial.read();
    delay(100);
    inputByte_12 = Serial.read();
    delay(100);
  }
            delay(1200);
            Serial.print("AT");
            delay(1200);

            int index = 0;
            Serial.println();
            Serial.println("AT+CMGF=1"); 
            delay(100);
            delay(1200);

            Serial.println();
            Serial.print("AT+CMGS=\""); 
            Serial.print(inputByte_0);
            Serial.print(inputByte_1);
            Serial.print(inputByte_2);
            Serial.print(inputByte_3);
            Serial.print(inputByte_4);
            Serial.print(inputByte_5);
            Serial.print(inputByte_6);
            Serial.print(inputByte_7);
            Serial.print(inputByte_8);
            Serial.print(inputByte_9);
            Serial.print(inputByte_10);
            Serial.print(inputByte_11);
            Serial.print(inputByte_12);

            Serial.println("\"");
            delay(1000);
            Serial.print("message from GSM");

            delay(500);

            Serial.write(0x1A);
            Serial.write(0x0D);
            Serial.write(0x0A);



        }

Теперь строка, которую я получил,

AT AT+CMGF=1 AT+CMGS="0000000000000"

Но я хочу

AT AT+CMGF=1 AT+CMGS="012345678900"

Как вернуть правильную строку вместо "0000000000000"??


person Awais Mahmood    schedule 06.08.2015    source источник
comment
Читая ваш код, если Serial.available() != 13, код перейдет к задержке до Serial.print("AT");. Следовательно, переменные inputByte_# не инициализированы (но обычно равны 0), так что вы только что прочитали это. Попробуйте добавить часть Serial.print в условие, и вы увидите что-то другое.   -  person frarugi87    schedule 06.08.2015


Ответы (1)


В вашем коде С# вы пишете только 5 символов в последовательный порт:

 currentPort.Write(buf, 0, 5);

Но в ардуино вы ожидаете 13 байт:

if (Serial.available() == 13)

Это условие никогда не будет выполнено, поэтому оператор "if-then" пропускается, а переменные inputByte_0 - inputByte_12 не инициализируются.

person Alexey    schedule 07.08.2015
comment
У меня есть правильная строка. Но теперь я получаю номер в ASCII. в качестве - person Awais Mahmood; 08.08.2015
comment
AT AT+CMGF=1 AT+CMGS=43575051515153545653505050 сообщение от GSM - person Awais Mahmood; 08.08.2015
comment
Попробуйте заменить currentPort.Write(buf, 0, 5); с currentPort.Write(mystr); - person Alexey; 08.08.2015
comment
Если это поможет, вам нужно будет найти правильный тип для вашего массива buf. Char здесь не работает, потому что это Unicode, два байта. - person Alexey; 08.08.2015
comment
Я думаю, вам нужно объявить его как byte [] buf = new byte [13];. Извините, я не могу проверить это сейчас, поэтому могу ошибиться, но это должно дать вам представление о том, где исследовать. - person Alexey; 08.08.2015