Азбука Ардуино
Модератор: Gnat
Азбука Ардуино
Разбор скетча
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, или автоматизировать по времени какой нибудь процесс, например поливки растений когда вы в отпуске, достаточно через мосфет или симистор подключить насосы или электроклапана.
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 раз.
С уважением Владимир.
Азбука Ардуино
Seredin_S, У меня на Ардуино сделано видеонаблюдение перед дверью, как только ктото появляется на смартфон приходит фото если чужой можно запустить видео посмотреть и послушать, делал из подручных материалов, купил только ардуино и wifi модуль обошлось все в районе 300 рублей.
С уважением Владимир.
Азбука Ардуино
Маркировка резисторов, для Ардуино самые ходовые 100 Ом 1 кОм 10 кОм, потенциометры линейные 10 кОм
С уважением Владимир.
Азбука Ардуино
Переменные
Мы присвоили функции 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);
}
Мы присвоили функции 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);
}
С уважением Владимир.
Азбука Ардуино
Задание - Попробуйте самостоятельно разобраться со скетчем на основании полученных ранее знаний как будет работать 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);
}
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
- Откуда: Москва
- Контактная информация:
Азбука Ардуино
Отличная подача материала, всё понятно и без "воды".
Кому интересно присоединяйтесь! Трудно найти в интернете ресурс где так рассказывают об ардуино! Парни не упускайте момент! У кого нет платки и в дальнейшем планируете изучать, приобретайте не затягивая стоит как полблока сигарет!
Кому интересно присоединяйтесь! Трудно найти в интернете ресурс где так рассказывают об ардуино! Парни не упускайте момент! У кого нет платки и в дальнейшем планируете изучать, приобретайте не затягивая стоит как полблока сигарет!
С уважением, Андрей
Азбука Ардуино
Сделал конспект, дофига писать . давно этим не занимался, только задание на рынок
На фото разбор скетча
Всем пинам присвоен выход 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
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
Поспал чуть больше 4 часов , да диоды зажигаются одновременно, но гаснут от 1 к 5, это бегущая тень будет.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
Почему зажигаются все 5 сразу? Исходя из кода, на пинах сначала 1,потом через небольшую паузу 0. и т. д. по остальным пинам.
Или по умолчанию на всех пинах логическая 1 что-ли? Тогда нужно перед процедурой loop задать на всех пинах уровень low и всё будет хорошо.
Под рукой платы нет, чтобы проверить, у сына уже в его 3d сканере стоит, не снять.
Или по умолчанию на всех пинах логическая 1 что-ли? Тогда нужно перед процедурой loop задать на всех пинах уровень low и всё будет хорошо.
Под рукой платы нет, чтобы проверить, у сына уже в его 3d сканере стоит, не снять.
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.
Азбука Ардуино
Плата и все есть, но хочется разобраться, функция void loop() - цикл, выполнение команд сверху списка вниз и снова сверху вниз и т.д., получается только при включении бежит огонь (один раз), дальше мы будем видеть бегущую тень, мне так видится этот скетч.
Нашел ошибки, , но уже в проге при компиляции, смонтировал плату, загрузил светится только на pin1.
Последний раз редактировалось BazilVV Ср янв 15, 2020 10:54 am, всего редактировалось 1 раз.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
- MOT
- Сообщения: 2278
- Зарегистрирован: Сб дек 16, 2017 7:58 pm
- Откуда: Россия, Северный Кавказ, Краснодарский край, г.Армавир
Азбука Ардуино
А ну если так рассуждать, то да, так и есть.
С уважением, Виктор Евгеньевич
Accept Corp.
Accept Corp.
Азбука Ардуино
На компе почему то только через один ЮСВ разьем загружаются скетчи, в других не хочет что-то здесь не так.
Светится ЛЕД только на пин1 и все три диода на самой плате (не моргают), пока не понимаю.
ПС: с ЮСВ разобрался, нужно в диспечере смотреть порт, затем птичку в ардуино ставить против этого порта, в разных ЮСВ порты разные.
Светится ЛЕД только на пин1 и все три диода на самой плате (не моргают), пока не понимаю.
ПС: с ЮСВ разобрался, нужно в диспечере смотреть порт, затем птичку в ардуино ставить против этого порта, в разных ЮСВ порты разные.
Василий Васильевич. Моя галерея.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
ЗЫ: Я сторонник жесткой модерации в тематических ветках.
Азбука Ардуино
BazilVV, Если вы поменяли USB порт то у Вас поменяется и COM порт нужно изменить номер СОМ порта в Arduino IDE и все будет работать.
Первая страница темы
5. Выбраем порт ( Инструменты\Порт\”COM отличный от COM1, например COM3, COM5…”
Первая страница темы
5. Выбраем порт ( Инструменты\Порт\”COM отличный от COM1, например COM3, COM5…”
С уважением Владимир.
Азбука Ардуино
Прежде чем дать правильный ответ на задание давайте рассмотрим еще одну ситуацию
Вы написали длинный скетч и теперь Вам нужно переставить красный светодиод с 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 светодиодов.
Вы написали длинный скетч и теперь Вам нужно переставить красный светодиод с 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 светодиодов.
С уважением Владимир.