Набор номера с использованием C#.net с помощью AT-команд

Я хочу создать программу С#, которая подключается к моему мобильному телефону с помощью 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();

person Hazoomo    schedule 07.09.2012    source источник
comment
В этой строке нет пробела; посмотрите, что происходит на serialmon.com   -  person Alex K.    schedule 07.09.2012
comment
@hazoomo, как я могу подключить сим-модем мобильного телефона к системному порту связи. Просто подключив USB-кабель, он не показывает com-порт.   -  person Hot Cool Stud    schedule 06.09.2016


Ответы (3)


Прежде всего, чтобы увидеть, подключен ли ваш модем, отправьте на порт команду 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");
  }
person Cdeez    schedule 12.09.2012
comment
Я предлагаю вам удалить SP.ReceivedBytesThreshold = 1; SP.NewLine = Environment.NewLine;. В вашем случае не нужны. - person Cdeez; 12.09.2012
comment
пожалуйста, я не знаю, как вернуться, хорошо - person Hazoomo; 08.10.2012
comment
о боже мой.... все, что вы отправляете на модем, вы увидите в разрешении ex: SP.WriteLine(James); // res — Джеймс SP.WriteLine(AT) ; // res AT пожалуйста, в чем проблема ....:( - person Hazoomo; 12.10.2012
comment
Да res будет хранить все, что есть в порту. Поэтому, когда вы выполняете приведенный выше код, если модем ответил OK, тогда res будет содержать OK, и вы можете понять, что модем подключен, иначе он не подключен к этому порту. - person Cdeez; 12.10.2012
comment
Обратите внимание, что может случиться так, что вашему модему потребуется более 200 микросекунд для ответа. Так что попробуйте с большими значениями времени, если вы сомневаетесь, что код не работает. - person Cdeez; 12.10.2012
comment
Мне жаль, что я пропустил возврат каретки в предыдущем коде, и, вероятно, это было проблемой. Попробуйте модифицированный код выше. - person Cdeez; 13.10.2012
comment
Cdeez я обнаружил, что моя проблема такая же в этой ссылке stackoverflow.com/questions/9834784/com-port-driver но ни одного решения, я очень уверен ..... - person Hazoomo; 15.10.2012

@Cdeez Твой ответ лучший! это работает просто отлично XD Я пробовал, но моя ошибка заключалась в том, что я не включил «\ r», который работает как нажатие «ввода», и вам нужно нажать ввод, чтобы команда начала действовать. Кстати, вот мой способ вызова, и еще раз спасибо @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();
    }
person FraK    schedule 30.05.2013
comment
Я хочу воспроизвести сообщение, когда пользователь посещает вызов, не могли бы вы мне помочь, пожалуйста - person Umair Rasheed; 01.02.2020
comment
@UmairRasheed извините, я не могу вам помочь, я потерял этот проект на старом компьютере, и его нет в репозитории, поэтому трудно вспомнить, что я там делал. Пожалуйста, поделитесь своим решением, если вы его нашли! - person FraK; 19.04.2020

Как насчет инструментов ведения журнала COM-порта. Вы используете его? Ваши команды отправлялись на COM-порт?

Насколько я знаю, команда дозвона — это ATD[Number]; поэтому попробуйте переписать свой код следующим образом:

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

Попробуйте использовать эту библиотеку: GSM Communication Library

person syned    schedule 07.09.2012
comment
Ничего не происходит, я думаю, проблема в последовательном порту, как узнать, подключен ли мой мобильный ??? пожалуйста - person Hazoomo; 07.09.2012
comment
Используете ли вы монитор COM-порта? - person syned; 08.09.2012