Операторы анализа условий для платформы Arduino. Порты ввода-вывода

Изучение условий и операторов сравнения, аналоговых портов ввода и вывода, их назначения. Анализ цикла как многократного прохождения по одному и тому же коду программы. Анализ существующих операторов сравнения, изучение синтаксис цикла for и while.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 06.04.2019
Размер файла 159,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Лабораторная работа №4

Тема: Операторы анализа условий для платформы Arduino. Порты ввода-вывода

Тема: Операторы анализа условий для платформы Arduino. Порты ввода-вывода

Цель: изучить условия и операторы сравнения, циклы, аналоговые порты ввода и вывода, их назначение

1. Условия и операторы сравнения

Существуют следующие операторы сравнения:

> - больше;

< - меньше;

== - равно;

!= - не равно;

>= - больше, или равно; <= - меньше или равно.

Для задания логики нашему приложению применяются условные конструкции, такие как if, if..else.

Оператор if ("если" с англ.) имеет следующую структуру: if (логическое выражение) {

//блок кода } Что же означает данная конструкция?

Конструкция if осуществляет выполнение блока кода, расположенного в следующих за ним операторных скобках {}, при истинности логического условия. В случае, когда условие принимает значение "ложь" - код расположенный в операторных скобках игнорируется. Рассмотрим более наглядный пример.

if (a>5) { b=3; c=b+1; }

Если число в переменной с именем a больше 5, то выполнится код b=3; c=b+1; а значит, в переменную b попадет число 3 и в переменную с попадет число b и еще добавится единичка, т.е. будет 4.

Если после if мы не укажем скобок, то это означает, что к оператору if попадает под действие только одна команда.

if (a>5) b=3; c=b+1;

Такая запись означает, что b=3; выполнится только если a больше 5. А вот c=b+1; выполнится всегда, независимо от результатов сравнения переменной а с числом 5.

Опционально после if может следовать оператор else ("иначе" с англ.). Конструкция с else имеет следующий вид:

if (логическое выражение) {

//блок кода

} else {

//блок кода

}

В случае ложности логического выражения, будет выполнен блок кода, идущий в операторных скобках после else.

if (a>5) { b=3;

c=b+1; } else { b=4;

c=b+2; }

Если число в переменной с именем a больше 5, то выполнится код b=3; c=b+1; а значит, в переменную b попадет число 3 и в переменную с попадет число b и еще добавится единичка, т.е. будет 4. Если же число в переменной с именем a не больше 5, то выполнится код b=4; c=b+2; а значит, в переменную b попадет число 4 и в переменную с попадет число b и еще добавится два, т.е. будет 6.

2. Циклы

Цикл -- многократное прохождение по одному и тому же коду программы. Циклы необходимы программисту для многократного выполнения одного и того же кода, пока истинно какое-то условие. Если условие всегда истинно, то такой цикл называется бесконечным, у такого цикла нет точки выхода. Итерацией цикла называется один проход этого цикла.

При использовании цикла for (рис.17) необходимо задать три параметра (в круглых скобках через точку с запятой).

for(i=0; i<5; i++)

{

// Тело цикла … }

Первый параметр - начальное значение переменной, задается в виде присваивания переменной значения, в нашем случае i=0.

Второй параметр - конечное значение переменной, задается в виде условия на значение переменной. Цикл будет исполняться, пока условие истинно, в нашем случае условие i<5 означает, что переменная i будет принимать значения до 5, не включая число 5.

Третий параметр - шаг изменения переменной. Запись i++ означает, что переменная i будет увеличиваться на 1 с каждым новым исполнением цикла, запись i-- - уменьшаться.

Размещено на http://www.allbest.ru/

Рисунок 17 - Цикл for

Как будет выполняться этот цикл? Сначала переменной i присвоится значение 0. Потом проверится условие i<5. В нашем случае 0<5 и условие будет истинно. Значит, последовательно выполнятся все команды внутри этого цикла. После окончания выполнения тела цикла произойдет выполнение i++. Т.е. i станет равным 1. Опять проверится условие i<5. И так далее. Всего тело цикла выполнится 5 раз. При этом i будет принимать значения 0,1,2,3,4. Как только закончится пятое выполнение тела цикла i станет равной 5. Условие i<5 станет ложным и тело цикла выполняться уже не будет. Цикл будет окончен и начнут выполняться команды, следующие за ним.

Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while. Синтаксис цикла while выглядит следующим образом:

while (условие )

{

// Тело цикла.

}

Тут тело цикла будет выполняться пока условие будет истинно. while (i<128)

{ i=i*2;

}

3. Порты ввода-вывода

Каждый из 14 цифровых портов ввода/вывода (D0-D13) может быть портом ввода или портом вывода. Что это означает? Когда порт является портом вывода, то мы можем подавать на него напряжение или убирать его. Когда мы подаем на него напряжение, то на этом порте появляется напряжение чуть меньше 5 вольт. Причем максимально мы можем забрать ток в 40 миллиампер. Это не очень много- лампочкам и двигателям не хватит этого тока, но для светодиодов или датчиков этого тока вполне хватает. Когда мы убираем с порта напряжение, на порте оно пропадает и становится близким к 0 вольт. В случае с подачей напряжения, мы можем говорить о высоком уровне (HIGH, или «1») на порте вывода. Если напряжение убрано - это низкий уровень напряжения(LOW, или «0»).

В случае, если порт является портом ввода, то мы можем определить есть ли там напряжение, получая в результате (HIGH, или «1») или его там нет (LOW, или «0»).

Настроить порт на ввод или вывод мы можем с помощью функции pinMode (). Функция - специальный кусочек программы, который выполняет какое-то законченное действие. Например, pinMode ( ) настраивает порт на вход или выход.

Чтобы сконфигурировать порт номер 13 (D13) как порт вывода, в программе необходимо написать (вызвать функцию) pinMode (13, OUTPUT);

Чтобы сконфигурировать порт номер 13 (D13) как порт ввода, необходимо вызвать функцию pinMode (13, INPUT);

Когда порт настроен на вывод, мы можем подавать или убирать напряжение. Чтобы подать на вывод номер 13(D13) напряжение 5 вольт, нужно вызвать функцию digitalWrite (13, HIGH);

Или, что то же самое, digitalWrite (13, 1);

Чтобы убрать на выводе номер 13 напряжение, нужно вызвать функцию

digitalWrite (13, LOW); или

digitalWrite (13, 0);

Как только микроконтроллер дойдет до выполнения этой строчки, почти мгновенно напряжение сразу же пропадет. Обратите внимание, что микроконтроллер выполняет все функции и команды последовательно. Поэтому сначала всегда нужно настроить порт на ввод или вывод, а только потом подавать напряжение, убирать или проверять на нем напряжение. Если пытаться убрать напряжение с порта, на котором и так оно уже убрано, то ничего страшного не произойдет. Ничего страшного не произойдет, если подать напряжение на порт с уже поданным напряжением.

Вместо цифры 13 может быть любой порт от 0 до 13. Также могут быть использованы аналоговые входы от A0 до A5- вместо числа пишем, например, A3. A6 и A7 не могут использоваться в качестве цифровых входов или выходов.

Но почему же мы заговорили о числе 13? Да просто на плате Ардуино уже установлен светодиод, подключенный к порту 13. И если мы подаем туда напряжение- то светодиод загорится. Уберем напряжение- светодиод погаснет. Очень удобный способ проверить есть ли там напряжение.

По умолчанию все порты Arduino сконфигурированы как порты ввода. Это значит, что если вы хотите считать данные с порта номер 13, нет нужды сначала вызывать функцию pinMode (13, INPUT); и настраивать нужный порт на ввод.

Чтобы считать напряжение с порта вывода номер 13, нужно вызвать функцию val=digitalRead (13);

которая возвращает число 0 или 1, в зависимости от входного напряжения, поданного в порт 13. Это число заносится в переменную с именем «val». Причем, если напряжение меньше 1 вольта- то функция вернет число 0. Если напряжение больше 2,5 вольт, то вернет число 1. Промежуточное значение от 1 до 2,5 вольт может выдать неопределенные значения, зависящие от многих условий. Поэтому для получения точных значений следует избегать подачи напряжение между 1 и 2,5 вольтами на вход.

Внимание! На вход нельзя подавать напряжение больше 5 вольт. Это приведет к выходу из строя платы Ардуино.

Обратите внимание, что в конце каждой функции стоит точка с запятой. Это признак окончания команды или функции. Если пропустить этот знак препинания, то компьютер не поймет написанную программу и выдаст ошибку.

3.1 Аналоговые порты ввода

Итак, мы уже научились подавать и считывать напряжение, равное 0 или 5 В. Но иногда требуется получить промежуточные значения напряжения, например, чтобы плавно менять обороты мотора или считывать значение с аналогового датчика освещенности, расстояния и т. д.

Внутри Ардуино находится аналогово-цифровой преобразователь (АЦП). У Ардуино 8 входов(A0-A7), к которым может подключаться этот единственный АЦП. Он измеряет напряжение на подключенном входе и переводит его в число. Напряжение может быть от 0 до 5 вольт. При этом АЦП переводит 0 вольт в число 0, а 5 вольт в число 1023. Все промежуточные значения соответствуют промежуточным числам. Например, 2,5 вольта будет соответствовать числу 511. Таким образом, весь диапазон в 5 вольт делится на 1024 кусочка. Каждый кусочек будет соответствовать 5/1024=4,88 милливольтам. Если мы получили число 300, то мы его умножаем на 4,88 и получаем 1,46 вольта. Это означает, что АЦП измерил на входе напряжение в 1,46 вольта.

Число с АЦП может быть получено с помощью вызова функции val = analogRead(A0);

При этом в переменную «val» будет помещено число, которое вернул нам АЦП после измерения напряжения на аналоговом входе A0. Число может быть любым от 0 до 1023, в зависимости от напряжения на входе A0.

Если последовательно читать напряжение с разных входов, то необходимо делать задержку перед каждым чтением в 10-40мкс для обеспечения корректности полученных данных.

3.2 Аналоговые порты вывода

Напрямую получать напряжение с портов Ардуино не получится. Для этого нужен узел, который называется цифроаналоговый преобразователь (ЦАП). Он превращает записанное в него число в напряжение по тому же принципу, что и АЦП.

Узел ЦАП есть только в Arduino Due, но и его тяжело назвать полноценным - выдает напряжение только от 0,6 вольт до 2,4 вольт. Т.е. от 0 вольт он не работает. Остальные Ардуино не могут похвастаться наличием даже такого ЦАПа. Но не беда - есть много способов обойти это препятствие. Один из способов - это широтноимпульсная модуляция (ШИМ, PWM) - веселая штука, и особенно забавно с ее помощью управлять сервомоторами и трехцветным светодиодом. Это позволит управлять его цветом и яркостью.

ШИМ - это управление средним значением напряжения на нагрузке путём изменения скважности импульсов, подаваемых на нагрузку. В ШИМ частота импульсного (прямоугольного) сигнала постоянная, а скважность (отношение периода следования импульса к его длительности) переменная. С помощью изменения скважности импульсов можно менять среднее напряжение на выходе ШИМ.

Теперь разберемся, что это значит. Пусть есть обычный такой прямоугольный сигнал:

Размещено на http://www.allbest.ru/

Рисунок 18 - ШИМ заполнением 50 процентов

Он имеет фиксированную частоту и заполнение 50% (рис.18). Это означает, что половину периода напряжение максимально, а другую половину оно равно нулю. Проинтегрировав этот сигнал за период, мы увидим, что его энергия равна половине максимальной. Это будет эквивалентно тому, как если бы мы все время подавали половину напряжения.

Так как напряжение пропадает и появляется на очень короткое время, то человеческий глаз не заметит мерцаний подключенного светодиода, а просто усреднит его яркость.

Если у нас максимальное напряжение равно 5 вольт, то напряжение, получаемое на выходе ШИМ равно заполнение умножить на 5 вольт и делить на 100%.

Arduino позволяет записать на ШИМ - выход значение от 0 до 255, а это значит, что мы можем получить напряжение с шагом примерно 20 милливольт - от 0 до 5 вольт (рис.19).

Частота ШИМ на Arduino - примерно 490 Гц. На плате Arduino Nano выводы, которые могут быть использованы для ШИМ - 3,5,6,

9, 10 и 11. На плате к этому может быть подсказка - шелкографией перед номерами ШИМ - выводов есть тильда или диез.

Размещено на http://www.allbest.ru/

Рисунок 19 - ШИМ с разным заполнением

Для управления ШИМ на Arduino используется одна единственная функция analogWrite(3, 255);

где 3 - номер вывода(3,5,6, 9, 10 и 11), а 255 значение для ШИМ - любое от 0 до 255. При этом порт можно предварительно не настраивать на выход.

На сконфигурированном однажды выходе будет постоянно присутствовать сигнал ШИМ частотой 490 Гц с заданными параметрами до следующего вызова функции analogWrite() (или digitalRead(), или digitalWrite()) для этого же вывода микроконтроллера.

Одновременно можно формировать ШИМ для всех указанных выходов.

Жаль, конечно, что нельзя управлять 13 выводом, к которому уже подключен светодиод. Так бы удалось управлять его яркостью от выключенного состояния при значении ШИМ 0 до максимальной яркости при значении ШИМ 255.

Контрольные вопросы

цикл оператор сравнение while

1. Перечислите существующие операторы сравнения.

2. Какие операторы анализа условий применяются в программировании для Arduino?

3. Поясните синтаксис оператора if - else

4. Введите понятие цикла

5. Какие циклы применяются при программировании для Arduino?

6. Поясните синтаксис цикла for и while

7. Аналоговые порты ввода и вывода

Размещено на Allbest.ru

...

Подобные документы

  • Анализ операторов ввода и вывода, а также характеристика форматов, используемых в этих операторах. Оформление законченной программы с применением этих операторов. Структура программы. Алфавит языка и типы данных. Ввод и вывод информации. Форматный вывод.

    лабораторная работа [62,0 K], добавлен 15.07.2010

  • Программирование линейных алгоритмов. Процедуры ввода READ и READLN и вывода WRITE и WRITELN. Примеры решения задач на языке Паскаль. Оператор присваивания и выражения. Основные способы формирования структурных операторов. Операторы вызова процедур.

    курсовая работа [44,3 K], добавлен 18.03.2013

  • Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.

    курсовая работа [400,6 K], добавлен 10.11.2016

  • Понятие и характеристика операторов ввода и вывода информации, случаи их применяется в программах и основные виды: составной оператор Begin ... end, условный оператор If. Суть операторов безусловного перехода и циклических процессов, примеры применения.

    реферат [27,9 K], добавлен 03.03.2010

  • Изучение подсистемы ввода-вывода и файловой системы ОС семейства Windows NT. Анализ особенностей работы приложения TotalCommander и его взаимодействия с файловой системой и подсистемой ввода-вывода. Взаимодействие TotalCommander с сетевыми адаптерами.

    лабораторная работа [1,1 M], добавлен 12.06.2012

  • Основные виды загрузки. Приемы работы в ТР: процесс отладки. Команды редактирования отладки программ с помощью командного меню Pascal. Составление программы с использованием простых операторов ввода, вывода. Сравнения с текстовыми и числовыми условиями.

    отчет по практике [134,7 K], добавлен 02.09.2010

  • Проектирование модуля ввода/вывода аналоговых, дискретных и цифровых сигналов, предназначенного для сбора данных со встроенных дискретных и аналоговых входов с последующей их передачей в сеть. Расчет временных задержек. Выбор резисторов на генераторе.

    курсовая работа [307,1 K], добавлен 25.03.2012

  • Особенности применения светодиодной индикации в микроконтроллерных системах. Характеристика основных приемов программирования универсальных портов ввода-вывода микроконтроллеров AVR. Этапы проектирования елочной гирлянды с микроконтроллерным управлением.

    лабораторная работа [291,7 K], добавлен 17.11.2012

  • Использование программой функции ввода-вывода данных для реализации дружественного интерфейса с пользователем. Функции консоли и особенности их применения для обеспечения аккуратного ввода информации и упорядоченного вывода. Обзор стандартных функций.

    лабораторная работа [40,4 K], добавлен 06.07.2009

  • Изучение приемов использования операторов ветвления и операторов циклов в С. Управляющие структуры или операторы управления: их значение для управления последовательностью вычислений в программе. Блоки и составные операторы. Универсальный оператор цикла.

    лабораторная работа [17,7 K], добавлен 06.08.2010

  • Изучение циклических операторов: оператора цикла, управляемого счетчиком, оператора цикла с предусловием и постусловием. Минимизированные функции, текст программы. Алгоритм работы приложения по нахождению функции с помощью операторов break и continue.

    лабораторная работа [474,2 K], добавлен 23.11.2014

  • Предназначение цикла for - оформление циклов (набора действий) с заданным количеством повторений. Пример программы, выводящей на экран все целые числа от 0 до 99. Решение задачи с помощью двух алгоритмов, используя известные функции ввода-вывода.

    лабораторная работа [35,1 K], добавлен 15.07.2009

  • Организация и назначение консольного ввода-вывода, необходимые для этого функции и их применение. Библиотеки, организующие функционирование потокового ввода-вывода, выполняемые операции. Арифметические операции и математические функции в среде С++.

    лабораторная работа [33,8 K], добавлен 15.07.2009

  • Использование стандартных библиотек Windows. Установка и настройка дополнительных устройств ввода/вывода. Использование камеры, динамиков, сканера, дисков и портов ввода/вывода. Драйверы внешних устройств. Безопасность данных в операционных системах.

    контрольная работа [1,8 M], добавлен 13.10.2022

  • Отличительные особенности микроконтроллеров AVR семейства Mega. Характеристики процессора, подсистемы ввода-вывода. Архитектура ядра и организация памяти. Регистры общего назначения. Алгоритмы моделирования команд. Реализация модели внешнего устройства.

    курсовая работа [3,7 M], добавлен 24.06.2013

  • Изучение системной поддержки, применения, конфигурирования параллельного (LPT) и последовательного (СОМ) интерфейсов ввода-вывода компьютерных систем, проведение их технической диагностики, устранение неисправностей. Разработка собственных устройств USB.

    дипломная работа [7,3 M], добавлен 10.07.2010

  • Изучение и проектирование автоматического интерфейса ввода-вывода, состоящего из канала измерения в указанных пределах и канала управления напряжением в определенном диапазоне с максимальной приведенной погрешностью и ограниченным временем измерения.

    контрольная работа [93,1 K], добавлен 31.08.2010

  • Понятие логических выражений, их назначение в создании алгоритмов. Список операторов сравнения, используемых в табличном редакторе Excel. Синтаксис функции "если" и примеры ее использования. Логические операторы "и", "или", "не", "истина", "ложь".

    презентация [108,9 K], добавлен 07.03.2013

  • История создания и применение языка Basic. Стандартные математические и строковые функции. Операции и выражения языка. Блоки данных и подпрограммы. Операторы управления, цикла, ввода-вывода и преобразования информации. Константы, переменные, массивы.

    контрольная работа [2,3 M], добавлен 04.05.2015

  • Периферийные устройства ввода-вывода информации, перспективы их развития. Мышь, джойстик, тачпад, клавиатура, web-камеры, сканер, мониторы и принтеры. Устройства бесконтактного ввода. Сенсорный экран, "интеллектуальная" среда. Стереодисплеи и 3D принтеры.

    курсовая работа [4,8 M], добавлен 06.11.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.