我想使用C#从GSM调制解调器拨打电话。我写了以下代码。但我无法拨打电话。请说出错误是什么。另请告诉我如何处理调制解调器代码中的响应,以便显示“呼叫连接”或“无法连接”等消息。
private void button1_Click(object sender, EventArgs e)
{
SerialPort po = new SerialPort();
po.PortName = "COM3";
po.BaudRate = int.Parse( "9600");
po.DataBits = Convert.ToInt32("8");
po.Parity = Parity.None;
po.StopBits = StopBits.One;
po.ReadTimeout = int.Parse("300");
po.WriteTimeout = int.Parse("300");
po.Encoding = Encoding.GetEncoding("iso-8859-1");
po.Open();
po.DtrEnable = true;
po.RtsEnable = true;
po.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
po.Write("ATD9030665834;");
}
public void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (e.EventType == SerialData.Chars)
{
//what to write here to display the response??
}
}
答案 0 :(得分:2)
使用port.WriteLine(“ATD”+ phno +“;”);
这肯定会解决你的问题..
要处理响应,请使用port.ReadExisting()并与您的需求进行比较。就这么简单:)
祝你好运..答案 1 :(得分:1)
po
,因为它与Hyperterminal一起使用。
超级终端设置通常如下:
如果Flow Control为NONE,则不需要:
po.DtrEnable = true;
po.RtsEnable = true;
我没有找到使用设置编码。
你遗忘的最重要的事情是在任何AT命令结束时添加“\ r \ n”!好像你还没看过AT Command list!
答案 2 :(得分:0)
private void button1_Click(object sender, EventArgs e)
{
SerialPort po = new SerialPort();
po.PortName = "COM10";
po.BaudRate = int.Parse("9600");
po.DataBits = Convert.ToInt32("8");
po.Parity = Parity.None;
po.StopBits = StopBits.One;
po.ReadTimeout = int.Parse("300");
po.WriteTimeout = int.Parse("300");
po.Encoding = Encoding.GetEncoding("iso-8859-1");
po.Open();
po.DtrEnable = true;
po.RtsEnable = true;
//po.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
// po.Write("ATD01814201013;");
po.WriteLine("ATD01"+textBoxPhoneNumber.Text+";"+Environment.NewLine);
}