Проблема с отправкой данных из c# в arduino для SIM800L - PullRequest
5 голосов
/ 12 марта 2020

Я думаю, что что-то пропустил в своем коде.

Ниже мой код в C#

public Form1()
    {
        InitializeComponent();
        serialPort1.PortName = "COM2";
        serialPort1.BaudRate = 9600;
        serialPort1.Parity = Parity.None;
        serialPort1.DataBits = 8;
        serialPort1.StopBits = StopBits.One;
        serialPort1.Handshake = Handshake.RequestToSend;
        serialPort1.DtrEnable = true;
        serialPort1.RtsEnable = true;
        serialPort1.NewLine = System.Environment.NewLine;

    }

    private void btnSend_Click(object sender, EventArgs e)
    {
        serialPort1.Open();

    }

    private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        try
        {                
            string num = "+639952006630\n";
            serialPort1.Write(num);        

            string message = "Your child arrived at our school at " + DateTime.Now + ".";
            serialPort1.Write(message);                
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }                        
    }

Ниже мой код в Arduino для отправки данных с помощью модуля GSM SIM800L

    #include <SoftwareSerial.h>

//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8

//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7

//Create software serial object to communicate with SIM800
SoftwareSerial serialSIM800(SIM800_TX_PIN,SIM800_RX_PIN);

void setup() {
  //Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
  Serial.begin(9600);
  while(!Serial);

  //Being serial communication with Arduino and SIM800
  serialSIM800.begin(9600);
  delay(1000);

  //Set SMS format to ASCII
  serialSIM800.write("AT+CMGF=1\r\n");
  delay(1000);

  //getting the number  
  char remoteNum[20];  // telephone number to send sms
  readSerial(remoteNum);



  //Send new SMS command and message number      
  serialSIM800.print("AT+CMGS=\"");
  serialSIM800.print(remoteNum);
  serialSIM800.print("\"\r\n");  
  delay(1000);

   // getting sms text  
  char txtMsg[200];
  readSerial(txtMsg); 

  //Send SMS content
  serialSIM800.print(txtMsg);  
  delay(1000);

  //Send Ctrl+Z / ESC to denote SMS message is complete
  serialSIM800.write((char)26);
  delay(1000);

  Serial.println("SMS Sent!");
}

 /*
  Read input serial
 */
char readSerial(char result[]) {
  int i = 0;
  while (1) {
    while (Serial.available() > 0) {
      char inChar = Serial.read();
      if (inChar == '\n') {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if (inChar != '\r') {
        result[i] = inChar;
        i++;
      }
    }
  }
}
void loop() {
}

Моя путаница / вопрос здесь

Всякий раз, когда я проверяю его с помощью Serial Monitor в Arduino, код в Arduino отправляет сообщение на номер сотового телефона успешно. Но когда я использую форму в Visual Studio, используя C#, ничего не происходит. Также нет ошибок, которые появляются. Я попробовал F11 также, чтобы узнать, пропускаю ли я ошибку, но ничего не вижу. Но приложение не отправляет смс на номер.

Помощь от вас, ребята, очень ценится. Заранее спасибо.

1 Ответ

0 голосов
/ 22 марта 2020

Решение столь же очевидно, как и просто. У вас есть все ваши подпрограммы в настройке Arduino, которая запускается только один раз. Так что отправка одного смс с Arduino напрямую работает ровно 1 раз.
При подключении через код c Arduino уже загружается и в ПУСТОЙ l oop. Таким образом, шанс попасть в код однократного запуска равен нулю.
Поместите ваши процедуры особенно

   readSerial(remoteNum);

в l oop, и все должно работать как положено.

...