SIM800L从c#向arduino发送数据的问题

Cri*_*eno 5 c c# arduino sim800

我想我在代码中遗漏了一些东西。

下面是我在 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);
        }                        
    }
Run Code Online (Sandbox Code Playgroud)

下面是我在 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() {
}
Run Code Online (Sandbox Code Playgroud)

我的困惑/问题是

每当我使用 Arduino 中的串行监视器对其进行测试时,Arduino 中的代码都会成功地向蜂窝号码发送消息。但是当我使用 C# 在 Visual Studio 中使用表单时,没有任何反应。也没有出现错误。我也试过 F11 来知道我是否遗漏了错误,但我仍然什么也没看到。但应用程序不会向该号码发送短信。

非常感谢你们的帮助。先感谢您。

Cod*_*007 0

解决方案是显而易见且简单的。您的所有例程都在 Arduino 设置中,且仅运行一次。因此,直接从 Arduino 发送一条短信正好是 1 次。
通过 C 代码连接时,Arduino 已启动并处于 EMPTY 循环中。因此,命中一次性运行代码的机会为零。
特别把你的日常安排

   readSerial(remoteNum);
Run Code Online (Sandbox Code Playgroud)

在循环中,它应该按预期工作。