<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wikihandbk.com/ruwiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%2FGSMExamplesMakeVoiceCall</id>
	<title>Arduino:Примеры/GSMExamplesMakeVoiceCall - История изменений</title>
	<link rel="self" type="application/atom+xml" href="http://wikihandbk.com/ruwiki/index.php?action=history&amp;feed=atom&amp;title=Arduino%3A%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B%2FGSMExamplesMakeVoiceCall"/>
	<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;action=history"/>
	<updated>2026-04-12T08:53:22Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=8495912&amp;oldid=prev</id>
		<title>EducationBot в 08:34, 8 июля 2023</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=8495912&amp;oldid=prev"/>
		<updated>2023-07-08T08:34:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 12:34, 8 июля 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l301&quot;&gt;Строка 301:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 301:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;references /&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{Навигационная таблица/Портал/Arduino}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Пример программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Категория:Примеры программирования Arduino]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>EducationBot</name></author>
	</entry>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=7735715&amp;oldid=prev</id>
		<title>EducationBot в 08:32, 20 мая 2023</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=7735715&amp;oldid=prev"/>
		<updated>2023-05-20T08:32:33Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;amp;diff=7735715&amp;amp;oldid=21360&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>EducationBot</name></author>
	</entry>
	<entry>
		<id>http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=21360&amp;oldid=prev</id>
		<title>Myagkij: Замена текста — «&lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot;&gt;» на «&lt;syntaxhighlight lang=&quot;c&quot; line=&quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&quot; enclose=&quot;div&quot;&gt;»</title>
		<link rel="alternate" type="text/html" href="http://wikihandbk.com/ruwiki/index.php?title=Arduino:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/GSMExamplesMakeVoiceCall&amp;diff=21360&amp;oldid=prev"/>
		<updated>2016-12-14T05:30:47Z</updated>

		<summary type="html">&lt;p&gt;Замена текста — «&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot;&amp;gt;» на «&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Arduino панель перехода}}&lt;br /&gt;
{{Перевод от Сubewriter}}&lt;br /&gt;
{{Myagkij-редактор}}&lt;br /&gt;
&lt;br /&gt;
==Голосовой звонок&amp;lt;ref&amp;gt;[https://www.arduino.cc/en/Tutorial/GSMExamplesMakeVoiceCall Arduino - Make Voice Call]&amp;lt;/ref&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Этот скетч при помощи платы '''Arduino''' и модуля '''GSM Shield''' позволяет делать звонок на удаленный телефонный номер, введенный через '''Serial Monitor'''. Чтобы слышать человека на том конце связи и иметь возможность отправлять свой голос, вам надо будет подключить к '''Shield''' динамик и микрофон.&lt;br /&gt;
&lt;br /&gt;
== Необходимое оборудование ==&lt;br /&gt;
&lt;br /&gt;
* Плата '''Arduino''';&lt;br /&gt;
* Модуль '''Arduino + Telefonica GSM/GPRS Shield''';&lt;br /&gt;
* Микрофон и динамик, подключенные к '''Shield''';&lt;br /&gt;
* '''SIM'''-карта;&lt;br /&gt;
&lt;br /&gt;
==Цепь==&lt;br /&gt;
&lt;br /&gt;
[[File:GSMShield_ArduinoUno.png|650px]]&lt;br /&gt;
&lt;br /&gt;
Изображение '''Arduino GSM Shield''' поверх '''Arduino Uno'''&lt;br /&gt;
&lt;br /&gt;
==Код==&lt;br /&gt;
&lt;br /&gt;
Сначала импортируем библиотеку '''GSM'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;GSM.h&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функционал '''SIM'''-карты может быть заблокирован '''PIN'''-кодом. В таком случае нам потребуется директива #define, с помощью которой мы определим этот '''PIN'''-код как константу. Если у '''SIM'''-карты '''PIN'''-кода нет, вы можете оставить это место пустым.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
#define PINNUMBER &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем экземпляры классов, которые будем использовать. В данном примере вам понадобятся '''GSM''' и '''GSMVoiceCall'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
GSM gsmAccess; &lt;br /&gt;
GSMVoiceCall vcs;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем несколько переменных для хранения телефонного номера, на который будем звонить.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
String remoteNumber = &amp;quot;&amp;quot;;&lt;br /&gt;
char charbuffer[20];&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В секции setup() инициализируем последовательную передачу данных на компьютер. Она будет использоваться для передачи телефонного номера на '''Arduino'''. Запустив коммуникацию, отправляем на '''Serial Monitor''' сообщение, информирующее о начале работы скетча. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
void setup(){&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(9600); &lt;br /&gt;
  Serial.println(&amp;quot;Make Voice Call&amp;quot;);  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Создаем локальную переменную для отслеживания статуса соединения. Она нужна для того, чтобы скетч не начинал работать до тех пор, пока '''SIM'''-карта не подключится к сети.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
boolean notConnected = true;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Подключаемся к сети, вызывая функцию gsmAccess.begin(). В качестве аргумента в ней будет '''PIN'''-код '''SIM'''-карты. Ставим эту функцию в секции while(), чтобы постоянно проверять статус соединения. Когда модем подключится, gsmAccess.begin() вернет значение '''GSM_READY'''. Используем его, как сигнал для того, чтобы присвоить переменной notConnected значение true или false. В противном случае на '''Serial Monitor''' появится сообщение о том, что подключиться не удалось.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
while(notConnected)&lt;br /&gt;
  {&lt;br /&gt;
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)&lt;br /&gt;
      notConnected = false;&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Serial.println(&amp;quot;Not connected&amp;quot;);&lt;br /&gt;
      delay(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Заканчиваем секцию setup()выводом сообщения на '''Serial Monitor''' о том, что настройка связи прошла успешно, а также с предлагаем пользователю ввести телефонный номер.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
Serial.println(&amp;quot;GSM initialized.&amp;quot;);&lt;br /&gt;
  Serial.println(&amp;quot;Enter phone number to call.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Код в секции loop() принимает от '''Serial Monitor''' входящие байты и делает голосовой звонок.&lt;br /&gt;
&lt;br /&gt;
Для начала проверяем буфер последовательного порта на предмет того, есть ли там информация, которую мы можем сосчитать. Если есть, записываем ее в локальную переменную.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  while (Serial.available() &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    char inChar = Serial.read();&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в буфере есть символ новой строки, проверяем, не содержит ли вписанный телефонный номер более '''20 цифр''' (теоретически, вы никогда не сможете набрать номер, где цифр будет больше '''20-ти''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
if (inChar == '\n')&lt;br /&gt;
    {&lt;br /&gt;
      if (remoteNumber.length() &amp;lt; 20)&lt;br /&gt;
      {&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выводим номер, по которому собираемся звонить, на '''Serial Monitor'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
Serial.print(&amp;quot;Calling to : &amp;quot;);&lt;br /&gt;
        Serial.println(remoteNumber);&lt;br /&gt;
        Serial.println();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Телефонный номер будет храниться в строке под названием remoteNumber. Для функции voiceCall() требуется массив char, поэтому копируем эту строку в массив под названием charbuffer.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
remoteNumber.toCharArray(charbuffer, 20);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы послать вызов, воспользуемся функцией vcs.voiceCall(), '''«скормив»''' ей номер, до которого хотим дозвониться. Проверяем статус соединения при помощи функции getvoiceCallStatus().&lt;br /&gt;
&lt;br /&gt;
Чтобы активировать функцию hangCall() – и тем самым прервать звонок – отправляем символ новой строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
if(vcs.voiceCall(charbuffer))&lt;br /&gt;
        {&lt;br /&gt;
          Serial.println(&amp;quot;Call Established. Enter line to end&amp;quot;);&lt;br /&gt;
          while(Serial.read()!='\n' &amp;amp;&amp;amp; (vcs.getvoiceCallStatus()==TALKING));          &lt;br /&gt;
          vcs.hangCall();&lt;br /&gt;
        }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Завершив звонок, очищаем переменную, в которой хранится телефонный номер.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
Serial.println(&amp;quot;Call Finished&amp;quot;);&lt;br /&gt;
        remoteNumber=&amp;quot;&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;Enter phone number to call.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если номер, введенный в '''Serial Monitor''', содержит больше '''20 цифр''', очищаем строку remoteNumber и начинаем снова.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
else&lt;br /&gt;
      {&lt;br /&gt;
        Serial.println(&amp;quot;That's too long for a phone number. I'm forgetting it&amp;quot;); &lt;br /&gt;
        remoteNumber = &amp;quot;&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если при считывании информации с '''Serial Monitor''' оказывается, что среди входящих символов нет символа новой строки или возврата строки, добавляем его к строке remoteNumber и закрываем секцию loop(). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
else&lt;br /&gt;
    {&lt;br /&gt;
      if(inChar!='\r')&lt;br /&gt;
        remoteNumber += inChar;&lt;br /&gt;
    }&lt;br /&gt;
  } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Загрузив код, открываем '''Serial Monitor'''. Увидев сообщение '''«Enter phone number to call»''' (т.е. '''«Введите телефонный номер, на который хотите позвонить»'''), впишите нужный телефонный номер и нажмите клавишу ввода.&lt;br /&gt;
&lt;br /&gt;
Убедитесь, что '''Serial Monitor''' настроен таким образом, что при нажатии на клавишу ввода будет отсылаться только символ новой строки.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot; line=&amp;quot;GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS&amp;quot; enclose=&amp;quot;div&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Голосовой звонок при помощи Arduino&lt;br /&gt;
&lt;br /&gt;
Этот скетч для Arduino GSM Shield позволяет делать голосовой звонок &lt;br /&gt;
на удаленный телефонный номер, который вы вводите через Serial Monitor.&lt;br /&gt;
Когда все будет настроено, откройте Serial Monitor и, увидев сообщение READY, впишите телефонный номер. &lt;br /&gt;
Убедитесь, что Serial Monitor настроен таким образом,&lt;br /&gt;
чтобы при нажатии на клавишу ввода отсылался только символ новой строки.&lt;br /&gt;
&lt;br /&gt;
Цепь:&lt;br /&gt;
* GSM Shield&lt;br /&gt;
* Подключенные к Shield динамик и микрофон. &lt;br /&gt;
Без них ни отправлять, ни получать голосовые сообщения будет нельзя.&lt;br /&gt;
&lt;br /&gt;
Создан в марте 2012 Хавьером Зорзано (Javier Zorzano).&lt;br /&gt;
&lt;br /&gt;
Этот код не защищен авторским правом.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Библиотеки:&lt;br /&gt;
#include &amp;lt;GSM.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// PIN-код:&lt;br /&gt;
#define PINNUMBER &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Создаем экземпляры классов GSM и GSMVoiceCall:&lt;br /&gt;
GSM gsmAccess; // включая параметр «true» для активации отладки&lt;br /&gt;
GSMVoiceCall vcs;&lt;br /&gt;
&lt;br /&gt;
String remoteNumber = &amp;quot;&amp;quot;;  // номер, по которому вы будете звонить&lt;br /&gt;
char charbuffer[20];&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Инициализируем последовательную передачу данных и ждем открытия порта:&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  while (!Serial) {&lt;br /&gt;
    ; // ждем подключения последовательного порта (нужно только для Leonardo)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;Make Voice Call&amp;quot;);  //  &amp;quot;Делаем голосовой звонок&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  // Состояние соединения:&lt;br /&gt;
  boolean notConnected = true;&lt;br /&gt;
&lt;br /&gt;
  // Запускаем GSM Shield.&lt;br /&gt;
  // Если у вашей SIM-карты есть PIN, делаем его параметром функции gsmAccess.begin():&lt;br /&gt;
  while (notConnected)&lt;br /&gt;
  {&lt;br /&gt;
    if (gsmAccess.begin(PINNUMBER) == GSM_READY)&lt;br /&gt;
      notConnected = false;&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      Serial.println(&amp;quot;Not connected&amp;quot;);  //  &amp;quot;Подключиться не удалось&amp;quot;&lt;br /&gt;
      delay(1000);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  Serial.println(&amp;quot;GSM initialized.&amp;quot;);  //  &amp;quot;GSM инициализирован.&amp;quot;&lt;br /&gt;
  Serial.println(&amp;quot;Enter phone number to call.&amp;quot;);  //  &amp;quot;Введите телефонный номер, на который будем звонить.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // Добавляем в строку любые входящие символы:&lt;br /&gt;
  while (Serial.available() &amp;gt; 0)&lt;br /&gt;
  {&lt;br /&gt;
    char inChar = Serial.read();&lt;br /&gt;
    // Если это символ новой строки, значит, делаем звонок:&lt;br /&gt;
    if (inChar == '\n')&lt;br /&gt;
    {&lt;br /&gt;
      // Убедитесь, что телефонный номер не слишком длинен:&lt;br /&gt;
      if (remoteNumber.length() &amp;lt; 20)&lt;br /&gt;
      {&lt;br /&gt;
        // Дайте пользователю знать, что вы звоните:&lt;br /&gt;
        Serial.print(&amp;quot;Calling to : &amp;quot;);  //  &amp;quot;Звоним на: &amp;quot;&lt;br /&gt;
        Serial.println(remoteNumber);&lt;br /&gt;
        Serial.println();&lt;br /&gt;
&lt;br /&gt;
        // Звоним на указанный номер:&lt;br /&gt;
        remoteNumber.toCharArray(charbuffer, 20);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        // Проверяем, сняли ли на том конце трубку:&lt;br /&gt;
        if (vcs.voiceCall(charbuffer))&lt;br /&gt;
        {&lt;br /&gt;
          Serial.println(&amp;quot;Call Established. Enter line to end&amp;quot;);  //  &amp;quot;Связь установлена. Введите символ новой строки, чтобы закончить&amp;quot;&lt;br /&gt;
          // Ждем получения символа новой строки:&lt;br /&gt;
          while (Serial.read() != '\n' &amp;amp;&amp;amp; (vcs.getvoiceCallStatus() == TALKING));&lt;br /&gt;
          // и вешаем «трубку»:&lt;br /&gt;
          vcs.hangCall();&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(&amp;quot;Call Finished&amp;quot;);  //  &amp;quot;Звонок окончен&amp;quot;&lt;br /&gt;
        remoteNumber = &amp;quot;&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;Enter phone number to call.&amp;quot;);  //  &amp;quot;Введите телефонный номер, на который хотите позвонить.&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        Serial.println(&amp;quot;That's too long for a phone number. I'm forgetting it&amp;quot;);  //  &amp;quot;Слишком длинный номер. Такие у меня в голове не помещаются&amp;quot;&lt;br /&gt;
        remoteNumber = &amp;quot;&amp;quot;;&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      // Чтобы отправить сообщение, добавьте к нему последний символ:&lt;br /&gt;
      if (inChar != '\r')&lt;br /&gt;
        remoteNumber += inChar;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См.также==&lt;br /&gt;
&lt;br /&gt;
# GSM Constructor&lt;br /&gt;
# GSM.begin()&lt;br /&gt;
# GSM.shutdown()&lt;br /&gt;
# GSMVoiceCall Constructor&lt;br /&gt;
# getVoiceCallStatus()&lt;br /&gt;
# ready()&lt;br /&gt;
# voiceCall()&lt;br /&gt;
# answerCall()&lt;br /&gt;
# hangCall()&lt;br /&gt;
# retrieveCallingNumber()&lt;br /&gt;
&lt;br /&gt;
==Внешние ссылки==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Категория:Пример]]&lt;br /&gt;
[[Категория:Примеры]]&lt;br /&gt;
[[Категория:Пример программирования Arduino]]&lt;br /&gt;
[[Категория:Примеры программирования Arduino]]&lt;/div&gt;</summary>
		<author><name>Myagkij</name></author>
	</entry>
</feed>