Азбука Ардуино

Модератор: Gnat

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Вт янв 14, 2020 11:05 pm

Разбор скетча

void setup() Функция настройки выполняется вначале, это как при приготовлении яичницы, включить газ, поставить сковородку, разбить яйцо

{
pinMode(13, OUTPUT); Функция которая дает нашему пину 13 назначение OUTPUT выход у пинов могут быть другие назначения например INPUT вход

pinMode(11, OUTPUT); Назначаем пину 11 функциональное назначение OUTPUT выход

pinMode(9, OUTPUT);

} Вначале и в конце ставим фигурные скобки иначе будет ошибка выполнения скетча

void loop() Функция LOOP цикл, все что внутри фигурных скобок выполняется по циклу сверху вниз

{
digitalWrite(13, HIGH); Эта функция говорит digitalWrite - цифровое действие, на пин 13 подать напряжение HIGH , можно просто 1 это тоже самое но HIGH нагляднее для обучения я пишу всегда 1, поэтому в моих скетчах хрен разберешься.

delay(1000); Эта функция говорит delay пауза и в скобках сколько в миллисекунд

digitalWrite(11, HIGH); delay(1000);
digitalWrite(9, HIGH); delay(1000);

digitalWrite(13, LOW); Эта функция говорит digitalWrite - цифровое действие, на пине 13 снять напряжение LOW , можно просто 0 это тоже самое но LOW.

delay(1000); Эта функция говорит delay пауза и в скобках сколько в миллисекундах 1 до 4 294 967 295 миллисекунд (~50 суток)

digitalWrite(11, LOW); delay(1000);
digitalWrite( 9, LOW); delay(1000);
}
Вот и все теперь на этой основе Вы можете сделать крутую световую иллюминацию используя все 20 каналов Arduino, или автоматизировать по времени какой нибудь процесс, например поливки растений когда вы в отпуске, достаточно через мосфет или симистор подключить насосы или электроклапана.
Последний раз редактировалось SmartAvit Вт янв 14, 2020 11:53 pm, всего редактировалось 1 раз.
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Вт янв 14, 2020 11:13 pm

Seredin_S, У меня на Ардуино сделано видеонаблюдение перед дверью, как только ктото появляется на смартфон приходит фото если чужой можно запустить видео посмотреть и послушать, делал из подручных материалов, купил только ардуино и wifi модуль обошлось все в районе 300 рублей.


Изображение
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Вт янв 14, 2020 11:45 pm

Маркировка резисторов, для Ардуино самые ходовые 100 Ом 1 кОм 10 кОм, потенциометры линейные 10 кОм

Изображение
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 15, 2020 12:22 am

Переменные

Мы присвоили функции delay(1000); значение 1000 мс а теперь хотим изменить время свечения светодиода на 1100 мс, а паузу на 600 и для этого нам придется переписывать весь скетч а представьте себе что у вас 100 таких значений.

Для решения таких вопросов используются переменные, время свечения светодиода мы обозначим как X а паузу как Y тогда скетч примет вид

void loop()
{
digitalWrite(13, HIGH); delay(x);
digitalWrite(11, HIGH); delay(x);
digitalWrite(9, HIGH); delay(x);
digitalWrite(13, LOW); delay(y);
digitalWrite(11, LOW); delay(y);
digitalWrite( 9, LOW); delay(y);
}

И введем переменные
int x = 1100;
int y = 600;

Запомните и запишите - целочисленная переменная (integer, int)

Важно, имена переменных (в нашем случае это X и Y) не могут начинаться с цифры и содержать пробела (вместо него можно использовать символ подчеркивания, например Led_Red).

Помните, что переменная во всем тексте программы пишется одинаково, с учетом прописных и строчных букв (led, LED и Led – это три разные переменные!).

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

Мы присвоили переменной X значение 1100 а переменной Y значение 600, теперь чтобы изменить время свечения светодиода нужно просто поменять значение X.

Но числа бывают не только целочисленные но и с плавающей точкой и буквы, для них есть свои переменные так как если вы присвоите переменной X значение 1,3 то на выходе получите 1 и при 1,9 тоже получите 1

Ниже таблица с переменными их нужно запомнить или записать в шпаргалку.



Изображение

Переменные присваиваем в самом начале Скетча и Скетч будет такой

int x = 1000;
int y = 500;

void setup()
{
pinMode(13, OUTPUT);
pinMode(11, OUTPUT);
pinMode(9, OUTPUT);

}
void loop()
{
digitalWrite(13, HIGH); delay(x);
digitalWrite(11, HIGH); delay(x);
digitalWrite(9, HIGH); delay(x);
digitalWrite(13, LOW); delay(y);
digitalWrite(11, LOW); delay(y);
digitalWrite( 9, LOW); delay(y);
}
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 15, 2020 12:45 am

Задание - Попробуйте самостоятельно разобраться со скетчем на основании полученных ранее знаний как будет работать Arduino

int pin1 = 8;
int pin2 = 9;
int pin3 = 10;
int pin4 = 11;
int pin5 = 12;

void setup()
{
pinMode(pin1,OUTPUT)
pinMode(pin2,OUTPUT)
pinMode(pin3,OUTPUT)
pinMode(pin4,OUTPUT)
pinMode(pin5,OUTPUT)
}

void loop()
{
digitalWrite(pin1,HIGH);
delay(100);

digitalWrite(pin1,LOW);
delay(100);

digitalWrite(pin2,HIGH);
delay(100);

digitalWrite(pin2,LOW);
delay(100);

digitalWrite(pin3,HIGH);
delay(100);
digitalWrite(pin3,LOW);
delay(100);

digitalWrite(pin4,HIGH);
delay(100);
digitalWrite(pin4,LOW);
delay(100);

digitalWrite(pin5,HIGH);
delay(100);
digitalWrite(pin5,LOW);
delay(100);
}
С уважением Владимир.

Аватара пользователя
Andrey.I
Сообщения: 1734
Зарегистрирован: Вт июл 02, 2013 1:21 pm
Откуда: Москва
Контактная информация:

Азбука Ардуино

Сообщение Andrey.I » Ср янв 15, 2020 1:22 am

Отличная подача материала, всё понятно и без "воды".
Кому интересно присоединяйтесь! Трудно найти в интернете ресурс где так рассказывают об ардуино! Парни не упускайте момент! У кого нет платки и в дальнейшем планируете изучать, приобретайте не затягивая стоит как полблока сигарет! :)
С уважением, Андрей

Аватара пользователя
BazilVV
Сообщения: 639
Зарегистрирован: Пт сен 15, 2017 11:34 am

Азбука Ардуино

Сообщение BazilVV » Ср янв 15, 2020 2:53 am

SmartAvit писал(а):
Вт янв 14, 2020 11:05 pm
Разбор скетча
Сделал конспект, дофига писать :( . давно этим не занимался, только задание на рынок :D
На фото разбор скетча

Изображение

SmartAvit писал(а):
Ср янв 15, 2020 12:45 am
Задание - Попробуйте самостоятельно разобраться со скетчем на основании полученных ранее знаний как будет работать Arduino

int pin1 = 8;
int pin2 = 9;
int pin3 = 10;
int pin4 = 11;
int pin5 = 12; ...
Всем пинам присвоен выход OUTPUT, можно цеплять нагрузку - светодиод.
Я думаю что так будет:
int pin1 = 8; //Светодиод моргает с частотой 800/800 _ еще одна версия_8 импульсов по 100
int pin2 = 9; //Светодиод моргает с частотой 900/900 _9 импульсов...
int pin3 = 10; //Светодиод моргает с частотой 1000/1000_
int pin4 = 11; //Светодиод моргает с частотой 1100/1100
int pin5 = 12; //Светодиод моргает с частотой 1200/1200
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Ср янв 15, 2020 8:05 am

SmartAvit писал(а):
Ср янв 15, 2020 12:45 am
Задание - Попробуйте самостоятельно разобраться со скетчем на основании полученных ранее знаний как будет работать Arduino
Это будет бегущий огонь. :)
С уважением, Виктор Евгеньевич
Accept Corp.

Аватара пользователя
BazilVV
Сообщения: 639
Зарегистрирован: Пт сен 15, 2017 11:34 am

Азбука Ардуино

Сообщение BazilVV » Ср янв 15, 2020 9:30 am

MOT писал(а):
Ср янв 15, 2020 8:05 am
Это будет бегущий огонь.
Поспал чуть больше 4 часов :pardon: , да диоды зажигаются одновременно, но гаснут от 1 к 5, это бегущая тень будет.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Ср янв 15, 2020 9:57 am

Почему зажигаются все 5 сразу? Исходя из кода, на пинах сначала 1,потом через небольшую паузу 0. и т. д. по остальным пинам.
Или по умолчанию на всех пинах логическая 1 что-ли? Тогда нужно перед процедурой loop задать на всех пинах уровень low и всё будет хорошо.
Под рукой платы нет, чтобы проверить, у сына уже в его 3d сканере стоит, не снять. :)
С уважением, Виктор Евгеньевич
Accept Corp.

Аватара пользователя
BazilVV
Сообщения: 639
Зарегистрирован: Пт сен 15, 2017 11:34 am

Азбука Ардуино

Сообщение BazilVV » Ср янв 15, 2020 10:13 am

MOT писал(а):
Ср янв 15, 2020 9:57 am
Под рукой платы нет, чтобы проверить,
Плата и все есть, но хочется разобраться, функция void loop() - цикл, выполнение команд сверху списка вниз и снова сверху вниз и т.д., получается только при включении бежит огонь (один раз), дальше мы будем видеть бегущую тень, мне так видится этот скетч.
Нашел ошибки, :Yahoo!: , но уже в проге при компиляции, смонтировал плату, загрузил :( светится только на pin1.
Последний раз редактировалось BazilVV Ср янв 15, 2020 10:54 am, всего редактировалось 1 раз.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.

Аватара пользователя
MOT
Сообщения: 2278
Зарегистрирован: Сб дек 16, 2017 7:58 pm
Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир

Азбука Ардуино

Сообщение MOT » Ср янв 15, 2020 10:18 am

BazilVV писал(а):
Ср янв 15, 2020 10:13 am
MOT писал(а):
Ср янв 15, 2020 9:57 am
Под рукой платы нет, чтобы проверить,
Плата и все есть, но хочется разобраться, функция void loop() - цикл, выполнение команд сверху списка вниз и снова сверху вниз и т.д., получается только при включении бежит огонь (один раз), дальше мы будем видеть бегущую тень, мне так видится этот скетч.

А ну если так рассуждать, то да, так и есть.
С уважением, Виктор Евгеньевич
Accept Corp.

Аватара пользователя
BazilVV
Сообщения: 639
Зарегистрирован: Пт сен 15, 2017 11:34 am

Азбука Ардуино

Сообщение BazilVV » Ср янв 15, 2020 11:19 am

На компе почему то только через один ЮСВ разьем загружаются скетчи, в других не хочет :( что-то здесь не так.

Изображение

Светится ЛЕД только на пин1 и все три диода на самой плате (не моргают), пока не понимаю.
ПС: с ЮСВ разобрался, нужно в диспечере смотреть порт, затем птичку в ардуино ставить против этого порта, в разных ЮСВ порты разные.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 15, 2020 11:44 am

BazilVV, Если вы поменяли USB порт то у Вас поменяется и COM порт нужно изменить номер СОМ порта в Arduino IDE и все будет работать.
Первая страница темы
5. Выбраем порт ( Инструменты\Порт\”COM отличный от COM1, например COM3, COM5…”
С уважением Владимир.

Аватара пользователя
SmartAvit
Сообщения: 707
Зарегистрирован: Пн мар 25, 2019 12:10 am
Откуда: Москва

Азбука Ардуино

Сообщение SmartAvit » Ср янв 15, 2020 11:51 am

Прежде чем дать правильный ответ на задание давайте рассмотрим еще одну ситуацию

Вы написали длинный скетч и теперь Вам нужно переставить красный светодиод с Pin13 на Pin7 и для этого придется переписывать весь скетч?

Изображение

Так вот переменной можно присвоить не только число, букву, слово но и номер Pin и дать ему имя для красного диода Red_led для зеленого Green_led для желтого Yellow_led

В нашем случае это будет выглядеть так

int Red_led = 13; Присвоим переменной Red_led значение Pin13
int Green_led = 11; Присвоим переменной Green_led значение Pin11
int Green_led = 9;

И теперь для того чтобы переставить красный светодиод светодиод с Pin13 на Pin7 на м нужно только в начале кода в переменной указать
int Red_led = 7;

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

Мы принимаем переменную и называем ее Period присваиваем ей значение 100
int Period = 100;

и тогда если нам нужно сделать время свечения светодиода 1000 мс пишем
delay(Period*10);

время паузы в свечении светодиода 500 мс пишем
delay(Period*5);

При этом мы делаем скетч более гибким и читаемым

При написании кода возьмите за правило комментировать каждое действие, однострочный комментарий пишется после // двойного слеша и что мы получили в финале

int Red_led = 13; // Присвоим переменной Red_led значение 13
int Green_led = 11; // Присвоим переменной Green _led значение 11
int Yellow_led = 9; // Присвоим переменной Yellow _led значение 9
int Period = 100; // Присвоим переменной Period значение 100
void setup()
{
pinMode(Red_led, OUTPUT); // Присвоим пину Red_led (переменная Red_led = 13) функц выход
pinMode(Green_led, OUTPUT); // Присвоим пину Green _led назначение OUTPUT выход
pinMode(Yellow_led, OUTPUT); // Присвоим пину Yellow _led назначение OUTPUT выход
}
void loop()
{
digitalWrite(Red_led, HIGH); delay(Period*10);
digitalWrite(Green_led, HIGH); delay(Period*10);
digitalWrite(Yellow_led, HIGH); delay(Period*10);
digitalWrite(Red_led, LOW); delay(Period*5);
digitalWrite(Green_led, LOW); delay(Period*5);
digitalWrite(Yellow_led, LOW); delay(Period*5);
}

Это уже посложнее тема но надеюсь объяснил правильно

Во вчерашнем примере

int pin1 = 8;
int pin2 = 9;
int pin3 = 10;
int pin4 = 11;
int pin5 = 12;

Мы также присвоили переменной int pin1 значение 8 то есть светодиод обозначенный как pin1 физически находится на 8 порту, на схеме подключения это выглядит так.

Изображение

А теперь задание на основании полученных знаний попробуйте написать код для 6 светодиодов.
С уважением Владимир.

Ответить

Вернуться в «Усилители»