Указатели дают больше гибкости

Советы радиолюбителю Comments Off

Наше решение по выводу на дисплей в предыдущей секции имеет два основных недостатка. Во-первых, оно ограничено выводом шести числовых последовательностей - если пользователь угадает все шесть, программа сразу завершится. Во-вторых, она всегда выводит те же самые шесть пар элементов в той же последовательности. Как же увеличить гибкость программы?
Одно из возможных решений - создать шесть векторов, по одному на каждую последовательность, рассчитанных на одинаковое количество элементов. На каждом проходе цикла мы выбираем пары элементов из разных векторов. При повторном использовании вектора мы возьмем пару элементов из другой части вектора. Это приблизит нас к устранению обоих отмеченных недостатков.
Как и в предыдущем решении, хотелось бы иметь «прозрачный» доступ к разным векторам. В предыдущем разделе мы достигали «прозрачности» за счет доступа по индексам, а не по имени. На каждом проходе цикла мы увеличивали значение индекса на 3. Сам код оставался неизменным.
В этом разделе мы добьемся «прозрачности» тем, что будем обращаться к вектору косвенно, через указатель, вместо обращения по имени. Указатель вносит определенный уровень косвенности в программу.

Как использовать массивы и векторы

Советы радиолюбителю Comments Off

Ниже приведены первые восемь элементов из шести числовых последовательностей:
Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21 Lucas: 1# 3, 4, 7, 11, 18, 29, 47 Pell: 1, 2, 5, 12, 29, 70, 169, 408 Triangular: 1, 3, 6, 10, 15, 21, 28, 36 Square: 1, 4, 9, 16, 25, 36, 49, 64 Pentagonal: 1, 5, 12, 22, 35, 51, 70, 92
Наша программа должна выводить на дисплей пары элементов из последовательности и позволить пользователю угадать следующий элемент. Если пользователь угадывает и желает продолжить, программа должна вывести на дисплей следующую пару элементов, затем третью, и так далее. Как мы можем это сделать?
Если следующая пара берется из той же последовательности, пользователь, разгадавший одну пару, угадает их все. Это не интересно. Так что будем брать следующую пару из другой числовой последовательности при каждом проходе основного цикла программы.
Теперь будем выводить на дисплей максимум шесть пар элементов за сессию: по одной паре из каждой из шести последовательностей. Мы постараемся сделать это так, чтобы при выводе на дисплей пары
элементов не знать, из какой числовой последовательности будет взята пара при следующем проходе цикла. Каждый проход должен иметь доступ к трем значениям: паре элементов и элементу, следующему за ней в последовательности.
Решение, которое мы обсудим в этом разделе, использует контейнерный тип, способный поддержать смежную последовательность целых значений, которые могут быть доступны не по имени, а по позиции в контейнере. Мы запомнили 18 значений в контейнере как подборку шести групп: первые два в группе представляют пару для вывода на дисплей, третий - следующий элемент в последовательности. При каждом проходе цикла мы добавляем три индексных значения, про¬ходя по шести группам по очереди.

Написание условий и создание циклов

Советы радиолюбителю Comments Off

По определению, выражения выполняются по разу по мере прохождения программы, начиная с первого выражения main (). В предыдущих разделах мы кратко говорили о выражении if. Оно позволяет нам выполнять по условию одно выражение или их последовательность, основываясь на вычислении истинности условия. Дополнение else дает возможность проверить несколько условий. Циклические выражения позволяют выполнять одно выражение или их последовательность, основываясь на вычислении истинности. Следующий псевдокод программы использует два цикла (#1 и #2), один условный оператор if (#5), один условный оператор if-else (#3), и второй условный оператор, назы-ваемый switch (переключатель) (#4).
// Pseudo code: Основная логика программы - пока пользователь хочет угадывать последовательности { #1
вывести на дисплей последовательность пока угадано неверно, и пользователь хочет угадать еще раз
{ #2
прочитать гипотезу увеличить счетчик попыток если угадано правильно
{ #3
увеличить счетчик угадываний установить got_.it в true

Оператор предшествования

Советы радиолюбителю Comments Off

Есть одна «заморочка» в использовании встроенных операторов - при комбинации нескольких операторов в одном выражении порядок выполнения операций определяется предустановленным уровнем приоритетности для каждого. Например, результат выражения 5 + 2*10 всегда равен 25 и никогда 70, поскольку оператор умножения имеет больший приоритет, чем оператор сложения. В итоге 2 всегда умножается на 10 прежде, чем складывается с 5.
Мы можем переопределить приоритет, взяв в скобки операцию, с выполнения которой хотели бы начать. (5 + 2) * 10, например, принимает значение 70.
Для операторов, о которых я говорил, предопределенные уровни приоритетности написаны ниже. Оператор, который выше, имеет больший приоритет, чем тот, что ниже. Операторы, расположенные в одну линию, имеют порядок определения слева направо.Наше выражение проверяет результат оператора остатка. Если ival четно, результат нулевой и логический операто НЕ становится истинным. Иначе, если результат ненулевой, логический оператор НЕ принимает значение false. Во всяком случае, так нам хотелось бы.
К сожалению, результат выражения совершенно иной. Наше выражение всегда будет ложным, исключая значение ival, равное нулю!

Как писать программы на С++

Советы радиолюбителю Comments Off

Положим, нам нужно написать простую программу, отправляющую сообщение на терминал пользователя, которое просит ввести имя. Мы прочитываем введенное имя, сохраняем, чтобы использовать в дальнейшем, и, наконец, приветствуем пользователя по имени.
Прекрасно, откуда начнем? Начнем там, откуда начинаются все программы на С++ - с функции, называемой main () . main (). Внедряемая пользователем функция в следующей основной форме:
int main(){// код нашей программы далее} где int - это ключевое слово языка С++. Ключевые слова -предопределенные имена, имеющие особое значение в языке, int представляет встроенный целый тип данных.
Функция- независимая последовательность кодов, производящих некие выкладки. Она состоит из частей: возвращаемого типа, имени функции, списка параметров и тела функции. Рассмотрим каждую из нихх по очереди.
Возвращаемый тип функции обычно представляет результат вычислений (выкладок), main () имеет целый возвращаемый тип. Значение, возвращаемое main (), показывает, было ли выполнение нашей программы успешным. По соглаше¬нию main () возвращает «О» при удачном выполнении. Нену¬левое значение показывает, что что-то идет не так.
Имя функции выбирается программистом из соображений наилучшим образом определить, что функция будет делать, min () и sort (), например, - хорошие имена функций, f () и g () не так хороши. Почему? Они менее информативны в отношении назначения функции.
main - не ключевое слово. Система компиляции, выполняющая нашу программу С++, предполагает, что функция main() предопределена. Если мы забудем включить ее, программа не будет работать.

Схемы для экспериментов с радиоканалом

Советы радиолюбителю Comments Off

Если вам захочется провести эксперименты с радиоканалом вместо проводной связи модулей, то:
лучше было бы воспользоваться готовыми радиомодулями, но дорого;
не забывайте, что ваши эксперименты могут мешать вашим соседям;
не забудьте о программах, о которых говорилось выше;
проверяйте все решения на устойчивость;
может существовать множество интересных решений, что само по себе - целое «поле чудес» для творчества.
Схемы, приведенные на рис. П.21, надеюсь, помогут вам начать эксперименты. Я не помню источник, откуда появились эти схемы в моем архиве, думаю из литературы по радиоуправляемым моделям. Хорошие решения можно найти в соответствующей литературе. Интересно было бы использовать цифровые схемы для этих целей. Я встречал подобные устройства в Интернете, но эксперименты в этой области не проводил, поэтому не готов предложить готовое решение.
Элементы схемы: С1 = 0,1 мкФ, С2-С4 = 200 пФ, С5 = 1000 пФ, С6-С7 = 5-20 пФ, С8 = 10 пФ.
R1 = 2,4 кОм, R2 = 4,3 кОм, R3 = 2,4 кОм, R4 = 4,7 кОм, R5 = 100 Ом.
LI, L2, L5 - дроссели индуктивностью 50 мкГн (50-60 вит¬ков провода ПЭЛШО 0,1, намотанных виток к витку на кар¬касе диаметром 5 мм).
L3-L4 - катушки, намотанные на одном каркасе диаметром 10мм проводом ПЭЛШО 0,35 виток к витку и имеющие 6 и 8 витков.
VT1 - транзистор практически любого типа, например КТ3102, VT2, высокочастотный транзистор типа ГТ311 или аналогичный.
Напряжение питания ипит = 4-5 В.
Режим питания генератора высокой частоты, собранного на транзисторе VT2, определяется значениями резисторов делителя R1R2, а режим работы самого транзистора VT2 -значениями резисторов делителя R3R4 и резистора R5, который задает, в основном, рабочий ток транзистора VT2.

Разветвитель видеосигнала

Советы радиолюбителю Comments Off

Подключение бытовой аудиоаппаратуры к системе, думаю, не вызовет затруднений. Даже к линейному выходу музыкального центра или видеомагнитофона можно параллельно включить несколько приемников (телевизоров или управляемых усилителей) без заметного ухудшения качества звука. Если же вы используете системный аудиокоммутатор, добавить развязывающие усилители тоже несложно. Можно использовать транзисторы, проверить работу предполагаемой развязки в программах, о которых я говорил выше, и добавить к схеме коммутатора дополнительные элементы.Еще проще можно организовать работу, применяя операционные усилители. Практически любой из них обеспечит необходимую полосу пропускания. Усиления не требуется, а добавить регулировку усиления можно с целью обеспечения одинаковой громкости всех приемников сигнала.
Немного сложнее обстоят дела с «перемещением» видеосигнала. По этой причине я привожу схему, опубликованную в журнале «Радио».
Как правило, выходное сопротивление всех источников видеосигнала рассчитано на подключение коаксиального кабеля с волновым сопротивлением 75 Ом. Такое же входное сопротивление имеют приемники.

Дополнительные замечания по ИК-управлению

Советы радиолюбителю Comments Off

Программа WinLIRC позволяет не только считывать ИК-коды, но и воспроизводить прочитанные команды. Воспроизведение - чисто программное, возможно, по этой причине оно показалось мне не слишком уверенным. Но оно работает, что вы можете использовать в своих целях. На сайтах, посвященных работе программы, неоднократно задавался вопрос о том, как следует изменить схему излучателя, чтобы модуль WinLIRC можно было отнести дальше от управляемого устройства. Простейшее решение - в применении транзисторного ключа, работающего на последовательно соединенные светодиод и токоограничительный резистор, который, в свою очередь, зашунтирован конденсатором. Величина емкости конденсатора зависит от параметров светодиода. Идея же заключается в том, что светодиод питается короткими импульсами большого тока. Любой светодиод допускает кратковременную подачу импульсов тока, во много раз превышающего средний допустимый. Скважность импульсов при этом зависит от конкретного типа прибора и может меняться от 100 для одних типов светодиодов до 3 для других.

Практическое применение триака в модулях системы

Советы радиолюбителю Comments Off

Хотя на протяжении всей книги я старался подчеркнуть, что все модули системы, как и сама система, предназначены для проведения экспериментов за компьютером или за столом, думаю, среди читателей найдутся желающие воплотить в жизнь отдельные модули или на базе предложенных модулей создать свою систему. Для тех, кто знаком с техникой безопасности и может работать с напряжением -220 В, в справочной части книги я хочу привести несколько практических советов по применению триака в модуле управления светом.Для этих целей вполне подойдет триак Q6025L6, Х44081 или аналогичный. В реальных конструкциях, с которыми мне приходилось сталкиваться, вполне успешно работают триаки с допустимым напряжением 400 В в закрытом состоянии, но лучше использовать 600-вольтовый вариант, если есть возможность выбора.Второе, о чем мне хотелось бы сказать, - это способ управления. Ниже я привожу реальную схему включения оптопары (рис. П.7). Включение диммера начинается с реле, контакты которого КР подключают нагрузку. Кроме тех соображений, которые мне не ведомы, подобное подключение обеспечивает большую электрическую безопасность. В Интернете есть статьи по тиристорному управлению, и, прежде чем принимать окончательное решение, я советую почитать рекомендации по выбору коммутатора. Или поискать эту информацию в литературе.

ИК-датчик движения

Советы радиолюбителю Comments Off

Схема датчика взята из Интернета. Приведена схема, скорее, для ознакомления, чем для повторения.
Пироэлектрический сенсор изготовлен из кристаллического материала, который генерирует поверхностный электрический заряд, когда подвергается нагреву ИК-излучением. Изменяющееся количество заряда может быть измерено чувствительным FET-устройством, встроенным в сенсор. Элементы сенсора чувствительны к излучению в широком диапазоне, так что в корпус ТОб добавлен светофильтр для ограничения проникающего излучения диапазоном от 8 до 14 мкм, который наиболее подходит для обнаружения излучения от тела человека.
Как правило, вывод 2 FET соединен через отводящий резистор примерно в 100 кОм с общим проводом. И приходит на двухполярный усилитель, имеющий цепь ограничения сигнала. Усилитель обычно бывает фильтрующим с частотой среза 10 Гц для удаления высокочастотных ыгумов и сопровождается компаратором, реагирующим как на положительные, так и на отрицательные переходы выходного сигнала сенсора.