5

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

下面是我在 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() {
}

我的困惑/问题是

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

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

4

2 回答 2

0

解决方案很简单。您在 Arduino 设置中拥有所有例程,该设置只运行一次。因此,从 Arduino 直接发送一条短信正好 1 次。
通过 c 代码连接时,Arduino 已经启动并处于 EMPTY 循环中。因此,点击一次性运行代码的机会为零。
把你的例程特别

   readSerial(remoteNum);

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

于 2020-03-22T16:19:12.887 回答
0

在使用 Visual Studio 发送命令之前,您应该做的第一件事是正确配置串行端口,您只需使串行端口闭环,您发送的所有内容都应该接收,如果您没有收到任何内容,则说明您有串行端口配置问题

于 2020-10-01T22:31:27.123 回答