2

我想制作一个 ac# 程序,通过 USB 线连接到我的手机以拨打电话。我找到了如何通过 SerialPort 进行连接以及如何通过 AT 命令进行调用,但是当我运行我的程序并单击进行调用时,什么也没有发生。这是我的代码,请帮助我:

SerialPort SP = new SerialPort("COM3");
SP.BaudRate = 9600;
SP.Parity = Parity.None;
SP.DataBits = 8;
SP.StopBits = StopBits.One;
SP.RtsEnable = true;
SP.DtrEnable = true;
SP.Encoding = System.Text.Encoding.Unicode;
SP.ReceivedBytesThreshold = 1;
SP.NewLine = Environment.NewLine;
SP.Open();
SP.Write("ATDT 0999182542"+ Environment.NewLine);

SP.Close();
4

3 回答 3

4

首先查看你的调制解调器是否连接,向AT端口发送命令。如果您收到OK响应,则表示您的调制解调器已连接。

拨打电话的语法是:

ATDYourphnumber; //不要忘记“;”

例子:ATD9012345645;

所以你应该以同样的方式写入端口。

句法:

SP.WriteLine("ATD"+phonenumber+";");

您可以使用WriteLine,因为它也可以使用\r\n

更新:如何查看调制解调器的响应:

SP.Open( )之后;

string cmd = "AT";
SP.WriteLine(cmd + "\r");
SP.Write(cmd + "\r");
Thread.Sleep(500);
string ss= SP.ReadExisting();
if(ss.EndsWith("\r\nOK\r\n"))
  {
   MessageBox.Show("Modem is connected");
  }
于 2012-09-12T11:12:07.237 回答
2

@Cdeez 你的答案是最好的!它工作得很好 XD 我试过了,但我的错误不包括“\r”,它的作用是按“enter”,你需要按 enter 才能让命令采取行动。顺便说一下,这是我的调用方法,再次感谢@Cdeez!:

private void Call() {
        SerialPort celu = new SerialPort();
        celu.PortName = "COM13"; // You have check what port your phone is using here, and replace it
        celu.Open();
        string cmd = "ATD";  // Here you put your AT command
        string phoneNumber = "784261259"; // Here you put the phone number, for me it worked just with the phone number, not adding any other area code or something like that
        celu.WriteLine(cmd + phoneNumber + ";\r");
        Thread.Sleep(500);
        string ss = celu.ReadExisting();
        if (ss.EndsWith("\r\nOK\r\n"))
        {
            MessageBox.Show("Modem is connected \r Calling : " + phoneNumber);
        }
        celu.Close();
    }
于 2013-05-30T20:41:05.077 回答
0

COM 端口日志记录工具呢?你用它吗?您的命令是否发送到 COM 端口?

据我所知拨号命令是 ATD[Number]; 所以尝试重写你的代码如下:

    SP.Write("ATD0999182542;"+ Environment.NewLine);

尝试使用这个库: GSM 通信库

于 2012-09-07T15:24:03.667 回答