Уроки Ардуино #3 - условный оператор if и оператор выбора
HTML-код
- Опубликовано: 11 фев 2017
- В этом уроке по программированию Ардуино я расскажу вам про условный оператор if и про оператор выбора switch.. case. Логические операторы критически важны для дальнейшей работы с платформой Arduino, вы увидите это в следующих уроках.
▼ Текстовая версия ▼
alexgyver.ru/lessons/conditions/
▼ Огромный стартовый набор GyverKIT ▼
kit.alexgyver.ru/
▼ Уроки Arduino на сайте ▼
alexgyver.ru/lessons/
▼ Модули и датчики с Али ▼
alexgyver.ru/arduino_shop/
▼ Страница "Заметок Ардуинщика" ▼
alexgyver.ru/arduino_lessons/
Теги: #arduino #уроки #ардуино #alexgyver
●●●●●●●●●●●●●●●●●●●●
► Основной канал: / alexgyvershow
► Поддержать автора alexgyver.ru/support_alex/
► Официальный сайт: alexgyver.ru/
► Почта: alex@alexgyver.ru - Наука
Спасибо, твой вклад в развитие будет неотъемлемым, человечество тебя не забудет.(не троллинг)
тоже самое и про твой троллинг!!
+yevgen Zt какой ещё тролинг?? Я всерьёз, очень понравился урок сам сижу и повторяю на своей ардуинке.
Вы Kave Gonson верно? Если то идите в apergure scince или когда выйдет portal 3
Узнал о программировании на С++ больше, чем из курса по С++
Alter Moonsy ну как сказать C++ я программирую на java и там всё также!
@@superspinner2313 потому что джава C подобный
@@hdfroggit3051 все языки имеют почти одинаковую структуру и если ты понял хоть один язык то следующие учить почти не надо будет
Спасибо тебе, собрал несколько твоих устройств, теперь дошел до уроков, просто и понятно, жму руку.
Огромадная благодарность за отличные уроки !
Случайно давным-давно попал на основной канал, так - посматривал. Зашёл сегодня сюда - и вот он, далёкий 88 год, компьютер Электроника не помню какой и почти Basic в пояснениях ))) Славное дело делаете, Алексей! Успехов вам!
как же офигенно интересно, давно облизывался что бы начать и вот, всё офигенно понятно по крайней мере если хоть отдалённо есть представление о с++
супер курсы у вас , вы молодец, все максимально подробно и неторопясь и доходчиво
Использовать boolean (bool) лучше со значениями true и false
C++ приравнивает ноль к false а любое число к true
К примеру:
bool x = 2;
if (x == 1) then {
Serial.println("истина");
} else {
Serial.println("ложь");
}
// В порт выведется слово истина, хотя присваивали двойку
Еще стоило указать возможность использования одновременно нескольких условий switch оператора:
switch (val) {
case 1:
case 2:
Serial.println("1 или 2");
break;
case 3:
Serial.println("3");
break;
}
+WakeUp4L1fe ого спасибо, это не знал. Допишу в пособие, все равно его почти все смотрят)
понимаю что еще рано, но очень жду что кто-то внятно расскажет про все интерфейсы подключений. UART I2C SPI.
Никакого смысла в типе boolean тут нет, один хрен он целый байт занимает. Проще запомнить, что всё что не равно нулю это true, а ноль это false.
Большое тебе спасибо все ясно и понятно
Вот тут уже сложнее. Каждую команду и каждое выражение пересматриваю по несколько раз, чтоб догнать о чем речь идет. Но пока мой мозг хоть с трудом, но справляется. Спасибо большое за уроки. может когдато научусь ардуинить)))
Научился?
ждем-с
Пожалуйста больше уроков, единственный канал с прекрасными объяснениями!
Круто, спасибо тебе Гувер
Ждем новых видео с нетерпением, в переди большая работа)
Друг скинул проект для светового фейер шоу в цирке на Ардуинке. Сижу разбираюсь.) Классные уроки. Спасибо тебе огромное за доступность.)
Все круто и понятно!
спасибо)
Спасибо за полезный видос. Лайк!
Супер, очень нравится.
Спасибо за видео и советы
Спасибо, лчень рада тому, что любой сможет постичь ардуино через ваши уроки)
🥵🥵🥵🥵🥵🥵🥵🥵
Спасибо брат
спасибо тебе, очень помог
Здравствуйте ! Я обучаюсь по вашим видео, очень крутой контент . Спасибо тебе землянин ) !
Подскажите, операторами if, else , else if возможно построить меню или только switch подходит ?
Просто топ!!!
Посмотрев несколько видео я понял что этот язык очень похож на java, я давно хотел изучить программирование на arduino и теперь я думаю мне будет легче освоить, так как я учу java и много чего уже знаю, очень жаль что вы не делаете уроки по программированию на java так как вы все расставляете по полочкам и все очень понятно, я для себя не могу найти понятных уроков для java, по этому я скачиваю библиотеки, проекты и пытаюсь разобраться как это работает но если что то совсем не понятно или нужно освоить какие то функции просто ищу в интернете, для меня это удобно по тому что я от начала и до конца изучаю код и запоминаю а так же добавляю какие то свои функции.
Мне лично кажется, что Ардуино схож по синтаксису и с C,C++,C#,Java. Сам учу C# и за исключением небольших отличий там все тоже самое.
спасибо за подробные объяснения!))
Прошу урока меню на OLED + Энкодер!
Кто за?
я
Спасибо автору за хорошее объяснение!
Алекс, сделай пожалуйста обзор работы мультисерво шита на 20+ серв. Желательно на примере гесапода или, лучше, октапода.
Спасибо Алекс.
Учусь можно сказать на твоих уроках)
Больше похоже на твою дипломную конечно.
Хотелось бы углубленный курс, за вменяемый прайс)
Удобней конспектировать по роликам в тюб, чем из книг, аля с кул преподом, ЛОЛ=)))
Моя дипломная - космический спутник зондирования земли) учу людей только на канале, есть уроки на сайте, лично ни с кем не занимаюсь
Нужны практические примеры. Без примеров это сухая теория, которую трудно понять
Как всегда круто и познавательно! спасибо!!!
всё понятно круто от меня подписка лайк комент и колокольчик
Алекс спасибо за очередной урок!
Полезный урок. Спасибо.
Привет прошу сделай урок про погружение ардуино в глубокий сон.
Урок супер! Спасибо тебе! Все законспектировал, жду новые уроки
if(serial.available()) {
val = serial.parseInt()
list = [1,2,3]
if (list.includes(val)){
Serial.println("Вы ввели ${val}")
} else {
Serial.println("Мимо")}
}
Правильнее будет писать так и работать это будет быстрее, не серчай если тут есть ошибки, привёл грубый пример на JS , но концепция я думаю понятна
для новичка в програмировании осень сложно в книге изучаем ардуино: инстременты и методы технического волшебства всё также подробно но легче усваивается
Спасибо, очень здорово. Жду про математические функции (в часности про constrain) иногда путаница в них возникает)
3:02 "давайте получим данные спорта" ... в голове забурлили варианты того зачем могут быть нужны спортивные данные.
Ахахах лол
Тоже самое :D
проверял ваши примеры, всегда в ответе получаю на 2 ответа, на if и на else. может у меня неисправный ардуино. Пример Ваш переписал один к одному.
Ниже пишут, что в мониторе порта надо внизу в первой вкладке выбрать "Нет новой строки". У тебя похоже стоит "NL (Новая строка)". Мне помогло
@@Volka0071 мне тоже помогло! От души!
открой фигурную скобку после if и закрой ее перед else тоже самое с else то что должно исполняться в фигурные скобки
Такая же проблема
@@Volka0071 огромное спасибо, помог!
Почему при использовании Serial.parseInt() после ввода цифры и нажатия Enter автоматом через 1-2 секунды вводится ноль?
Какую программы ты используешь чтобы быстро переводить набранное на английском в русский. И какие кнопки ты нажимаешь для быстрого построения выражения и авто задания отступов. Знаешь ли какие нибудь фишечки синтаксического сахара у Arduino IDE?
В теории вроде бы, что то где то понятно, но не понятно)) так как еще незнаешь где это можно пременить. Когда то учился сайты собирать открывал в блокноте код хтмл сторонего сайта искал в нем джава скрипт или фрейм с русскими буквами или цифрами от div до /div заменял на свои. А здесь типо уравнений получается где не нужно весь код писать а кусочек условия... Интересная штука буду методом тыка изучать
Добрый день, вопрос будет ли работать если использовать вот так вот переменную в принте через точку? if (val > 19) {
Serial.println("Вы ввели ".val);
else
Serial.println("Мимо");
}
Мой "палец вверх в вашей копилке". Спасибо за образование. У вас педагогический талант.
+Олег Абдусаламов спасибо) здесь решающую роль играет сценарий, который тщательно прорабатывается
круто! спасибо большое! Даешь следующий урок!)))
Такой вопрос, как соединить 2 скетча? Один на то, чтобы включать светодиод и после выключать. Другой - мигание светодиода путём автоматического включения и выключения быз кнопки. В общем, чтобы через кнопку включать мигание, а после выключить?
Премного благодарен.
✊
Подскажите пожалуйста, как включить отображение нумерации строк кода?
Большое спасибо! Всё понятно
Такой вопрос, как через If сравнивать состояние выхода?
Пример: if (61
Все вслушиваюсь в музыку, знакомая, но не могу понять откуда. Приятная. Может из игры Bobby Carrot, но не факт
Побольше выпусков и подробностей, с нетерпением жду, ты наверное единственный кого даже приятно слушать, и я бы хотел с тобою как-то связаться, я новичок в этой сфере, очень хочу осуществить проект умного дома, как раз строем дом, если будет возможность рассмотри программу "Blynk"
круто
Эх мне бы такого учителя по физике
согласен
Привет Alex, вот вбил в голову себе вопрос, какая разница между if и while, по сути они одинаковые, выполняют то что в скобках при верном условии, но всетаки, что и в каких случаях лучше использовать
if мы уже видели в ранних роликах)
Почему в мониторе при вводе например "1" пишет "вы ввели 1" и сразу же "мимо". Т.е. два ответа на 1 запрос...
тоже с этим столкнулся, щас понял, в мониторе порта нужно выбрать "нет конца строки"
@@genatin12 спс, попробую.
Тот момент когда работаешь с JavaScript и смотришь в х2 скорости что бы не упустить что в С чего не знал.
привет!мне очень нравиться как обьясняешь но хотел бы тебя попрасить о помощи ,я хочу сделать что бы при нажатии на кнопку 1 или же на букву что бы загорался свето диод, как можно это сделать ?вот на видео мы указываем переменную и если она равно чему то,то будет выполнент код а как можно сделать что бы указал именно пин моде?вот допустим int val=pinMode(2,INPUT); и что бы тогда переменя понимала чтоя обрщаюсь именно к пин моду,,,можно сделать что то подобное ?извини за вопрос просто очень нужно мне
Через if или switch всегда приходят два ответа. Если верное значение, пишет его и то что в default, если попадает значение в default, то он два раза прихоит. Куда копать?
спасибо за подробное разжевывание материала ...
я вообще в школе учил бейсик потом паскаль ...
в си вот эти моменты мне немного были не понятны ..
продолжайте пожалуйста с той же точностью передавать материал ...
а будет урок по созданию например собственной библиотеки и ее написания
для чего-нибуть экзотического !? :)
+igor podol спасибо) написание библиотеки очень комплексная задача, поэтому урок про это будет одним из последних
спасибо ..понятно ... возможно даже несколько уроков-циклов ...
Разве есть принципиальная разница между паскалем, бейсиком, си в плане написания кода?
операторы и команды просто обозначаются по-разному. Логика работы одинаковая же
между "окой" и "фурой с прицепом" тоже нет принципиальной разницы.и там,и там-транспорт.однако переход с одного на другое-сложноват. сможете сходу накодить управление шаговиками и вывод на 7 сегментник на бейсике? :)
Разве в паскале не джава?
Кто подскажет, все сделал как на видео, но после ввода любого значения через полсекунды вводит пустое поле? с предыдущим уроком было также...
Небольшое дополнение:
в си и си++ любое число не равное 0 считается как истина, и только 0 - это ложь соответственно.
Вообще, использование большого числа конструкций if не очень хорошо, если есть вариант обойтись без него, в частности, при проектировании того же меню. Согласен, использование конструкций if это первое, что скорее всего приходит в голову, при проектировании меню, но это далеко не лучшее решение.
+Kirill Petrakov но я же сказал что свитч лучше подходит для этих целей. Правильно?
в каких-то случаях конечно конструкция switch интереснее if, но что касается именно меню, то чтобы проектировать полноценное древовидное меню с практически неограниченной вложенностью нужно использовать структуры. Конечно, если нужно отслеживать 2 или 3 состояния программы это из пушки по воробьям, и можно действительно обойтись более тривиальными решениями нежели использование структур.
Конструкции ветвления - это неотъемлемая часть программ, однако линейный ход программы проще воспринимается. Огромные каскады вложенных друг в друга if-ов очень сложно читать и отследить, что куда зачем и почему, что порой может запутать разработчика, я уже молчу про то как это воспринимается другим человеком, который смотрит на подобные вещи).
структуры, это которые struct?
The Daniil можешь дать вк?
норм все - можно пару уроков по вифи есп8266 и есп32 это как то уже сегодня - тренд на ИОТ, а ардуинка потихоньку отходит. хотя ардуино это основа - азы.
А как сделать так, чтобы после первого ответа "вы написали 2" (к примеру) ты о5 пишешь 2 и он отвечает уже другое, ну что-то вроде "вы опять ввели 2" ??
Покажи пожалуйста как написать програму на лампу настроения?
А что тройного равно как в php нету? Для проверки на равенство и соотношения типов.
Блин как же приятно понимать о чем тут говорят ! Спасибо шарпику..
То самое ощущение, когда в 12-14 лет по наитию кодил в Pawn, пытаясь сделать годный сервер в SAMP, а теперь видишь всё это до боли знакомое, хоть сейчас садись делать умный дом…
А Питона я так и не смог в универе освоить и понять…
Привет! Спасибо тебе за замечательный курс, очень доходчиво все объясняется! Есть вопрос - Начал учиться на плате RobotoDyn Uno v3 возможно плата неисправна и не верно интерпретирует код. В окне com порта после ввода цифры 1, или 5 (выполняется условие if), но следом сразу же выполняется команда else, т.е. в порте сначала появляется текст "Вы ввели число 1 или 5
", а через секунду появляется "Мимо!"
Вот мой код:
byte val;
void setup() {
Serial.begin(9600); //Вывод на монитор порта
}
void loop() {
if (Serial.available()) {
val = Serial.parseInt();
if (val == 1 || val == 5) {
Serial.println ("Вы ввели число 1 или 5");
} else {
Serial.println ("Мимо!");
}
}
}
У меня абсолютно такая же проблема, нашлось решение?
@@randomguyjustpassingby зае***ли почитайте комментарии к видео - найдёте ответ - главное 2-3 ответа , а вопрос один и тот же задали уже раз 50 наверное!
@@user-gt6on4ym2z именно так и сделал и нашёл ответ, проблема решена. А если вам было не лень залезать сюда и жаловаться на это, то проблема уже ваша
В школе C# изучаем. Рад что пригодилось)))
Таймкод 3:35 что нужно сделать, чтобы при повторном вводе 1 или 5, в порте не отображалась повторно надпись "Вы ввели 1 или 5" ? Чтобы внезависимости от того чтобы ты не нажимал, высвечивались по очереди фразы верно/мимо ?
String mess = "верно";
void setup(){
Serial.begin(9600);
}
void loop() {
String worD = "";
while (Serial.available() > 0){
delay(2);
worD += String(char(Serial.read()));}
if (not(worD == "")){
Serial.print(worD +' ');
Serial.println(mess);
if (mess == "верно"){
mess = "мимо";
}else{
mess = "верно";
}
}
}
@@dancing_master поздно)
@@user-cp7ld6dq8x , а почему не так : -поздно коллега))ахахаха)
Ладно це жарт! На цілий місяць відстаю від Вас ,буду продовжувать навчання.
Какая операция обрабатывается быстрее if или switch ? У меня в коде переменная А равна число от 0 до 9, и в зависимости от переменной выполняется определенная операция. Выполнено с оператором if и else if. Так как код выполняет динамическую индикацию на семисегментром дисплее, мне интересен, если использовать структуру switch/case, получится увеличить скорость динамической индикации или нет?
Какая разница? Это ведь не одно и тоже!
Напиши про nRF24l01 еще! В плюсах ты писал, что есть функции достукивая до приемника и тд и тп, как это все реализуется?
+Дмитрий Патрушев там в настройках все прописано уже) считай в моих скетчах по умолчанию достукивание стоиь
Беру твой скетч из примера - работает. Переписываю под свои данные - не работает. Так и не смог достукивание пока написать. Он уже на стадии if(radio.write(&data, sizeof(data))) {} некорректно работает: устройство, которые принимает, успешно принимает данные и выводит на экран, значит они были отправлены, но условие не срабатывает
Если интересно, radio.write() возвращает первые 3 раза единицу, а потом ноль. Адрес переписывал в разных вариантах, но баг присутствует до сих пор.
Доброго времени суток! У меня возвращается 2 раза "Мимо!". И даже после "Вы ввели 1 или 5". При получении цифр тоже были лишняя цифра "10"
В мониторе COM порта поставьте "Нет конца строки".
Алекс доброго времени суток, хотел давно задать тебе один вопрос. Вот во всех своих поделка ты используешь ардуино, канал «заметки ардуинщика» открыл, но эту платформу часто ругают в интернете не считая ее серьезной для разработок. Скажи каково твое мнение на этот счет? Стоит ли всерьез заняться ардуиной ?
+Иван Мормышев доброй ночи. Так пишут только суровые программисты, которые занимаются разработкой всяких хитровыебанных систем. Естественно с высоты своего опыта работы с мощными контроллерами они видят, что ардуино слабая и медленная платформа. Но для наших, бытовых целей ей просто нет равных. Плевать что упрощенный язык очень неэффективно использует ресурсы микроконтроллера. Зато он простой и удобный, как конструктор. Если ардуино вдруг станет мало, то переучиться на более мощную платформу будет немного проще чем с нуля. Но в то же время под управлением ардуино летают квадрокоптеры с gps.
Лично я считаю всех этих людей зазнавшимися хейтерами, которые не могут поставить себя на место обычного человека, который хочет сделать своему любимому цветку в горшке систему автополива . И не хочет для этого учить ассемблер и часами залипать в даташиты.
Мне порой очень хочется снять видео, где я буду просто бомбить по этому поводу и очень негативно высказываться в адрес людей, которые говорят что ардуино - ерунда. Но делать я этого, конечно, не буду
Заметки Ардуинщика огромное спасибо за ответ, теперь мне есть над чем работать.
Иван Мормышев
Скажу больше, у меня на предприятии работает сеть телеметрии на ардуино! дёшево и сердито!
Я 2
Спасибо! Я написал 5 программу а это мая первая игра.
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(A4, INPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() { { {
digitalWrite(2,1);
delay(1000);
digitalWrite(2,0);
digitalWrite(3,1);
delay(1000);
digitalWrite(3,0);
digitalWrite(4,1);
delay(1000);
digitalWrite(4,0);
}
digitalWrite(5,1);
analogRead(A4==1);
digitalWrite(5,0);
digitalWrite(6,1);
delay(2000);
digitalWrite(6,0);
}
if ((4,HIGH) && (5,HIGH)) {
digitalWrite (7,HIGH);
}
}
блин, просмотрела три раза момент, не понимая почему же правая более красивая? потом заметила надпись, что левая:) я аж напряглась
Небольшое добавление по условиям. Существует и укороченная запись условий (a > b) ? c == true : c==false; Если А больше B то С равно истина, иначе С равно ложь..Так же имеет место запись присваивания переменной значения результата сравнения: c == (a > b);
+Alexei Belousov спасибо, добавлю в пособие
(a > b) ? c == true : c==false ! Это называется тернарный оператор
опять же как и с кейсом, если у тебя идет условия, вложенные в условия, то: -что свитч кейс не читабелен; -что ()?: не читабельно...
ты лучший )
у меня почему то сом порт выдает 2 записи последовательно. еще когда с прошлым видео с числами игрался выдавало число, а потом еще какое то число, то отрицательное, то 0. а сейчас при посыле 1 или 5, сперва выдает первую строчку, потом мимо. при посыле другого числа, два "мимо" один за другим.
Такая-же фигня
просто СПАСИБО ЗА РАЗЖЕВАННУЮ ИНФОРМАЦИЮ
Алекс есть вопрос о Serial.available. Я так понимаю обьем 64байта и Serial.available долна возвращать число. В общем я попытался его узнать, но каждый раз выбивало ошибку при загрузке на ардуино. Тогда я написал следующий код:
if (Serial.available()) {
Serial.print ("Ok");
}else{
Serial.print ("Not Ok");
}
Ответ был Not Ok. Хотя я ничего в память не грузил и кроме этого когда никаких переменных не вводилось. Может я что-то не так понял или не правильно код написал? Это мой первый день с ардуино, так что вот... Пока что не понятно почему Serial.available = 0
int val;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if ( Serial.available() )
{
val = Serial.parseInt();
Serial.println(val);
}
}
Ввожу в COM порте значение переменной. Значение отображается, затем в следующей строке появляется ноль. Почему ?
))) Бэйсик вспомнил
Приветствую! Делаю первые шаги по Вашим урокам. Сегодня, повторяя урок, не могу найти в чём у меня ошибка. А именно при использовании val, у меня выскакивает обе строки, сперва -Вы ввели 1 или 5 , а потом -Мимо или наоборот. Перепроверил несколько раз, переписал заново. Результат прежний. Подскажите, в чём причина?
В мониторе порта (COM,) в самом низу окна, выбери "Нет конца строки"
Подскажите if можно вложить в if?
круто! молодец! я первый!
Практические и прикладные примеры будут?
+MrAlligator2006 после цикла уроков
когда следующее видео?
Добрый день! А как исправить проблемы с кодировкой? У меня вместо сообщений "Вы ввели 1 или 5" и "Мимо!" вылазиют иероглифы.
Чому нема нового уроку?)
Здоров, набираю согласно твоему коду на if или switch не важно и у меня после каждого действия обязательно выполняется команда если, не важно верно не верно введено значение в порт, все равно выводит если. допустим вводишь "1", он говорит да верно "ввели 1" и затем сразу пишет "неверно" не пойму прикола
То же такая проблема!
Чувак,запили видос про меню!Хотя бы простенький пример,с 2-3 кнопками и lcd дисплеем!
+Serg Gorelii после цикла уроков
Круто!Спасибо)))
С сенсорным TFT дисплеем тоже было бы интересно посмотреть, например, построение многоуровневого меню.
еще и на веб морде - почему не назвать урок - как запилить пару кнопок на вебморде да еще и с MQTT))?????
@@ArduNotes и прошло 3 года 🤣😆
У меня вопрос, в видео есть строчка. val = Serial.parseint(); это как я понимаю объявление переменной, в уроке она так и работает но у меня пишет ошибку если я не установлю тип данных Пример : int val = Serial.parseint(); почему так? И еще у меня в Com порте сразу после вывода ответа появляется в следующей строке появляеться надпись мимо даже если я указываю значение в нужном диапазоне. Как её убрать?
Что делать если не отображаются цифры в КОМ порте как у тебя? Вводишь в строке цифру и ноль эмоций? Версия IDE 2.0.3
Почему лайки пропадают? Я зашёл сегодня- его нет. Еще зашёл. И опять лайк пропал!