vivaos

vivaos

пикабушник
пол: мужской
поставил 1880 плюсов и 57 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
18К рейтинг 1555 подписчиков 483 комментария 69 постов 31 в "горячем"
3 награды
5 лет на Пикабуболее 1000 подписчиков лучший авторский пост недели
511

Arduino для начинающих - Прерывания по таймеру в Arduino (AVR). Создаем многозадачное устройство

Вот и подоспел 11-й выпуск из серии "Arduino для начинающих"!😊

В этом видео мы будем говорить о прерываниях. А конкретно, о прерываниях по таймеру. О том, как сделать ваши программы более гибкими и избавиться от пресловутой функции delay(), которая, по сути, останавливает работу всего микроконтроллера.

Материалы к видео находятся здесь.


Список остальных выпусков:

#0 Введение в курс. Чего ожидать от этой серии для начинающих.

#1 Немного электроники и схемотехники – без них никуда.

#2 Знакомство с Arduino. Основные компоненты для начала работы.

#3 Arduino изнутри - структура, составляющие и их назначение. Микроконтроллер Atmega328P

#4 Arduino IDE Настройка и установка драйверов. Проверка работоспособности платы Arduino

#5 Первая программа – работаем со светодиодом и кнопкой.

#6 Условные операторы и циклы.

#7 Логические операции И, НЕ, ИЛИ.

#8 Функции и их применение.

#9 Библиотеки - как с ними работать и создать свою собственную.

#10 Передача и прием данных. Библиотека Serial и коды ASCII


Удачных компиляций! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим сюда.

45

Пост взаимопомощи в суровом мире электронных устройств

Господа, очередной пост "ВиО" для взаимного решения ваших проблем в работе с Arduino или Raspberry Pi. Знающие - подсказываем, не знающие - спрашиваем! :)

Пост взаимопомощи в суровом мире электронных устройств Arduino, Raspberry pi, Помощь, Вопрос-Ответ, Бойцовский клуб
217

Arduino для начинающих - Передача и прием данных. Библиотека Serial и коды ASCII

Это 10-й выпуск курса "Arduino для начинающих", сегодня мы поговорим о том, как пользоваться последовательным монитором порта – получать, отправлять различные данные, в общем, общаться со своим устройством и управлять им.

Список остальных выпусков:

#0 Введение в курс. Чего ожидать от этой серии для начинающих.

#1 Немного электроники и схемотехники – без них никуда.

#2 Знакомство с Arduino. Основные компоненты для начала работы.

#3 Arduino изнутри - структура, составляющие и их назначение. Микроконтроллер Atmega328P

#4 Arduino IDE Настройка и установка драйверов. Проверка работоспособности платы Arduino

#5 Первая программа – работаем со светодиодом и кнопкой.

#6 Условные операторы и циклы.

#7 Логические операции И, НЕ, ИЛИ.

#8 Функции и их применение.

#9 Библиотеки - как с ними работать и создать свою собственную.


Всем, как обычно, удачных компиляций! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим: http://pikabu.ru/community/arduino

244

Библиотеки - как с ними работать и создать свою собственную. Драйвер двигателей L298N и ШИМ-сигнал

Привет, друзья ардуинщики! :)

Это выпуск #9 из серии видео "Arduino для начинающих" и в нем мы затронем тему создания библиотек, а также немного разберемся с тем, что такое ШИМ-сигнал и заставим двигаться колеса робота благодаря драйверу двигателей L298N.

Список остальных выпусков:

#0 Введение в курс. Чего ожидать от этой серии для начинающих.

#1 Немного электроники и схемотехники – без них никуда.

#2 Знакомство с Arduino. Основные компоненты для начала работы.

#3 Arduino изнутри - структура, составляющие и их назначение. Микроконтроллер Atmega328P

#4 Arduino IDE Настройка и установка драйверов. Проверка работоспособности платы Arduino

#5 Первая программа – работаем со светодиодом и кнопкой.

#6 Условные операторы и циклы.

#7 Логические операции И, НЕ, ИЛИ.

#8 Функции и их применение.


Удачных компиляций и с праздником вас! :)


P.S.: Если вы еще не состоите в сообществе "Arduino & Pi", милости просим: http://pikabu.ru/community/arduino

Выпуск 9. Библиотеки и последовательный Serial-порт. Школа Integer - Основы Arduino для начинающих

Привет начинающим ардуинщикам! :)


Да, мне самому не верится, но таки вышел девятый выпуск серии Arduino для начинающих!


В нем мы затронем сразу две темы – это использование различных библиотек и последовательного монитора порта платформы Arduino.


Предыдущие выпуски вы найдете здесь: 0,1,2,3,4,5,6,7,8

35

Совершенно новая посудомойка отказывалась набирать воду, вскрытие показало..

..показало, что дело в этой треснутой пластмассовой емкости, которая, при подаче воды, полностью заполнила поплавковую камеру снизу и сработал датчик протечки :(

Совершенно новая посудомойка отказывалась набирать воду, вскрытие показало.. Ремонт техники, Посудомоечная машина, Hansa, Длиннопост

Вид со стороны трещины:

Совершенно новая посудомойка отказывалась набирать воду, вскрытие показало.. Ремонт техники, Посудомоечная машина, Hansa, Длиннопост

Отсюда возникло пару вопросов к знающим ремонтерам: как называется сия емкость? Есть ли смысл заказывать и ставить ее самому, и в какую сумму это примерно обойдется?


Заранее благодарю всех откликнувшихся! Комментарий для минусов внутри.

Показать полностью 2
162

#8 Функции и их применение. Основы Arduino для начинающих

Привет начинающим ардуинщикам! :)


После небольшого перерыва, наконец-то готова 8-я видео-статья из цикла «Основы Arduino для начинающих» и сегодня мы поговорим о таком важном инструменте в арсенале программиста, как функции. Научимся с ними работать и использовать их в своем коде.


Предыдущие выпуски вы найдете здесь: 0,1,2,3,4,5,6,7


Видеоверсия поста:

Прежде чем переходить к изучению синтаксиса и построения функций, давайте сделаем для себя обоснование их использования. Представьте, что вы работаете над проектом, например, «умного дома», где каждый из датчиков выполняет свою роль, а ваш код связывает эти датчики в единую систему. Допустим, что у нас есть датчики освещенности, движения, температуры, влажности и LCD дисплей, куда мы выводим какую-либо информацию. Каждому из этих отдельных устройств соответствует некоторая часть кода, где происходит считывание, обработка и сохранение показаний с наших датчиков, а так же вывод каких-либо показателей на дисплей.


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Гораздо удобнее будет разбить нашу систему и её код на отдельные выполняемые ими функции. Например, датчику освещенности сопоставить функцию измерения освещенности, датчику температуры – измерение температуры и так далее. В результате мы получим некоторый список функций, с которыми уже будет гораздо проще работать и осуществлять различные манипуляции.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Удобство функций также заключается в том, что мы можем передавать и получать от них какую-либо информацию. К примеру, у нас есть функция вывода информации на дисплей, которую мы можем настроить на прием каких-либо символов. Тогда в основном коде вам останется только указать имя функции и необходимый текст, который вы желаете вывести на экран, а дальше уже не отвлекаться на не нужную часть кода по выводу этого текста на дисплей.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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


Для начала возьмем очень простую задачу. Допустим, что в вашей программе часто (а говоря часто, я имею в виду 2 и более раза), приходится использовать один и тот же фрагмент кода - например, зажигать несколько светодиодов и подавать сигнал в зависимости от состояния какого-либо пина. Можно пойти по сложному пути и всякий раз писать лишние строки в те места кода, где это понадобится, а можно всего один раз написать функцию и затем вызывать ее в нужных местах – что мы сейчас и сделаем.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Простейшая функция выглядит следующим образом:

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Она записывается вне основной функции loop и имеет такую же конструкцию. Помните, я говорил, что функция может, как принимать какую либо информацию, так и возвращать результат своей работы. Так вот, ключевое слово void означает, что наша функция не будет возвращать никаких данных в результате своей работы, поскольку в ней мы не будем производить какие-либо вычисления или считывания и нам не нужна обратная связь с этой функцией. Так как функция не только не возвращает результат, но и не принимает информацию, то ее скобки мы оставляем пустыми, что эквивалентно тому, если бы мы написали в них void.


Итак, заготовка простейшей функции готова и в ней уже написан необходимый нам код.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Давайте посмотрим, как же вызывать эту функцию в основном цикле программы. На самом деле, все так же просто – вам нужно указать имя этой функции и обязательно не забыть про круглые скобки и точку с запятой. Так как функция ничего не принимает, то мы так же оставляем скобки пустыми.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Теперь, если представить что мы программа, то алгоритм работы будет такой: сначала, как и обычно, происходит запуск микроконтроллера и его настройка в функции setup, затем мы переходим в функцию loop и затем, попадая на строчку вызова нашей функции, переходим в эту функцию. В ней так же строка за строкой выполняется каждая команда и, по окончанию функции, осуществляется выход из нее обратно на то место, откуда был осуществлен вызов.


Мы можем объявить еще одну функцию и так же сделать ссылку на нее – как видите, основная программа теперь не загромождена лишними строками кода, а мы видим лишь названия функций, прочитав которые понимаем, что происходит в этой функции.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


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


Что бы использовать эту возможность, теперь в пустых скобках мы должны указать тип и имя переменной, которая будет отвечать за номер пина. Назовем её, например, numberPin и дадим ей тип byte, который может нести в себе число от 0 до 255.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Теперь, обращаясь к функции, мы так же обязаны указать в круглых скобках число от 0 до 255 и если этого не сделать, то компилятор выдаст вам ошибку, так как функция теперь обязана принимать какое-либо значение. В нашем случае мы будем указывать номер пина, с которым хотим работать, поставим, например, цифру 4.


Чтобы код, написанный внутри нашей функции, стал таким же универсальным, на том месте, где до этого мы писали конкретный номер пина для считывания, теперь необходимо указать переменную nomberPin, которая подставит сюда такое число, какое мы передали при обращении к функции – в нашем случае это цифра 4, то есть 4-й пин.


Давайте еще раз повторим, что теперь у нас будет происходить при таком объявлении функции. Программа, попадая на строку вызова функции, запоминает число, указанное в скобках, и передает это число функции, где значение этого числа присваивается указанной нами переменной numberPin. Теперь, как и в обычном коде, на всех местах, где встретится эта переменная будет подставляться наше число, которое мы передали функции. Таким образом, в основном коде программы мы можем вызывать одну и ту же функцию несколько раз, при этом указывая необходимый нам пин в ее круглых скобках.


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

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

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


Итак, мы научились сообщать функции какие-либо данные для работы. Давайте посмотрим, каким образом осуществляется возврат результата вычисления функцией.


При определении функции мы указали, что возвращаемый ею тип является void, то есть она ничего не возвращает. Изменим void, например, на тип byte и теперь в функции мы обязаны указать возврат какого-либо результата ее вычисления. Для того, что бы функция вернула какое-то значение, существует оператор return, и запись, например, return 5 означает, что наша программа, дойдя до этого момента, сделает выход из функции, при этом запомнив результат равный 5.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Вместо конкретного числа вы можете подставлять значения различных переменных, которые использовались в функции, например, это может быть считанное состояние цифрового или аналогового пина микроконтроллера. Что бы в дальнейшем работать с этим значением, мы должны присвоить его какой-либо переменной в коде, а саму запись функции вы можете представлять себе как преображение в то число, которое она возвращает. Например, можно объявить переменную result, то есть результат, и написать, что result присвоить значение нашей функции.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Тогда программа, дойдя до этого момента, будет поступать так – она переходит в указанную нами функцию, выполняется там, доходит до оператора return и запоминает значение, которое мы указали. Это значение она записывает по адресу переменной result. Теперь result равен тому числу, которое возвращает наша функция.

Что бы закрепить сегодняшний материал, попробуйте реализовать самостоятельно такой пример – пусть это будет своеобразная система для контроля бдительности машиниста поезда. Если машинист видит мигание лампочки, то он должен нажать на кнопку, что бы подтвердить что он бодрствует, если же этого не происходит, система начинает издавать звуковой сигнал, дабы разбудить нашего машиниста.

Чтобы вам было проще, разберем, что же должна делать наша программа: запуская алгоритм, через какой-то интервал времени происходит сигнализация, например, двойным миганием светодиода, после которой, спустя задержку в одну секунду, необходимо нажать на кнопку, то есть осуществить считывание сигнала с цифрового порта микроконтроллера. Затем, если состояние порта равно единице, то есть кнопка не нажата, происходит уведомление об этом звуковым сигналом и система будит машиниста, если сигнал порта равен нулю, то кнопка нажата, оповещения не происходит и через некоторое время можно повторить проверку бдительности.

#8 Функции и их применение. Основы Arduino для начинающих Arduino, Функция, Программирование, Видео, Длиннопост

Обязательно поделитесь своими успехами или вопросами в комментариях, ну а на этом про функции все, спасибо за то, что дочитали до конца и до встречи в 9-м выпуске! ;)

Показать полностью 14
83

Дорогие друзья, с Новым, 2017 Годом вас!

От лица администратора сообщества "Arduino&Pi" хочу поздравить всех ардуинщиков, программистов, а так же других пикабушников с наступающими праздниками! Пусть в новом году исполнятся все ваши самые заветные желания, проекты удачно компилируются, а интересные идеи никогда не покидают вашу голову :)

С праздником, друзья!

P.S.: В комментариях к этому посту, как и обычно, можно задавать свои вопросы и помогать другим

Дорогие друзья, с Новым, 2017 Годом вас! Arduino, Raspberry pi, Новый Год, Поздравление, 2017
45

Рубрика "Вопросы и ответы" вновь к вашим услугам :)

Совсем забылась наша традиционная рубрика "ВиО", нужно это исправлять.. Надеюсь, за это время у вас накопилось много вопросов, а так же большое желание помочь другим ;)

Тем, у кого возникает вопрос по поводу картинки, сюда. А у вас была какая-то тактика с самого начала? :)

Рубрика "Вопросы и ответы" вновь к вашим услугам :) Вопрос-Ответ, Вио, Помощь, Arduino, Raspberry pi, Тактика
123

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих

И снова здравствуйте! :)


Это седьмая видео-статья из цикла «Основы Arduino для начинающих» и сегодня мы поговорим о таком важном понятии, как логические операции, без которых не обойтись при решении практически любой задачи.


Предыдущие выпуски вы найдете здесь: 0,1,2,3,4,5,6


Видеоверсия поста:

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


Фраза логический (он же булевский) тип выражения означает, что это выражение может принимать только два значения – ложь или истина, 0 или 1. Если мы укажем переменной, что она имеет тип bool (boolean), то, как ни крути, значения, которые она сможет в себе нести, будут либо 0, либо 1. Помните, в предыдущих выпусках мы составляли условия, в зависимости от истинности или ложности которых происходили какие-либо действия – как раз тогда мы уже работали с булевыми выражениями.


Итак, кажется, теперь становится более понятной первая строчка определения – логическая операция, это операция над выражениями логического (булевского) типа. Теперь со второй частью об операциях алгебры логики.


Каждый из вас помнит уроки математики в школе, где мы работали с числами в привычной для нас, десятичной системе счисления – то есть с цифрами от 0 до 9. Но мир логики, если так можно сказать, отличается от нашего, ведь там все значения имеют только два состояния - 0 или 1, отсюда и возникает потребность в специальной математике для работы с логическими выражениями. Эта математика носит название «алгебра логики».


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


Операция сложения, она же операция дизъюнкции либо логическое ИЛИ. Многие из вас помнят, что в прошлом выпуске, при изучении циклов и условий, мы брали примеры с автобусами и остановкой, давайте снова разберем такой пример – наверное, вы замечали, что в относительно новых автобусах по салону распределены кнопки требования остановки. При нажатии на такую кнопку у водителя на приборной панели загорается лампочка и звучит сигнал требования остановки.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Давайте попробуем реализовать такую же систему на Arduino – возьмем, например, три кнопки и подключим их к микроконтроллеру, а так же добавим в схему светодиод и, при наличии, пьезо-извещатель.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Алгоритм работы такой системы достаточно прост и схож с тем, что мы писали для одной кнопки и светодиода, но, в данном случае возникает одна проблема - у нас не одна кнопка, для которой можно написать условие, а целых три. И при нажатии любой из кнопок у нас должен звучать сигнал и гореть светодиод. Что же делать? Можно, конечно, написать три отдельных условия для контроля каждой из кнопок, но код в таком случае выглядит нагроможденным и при увеличении количества кнопок становится жутко не удобным.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Здесь нам на помощь и приходят логические операции, позволяющие составлять не одиночные условия, как мы это делали раньше, а достаточно гибкие и удобные совмещенные.

В нашей задаче необходимо включить оповещение при срабатывании первой или второй или третьей кнопки и, если вы помните, операция сложения так и называлась – логическое ИЛИ.


Давайте создадим три переменных типа boolean, в которые будем сохранять считанный сигнал от каждой из кнопок, и объединим эти переменные в одном условии, поставив между ними логическое ИЛИ. Эта операция записывается в виде двух вертикальных черточек и, что бы понять логику ее работы, давайте взглянем на так называемую таблицу истинности, где указываются операнды, над которыми совершается операция.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Два первых столбца это возможные значения на входах - например, если бы у нас было две кнопки и между ними мы производили дизъюнкцию. Как видите, при комбинации 00 итогом логического сложения так же будет 0. А вот следующая комбинация - 0 или 1 уже дает на выходе логическую единицу, так же, как и оставшиеся комбинации. Нижняя строка 11 так же выдаст единицу, поскольку мы производим сравнение двух положительных значений.


В итоге мы можем сделать вывод, что логическая операция ИЛИ выдаст единичный результат, если на любом из ее входов появится хоть одна единица. Для нашей системы мы можем составить таблицу из трех колонок и перебрать все возможные нажатия кнопок, логика останется прежней – если существует хоть одна единица – ответ будет равен одному.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


Переходим к следующей логической операции – это конъюнкция или логическое И, иначе говоря – умножение. Если предыдущая операция делала условие истинным при любой нажатой кнопке, то операция умножения потребует нажатия сразу всех кнопок и только тогда выдаст нам логическую единицу.


Более наглядно это можно увидеть по таблице истинности. Как можно заметить, если в комбинации присутствует хотя бы один ноль, то вся функция становится равной нулю.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Эта операция записывается в виде двойного амперсанда (&&), и, такой символ - &, по сути, заменяет слово И (от английского and). Таким образом, если вам понадобится сделать условие истинным при одновременно нескольких истинных событиях, то этот оператор то, что нужно.


Это можно увидеть, если заменить в предыдущем коде ИЛИ на И.

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


Также мы можем комбинировать операции сложения и умножения в одной функции. Например, нам необходимо включать оповещение только при одновременном наличии сигнала с 1-й и 2-й кнопки, или со 2-й и 3-й. Тогда условие примет вот такой вид:

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Скобками осуществляется разграничение между отдельными условиями и, по сути, сейчас у нас два условия в одном: первое – нажатие 1-й и 2-й кнопки, второе – нажатие 2-й и 3-й кнопки, что бы учесть выполнение одного из этих двух условий мы ставим между ними логическое ИЛИ.


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


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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Когда может понадобиться отрицание? Например, когда в условии нужно проверить не истинность какой-либо функции или переменной, а, наоборот, ее ложность. Но, как вы помните, например, оператор if разрешит нам попасть в тело условия, только если условие в его круглых скобках будет истинно, а не ложно, для ложного значения мы использовали else.


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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

Ну а в качестве домашнего задания, попробуйте добавить к нашей схеме еще пару кнопок и применить свои условия срабатывания оповещения - здесь важно отточить навык использования сразу всех операторов – сложения, умножения и отрицания.

Для тех, кому трудно придумать свои условия, я составил небольшую таблицу зависимостей выходного сигнала от состояния 4 кнопок. Попробуйте реализовать каждое из этих условий:

Выпуск 7. Логические операции И, ИЛИ, НЕ. Основы Arduino для начинающих Arduino, Программирование, Начинающий, Логические операции, Видео, Длиннопост

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


Ну а на этом про логические операции, пожалуй, все, не забывайте оценивать материал и писать свои пожелания и замечания, надеюсь, что вам было интересно :) Всем добра!

Показать полностью 14
Отличная работа, все прочитано!