Arduino«с нуля»: возня продолжается

Сегодня утромподключил Arduino к ноутбуку с Windows 7 Starter, установил те же самые драйверы (см. 1-ю часть). Arduino сел на тот же COM3-порт.

Одновременно выяснил, что имеются различные эмуляторы Arduino, которые можно запускать как на локальном компьютере, так и в режиме ONLINE, работая в Интернете.

Кстати, возник вопрос: в чём разница между эмулятором и симулятором? Применительно к электронике, конечно. Раньше мне казалось, что это, практически, одно и то же. Оказывается – НЕТ! В сети можно найти массу пустых разглагольствований на эту тему, что является чистой воды пустомельством, ежели человеки не обращаются к серьёзным первоисточникам знаний. Как известно, далеко не всё, что мы себе представляем и до чего доходим собственным опытным путём, есть истина. Чаще таковой она нам только кажется, на самом деле – она где-то рядом, но в силу каких-то причин мы не смогли (или не захотели?) её заметить. В силу вышеизложенного, многим современным молодым людям кажется совершенно лишним серьёзное систематическое образование. Они полагают, что их (поверхностные) знания и (убогие) умения и так откроют перед ними широкую карьерную лестницу в светлое капиталистическое будущее с жалованьем в тысячи €.
Это было маленькое нелирическое отступление.

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

Симуляция - это воспроизведение работы программы-оригинала сугубо виртуально, на движке специальной программы. Симуляция лишь имитирует выполнение кода, а не копирует его. Всё виртуально на 100%, всё понарошку.

Для наглядности представления разницы
: подключив к телевизору генератор тестовых сигналов, мы получим эмуляцию приёма этих сигналов, а вставив в телевизор картинку и осветив её лампочкой, мы получим симуляцию приёма сигналов. В результате мы увидим одно и то же — ряд картинок на экране, которые появляются при тестировании сигнала. Но реализация, как вы понимаете, существенно различается.
Более подробно, см., например, на https://wlcm-to-el.blogspot.com/2014/03/emul.html

Попытавшись системно подобраться к Arduino скачал книжку Мамичева Д.И., «Программирование на Ардуино. От простого к сложному», 2018 г. Не думаю, что она является идеальным пособием, но автор заявляет, что он «с нуля» за два месяца освоил предмет и даже оформил свой опыт в виде книги. Понятно, что и все другие «писатели» считают свои произведения лучшими (для начинающих). Кроме того, в сети имеется бесчисленное множество сайтов, на которых представлены как отдельные уроки, так и целые серии «для начинающих». Всё бы хорошо, но, зачастую за «обучение»берутся люди, которые в этом обучении ничегоне смыслят. В результате сеть наполняется не нужной, бессистемной, бессмысленной и невостребованной информацией, в которой эти самые начинающие барахтаются, как в океане, не видя берегов.

Проделаю несколько экспериментов из данной книги, не повторяя 1:1, а внося, если смогу, что-то своё. Начало должно быть наглядным – сразу должен быть виден результат. А для этого проще всего использовать светодиоды. Чтщ может быть нагляднее светопредставления?!

Эксперимент №1. Мигающий светодиод.

Светодиод анодом подключается к DIGITALпину №1 через гасящий резистор (у меня 220 Ом), катодом – кпинуGND (который, естественно «минус»):

В IDE набираю программку:

//мигающий СВЕТОДИОД
inteLEDpin=1;
void setup() {
pinMode(eLEDpin,OUTPUT);
}
void loop() {
digitalWrite(eLEDpin,HIGH);
delay(1000);
digitalWrite(eLEDpin,LOW);
delay(1000);
}
Комментарии  можно посмотреть в книге, не хочу заниматься переписыванием.

Конструкции языка С++ очень напоминают мне аналогичные из других языков высокого уровня.
Сохраняю и загружаю в Arduino. После «перемаргивания» процесс пошёл: жёлтый светодиод HL1 моргает с периодом 2 с. В противофазе с ним моргает светодиод RXна плате:

Эксперимент №2. Три поочерёдно мигающих светодиода.
Чтобы сразу не усложнять программу всякими вложенными циклами (как у Мамичева), заставлю 3 разноцветных светодиода моргать поочерёдно. Для этого надо к предыдущему добавить ещё два светодиода через гасящие резисторы анодами к DIGITAL пинам №2 и №3, а катоды соединить вместе и «заземлить» на пин GND:

Программка:
//3 мигающихСВЕТОДИОДА
inteLEDpin=1;
intbLEDpin=2;
intrLEDpin=3;
void setup() {
pinMode(eLEDpin,OUTPUT);
pinMode(bLEDpin,OUTPUT);
pinMode(rLEDpin,OUTPUT);
}
void loop() {
digitalWrite(eLEDpin,HIGH);
delay(500);
digitalWrite(eLEDpin,LOW);
delay(500);
digitalWrite(bLEDpin,HIGH);
delay(500);
digitalWrite(bLEDpin,LOW);
delay(500);
digitalWrite(rLEDpin,HIGH);
delay(500);
digitalWrite(rLEDpin,LOW);
delay(500);
}
Как видно, пришлось ввести ещё две переменных и назвать их соответственно цветам светодиодов. Паузы уменьшены до 0,5 с.

Эксперимент №3. Четыре поочерёдно мигающих светодиода с постоянной частотой.
Понятно уже, что светодиодов можно налепить соответственно количеству DIGITAL пинов. Можно и больше, но это уже несколько сложнее. За исходный беру тест программы №2 из книги (вариант 1), слегка её упростив.

unsigned int n:
void setup()
{
for (n=1; n<=4; n++)// этоn=n+1
{
pinMode(n,OUTPUT); // объявляю выходными пины 1, 2, 3, 4
digitalWrite(n,LOW); // подать на них низкий уровень
}
}
void loop()
{
for (n=1; n<=4; n++) // этоn=n+1
{                                // для каждого пинапочерёдно
digitalWrite(n,HIGH); // включить
delay (300);              // задержка 0,3 с
digitalWrite(n,LOW); // выключить
}
}
После загрузки в Arduinoсветодиодики включаются поочерёдно, имитируя «бегущий огонь», т.е. практически то же самое, что в предыдущей программе но реализуется это с помощью цикла «for…».

Эксперимент №4. Четыре поочерёдно мигающих светодиода с постепенно убывающей частотой.

Схема та же. Программа из книги:

unsignedint n; //переменная служит для пересчёта DIGITALпинов: 1, 2, 3, 4
unsignedintk;//переменная служит для изменения параметра задержки во внешнем цикле
void setup()
{
for (n=1; n<=4; n++)//в этом цикле
{
pinMode(n,OUTPUT);//поочерёдноDIGITALпины 1, 2, 3, 4 объявляются для вывода
digitalWrite(n,LOW); );//поочерёднона DIGITALпины 1, 2, 3, 4 подается низкий уровень
}
}
void loop()
{
for (k=200; k<=2000; k=k+200) // цикл изменения параметра задержки от 200 через 200 до 2000
{
for (n=1; n<=4; n++) // циклпересчётаDIGITALпинов: 1, 2, 3, 4
{
digitalWrite(n,HIGH); //податьнаDIGITALпинnвысокийуровень
delay (k);                 //задержатьнаk
digitalWrite(n,LOW); //податьнаDIGITALпинnнизкийуровень
}
}
}

Эксперимент №5. Четыре светодиода одновременно ступенчато увеличивают яркость, гаснут, затем всё повторяется.
Схема та же. Программа из книги:

unsignedint n;
unsignedint k;
unsignedint i;
void setup()
{
for (n=1; n<=4; n++)
{
pinMode(n,OUTPUT);
digitalWrite(n,LOW);
}
}
void loop()
{
for (k=100; k<=1000; k=k+100)
{
for (n=1; n<=4; n++)
{
for (i=1; i<=k; i=i+1)
{
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
delay (n);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delay (5-n);
}
}
}
}
Эксперимент №6. Четыре светодиода попарно (1-3, 2-4) перемаргиваются с переменной частотой. Во всяком случае, ток должно быть.
Схема та же. Программа из книги:
unsignedint n;
unsignedint k;
unsignedint i;
void setup()
{
for (n=1; n<=4; n++)
{
pinMode(n,OUTPUT);
digitalWrite(n,LOW);
}
}
void loop()
{
for (k=200; k<=2000; k=k+200)
{
for (n=0; n<=1; n++)
{
for (i=1; i<=1; i++)
{
if (i==1)
{
digitalWrite(1,HIGH);
digitalWrite(3,LOW);
}
else
{
digitalWrite(1,LOW);
digitalWrite(3,HIGH);
}
if (n==1)
{
digitalWrite(2,HIGH);
digitalWrite(4,LOW);
}
else
{
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
}
delay(k);
}
}
}
}
У меня не получилось. Я проверил текст программы несколько раз: 1-й LEDгорит постоянно, 3-й не включается вообще, 2-й и 4-й моргают с изменяющейся частотой.

Эксперимент №7. Можно ли как-то иначе имитировать работу симметричного мультивибратора?
Схема та же. Программа моя:

//попарное 1-3, 2-4 перемигивание
//4х LED с постоянной частотой
unsignedint n;
void setup()
{
for (n=1; n<=4; n++)
{
pinMode(n,OUTPUT);
digitalWrite(n,LOW);
}
}
void loop()
{
digitalWrite(1,HIGH);
digitalWrite(3,HIGH);
delay(500);
digitalWrite(1,LOW);
digitalWrite(3,LOW);

digitalWrite(2,HIGH);
digitalWrite(4,HIGH);
delay(500);
digitalWrite(2,LOW);
digitalWrite(4,LOW);
}

Эксперимент 8. «Полицейская мигалка».
Шесть светодиодов (3 красных и 3 синих) моргают таким образом: сначала 3 красных быстро мигают 6 раз, затем 3 синих быстро мигают 6 раз, затем всё повторяется.
Программа моя:

Эмуляция в

Таким вот образом. «В железе» собирать не стал, поскольку ничего нового в схеме нет, и работать она будет стопудово.
Возвращаясь к «первоисточнику» (имеется в виду книга Мамичева), хочу отметить, эксперименты в ней далеко не так просты, как заявлено автором в названии. Это касается как программной, так и аппаратной частей. «От простого к сложному» происходит резко, скачками, и далеко не всякий желающий освоить Arduino «с нуля» сможет разобраться, например, даже в первых скетчах. А уж потом – и подавно.

©SEkorp, 27-фев-2019


НАЗАД на страницу РАДИОардуино