телевизори. Конзоли. Проектори и аксесоари. Технологии. Цифрова телевизия

Използване на for цикъл в Arduino. FOR и WHILE цикли в Arduino. Променливи и типове данни

Дизайн заизползва се за повтаряне на блок от изрази, затворени в брекети. Броячът на нарастване обикновено се използва за увеличаване и прекратяване на цикъл. Оператор заПодходящ за всякакви повтарящи се дейности и често се използва във връзка с масиви за събиране на данни/изход.

Цикъл заглавка засе състои от три части:

за (инициализация ; състояние ; нарастване) (оператори, изпълнявани в цикъл)

Инициализацията се извършва първо и само веднъж. Всеки път в цикъла се проверява условие, ако е вярно, се изпълняват блок от оператори и увеличение, след което условието се проверява отново. Когато булевата стойност на условието стане невярна, цикълът завършва.

Пример

// Затъмняване на светодиода чрез PWM pin int PWMpin = 10; // LED в серия с резистор 470 ома за 10 пина void setup() ( // не е необходима настройка) void loop() ( for (int i=0; i<= 255; i++){ analogWrite(PWMpin, i); delay(10); } }

Цикъл за C е много по-гъвкав от циклите зав други езици за програмиране, например BASIC. Всеки или всичките три елемента на заглавката могат да бъдат пропуснати, въпреки че са задължителни точки и запетая. Също така операторите за инициализация на цикъла, условни и инкрементни могат да бъдат всеки валиден C оператор с независими променливи и да използват всеки C тип данни, включително плаващи числа. Те са необичайни за цикъла за типовете оператори дават възможност да се предостави софтуерно решение на някои нестандартни проблеми.

Например, използването на умножение в оператор за брояч на цикъл ви позволява да създадете логаритмична прогресия:

For(int x = 2; x< 100; x = x * 1.5){ println(x); }

Генерирани: 2,3,4,6,9,13,19,28,42,63,94

Друг пример, плавно намаляване или увеличаване на нивото на сигнала към светодиод с помощта на един цикъл за:

Void loop())( int x = 1; for (int i = 0; i > -1; i = i + x)( analogWrite(PWMpin, i); if (i == 255) x = -1; / / управление на превключване при максимално закъснение (10); ) )

Дизайн заизползва се за повтаряне на блок от изрази, затворени във фигурни скоби. Броячът на нарастване обикновено се използва за увеличаване и прекратяване на цикъл. Оператор заПодходящ за всякакви повтарящи се дейности и често се използва във връзка с масиви за събиране на данни/изход.

Цикъл заглавка засе състои от три части:

за (инициализация ; състояние ; нарастване) (оператори, изпълнявани в цикъл)

Инициализацията се извършва първо и само веднъж. Всеки път в цикъла се проверява условие, ако е вярно, се изпълняват блок от оператори и увеличение, след което условието се проверява отново. Когато булевата стойност на условието стане невярна, цикълът завършва.

Пример
// Затъмняване на светодиода чрез PWM pin int PWMpin = 10; // LED в серия с резистор 470 ома за 10 пина void setup() ( // не е необходима настройка) void loop() ( for (int i=0; i<= 255; i++){ analogWrite(PWMpin, i); delay(10); } }

Цикъл за C е много по-гъвкав от циклите зав други езици за програмиране, например BASIC. Всеки или всичките три елемента на заглавката могат да бъдат пропуснати, въпреки че са задължителни точки и запетая. Също така операторите за инициализация на цикъла, условни и инкрементни могат да бъдат всеки валиден C оператор с независими променливи и да използват всеки C тип данни, включително плаващи числа. Те са необичайни за цикъла за типовете оператори дават възможност да се предостави софтуерно решение на някои нестандартни проблеми.

Например, използването на умножение в оператор за брояч на цикъл ви позволява да създадете логаритмична прогресия:

For(int x = 2; x< 100; x = x * 1.5){ println(x); }

Генерирани: 2,3,4,6,9,13,19,28,42,63,94

Друг пример, плавно намаляване или увеличаване на нивото на сигнала към светодиод с помощта на един цикъл за:

Void loop() ( int x = 1; for (int i = 0; i > -1; i = i + x)( analogWrite(PWMpin, i); if (i == 255) x = -1; // управление на превключване при максимално закъснение (10); ) )

Добър ден. Пред теб, скъпи читатели, третият урок по програмиране на Arduino.

  • се запознаха с дизайна на платката;
  • Сглобихме го хардуерно и флашнахме първата си схема.

Днес ще сглобим схема, която ще използва два цифрови изхода на платката Ардуино Уно. Съответно ще ни трябват 2 светодиода с различни цветове (за по-голяма яснота), 2 резистора, джъмпери и същата платка (или каквото сте използвали за монтаж преди). В една от схемите ще включим червен светодиод, а във втория - бял.

Да започнем да сглобяваме " домашни продукти“ според следната диаграма. Препоръчвам да използвате програмата Fritzing във вашите проекти. С негова помощ можете да планирате разположението на веригите преди действителната инсталация.

Опитайте се да вземете джъмпери с различни цветове, за да не се объркате по време на монтажа. Може би в в този примерСъветът може да звучи абсурдно, но когато имате до дузина различни елементи на дъската и поне 2 джъмпера са свързани към всеки от тях, ще запомните моя съвет. 🙂

Отворете софтуерната среда Arduino IDE.

Пишем програмата.

Зареждаме го и гледаме резултата. Червените и белите светодиоди мигат последователно.

Примерите за учебни задачи винаги са били съкровищница на „ограничено въображение“ или пример как не трябва да се пише техническа задача...

Нека си представим, че току-що сме написали системи за управление на електродвигател. Нека забравим, че подпрограмата може да вършее вечно. Двигателят ни пали и гасне. Цикъл на включване/изключване стартира чрез натискане на „митичния бутон“.

Трябва да премине през цикъл на включване/изключване. 10 пъти. Мисля, че малко хора искат да стоят до ревяща машина и да натискат някакъв бутон... Затова модернизираме програмата.

Копираме блок от 4 реда (включен и изключен бял светодиод) 9 пъти - накрая получаваме 10 цикъла на включване/изключване. Нека добавим "втори двигател" - червеният светодиод ще се включва/изключва само веднъж.

Заредете програмата и вижте резултата.

Всичко се получи, но ето го проблемът: какво ще стане, ако нуждата от цикли за включване/изключване се увеличи до 100 или 1000, ще копираме ли всичко отново? Някак си не искам... Така че спри! Ти и аз сме учили. Време е да приложите знанията си на практика. За нашата задача цикъл с даден брой повторения е идеален - за цикъл.За да не зареждаме програмата с глобални променливи, ще декларираме локална променлива „брояч за изпълнение на цикъл“ в заглавката на цикъла.

Описание

Операторът for се използва за повтаряне на блок от оператори, затворени във фигурни скоби. Брояч на нарастване обикновено се използва за увеличаване и прекратяване на цикъла. Операторът for е полезен за всяка повтаряща се операция и често се използва в комбинация с масиви за работа с колекции от данни/пинове.

Синтаксис

За (инициализация; условие; увеличение) ( // израз(и);)

Параметри

инициализация: случва се първо и точно веднъж.
състояние: всеки път, когато преминете през цикъла, условието се тества; ако е вярно, блокът с изрази и нарастванесе изпълнява, след това състояниесе тества отново. Когато състояниестане false, цикълът завършва.
увеличение: изпълнява се всеки път през цикъла, когато продължението е вярно.

Примерен код

// Затъмняване на светодиод с помощта на PWM щифт int PWMpin = 10; // LED в серия с резистор 470 ома на пин 10 void setup() ( // не е необходима настройка) void loop() ( for (int i = 0; i<= 255; i++) { analogWrite(PWMpin, i); delay(10); } }

Бележки и предупреждения

Цикълът „for“ на C е много по-гъвкав от циклите „for“, които се срещат в някои други компютърни езици, включително BASIC. Всеки или всичките три елемента на заглавката могат да бъдат пропуснати, въпреки че точката и запетая са задължителни. Също така изразите за инициализация, условие и увеличение могат да бъдат всякакви валидни C изрази с несвързани променливи и да използват всякакви C++ типове данни, включително плаващи. Тези типове необичайни за оператори могат да предоставят решения на някои редки проблеми с програмирането.

“, научихме как да използваме цикъл „for“, за да организираме работата на контролера. Този тип цикъл се използва навсякъде и повече от покрива „нуждата от циклични операции“. Има обаче и друг вид цикъл - "while". Не е по-добър от for цикъл, просто използва различни принципи.

В повечето случаи можете да изберете кой от двата вида цикли да използвате. В използвахме "while", за да поставим програмата на пауза, докато потребителят въведе необходимите данни. В този урок ще разгледаме по-отблизо как работи този цикъл, като използваме платформата Arduino като пример.

Нека продължим да работим с веригата, състояща се от 2 светодиода.

Освен това ще продължим да работим с кода, който финализирахме в урок 14.

Обратно в миналото: контролерът подканва потребителя за данни, изчаква въвеждане и след това присвоява получените стойности на променливи мига ЧислоЗеленоИ blinkNumberRed. Това позволява на потребителя да контролира броя на миганията на всеки от двата светодиода.

За да разширите мирогледа на програмиста, струва си да се научите да използвате два типа цикли за изпълнение на едни и същи задачи и в бъдеще можете да демонстрирате симпатия към един или друг тип.

Нека да разберем как работи:

вътр z= 1; // декларираме променлива и й присвояваме стойност 1

докато (z<=10) { //запускаем цикл докато

Сериен. println(z); //изведе текущата стойност на променливатаz чрез сериен порт

z= z+1 // увеличаване на стойността на променливатаzот 1

) // край на цикъла

Цикълът while ще продължи да изпълнява команди, докато „условието“, описано в скоби, е вярно. В примера по-горе цикълът ще продължи да изпълнява команди, докато z е по-малко или равно на 10. Тялото на цикъла изпълнява 2 команди:

  • Извеждане на стойността на променлива през сериен порт;
  • Увеличаване на стойността на променлива с 1 (научно наречено инкрементиране).

Чрез увеличаване на стойността на променливата, програмата в крайна сметка ще излезе от цикъла. Ако си представим за секунда, че сме забравили да посочим този ред или възникне някакъв вид повреда, тогава програмата щастливо ще влезе в цикъл (с други думи, ще замръзне).

Цикълът започва своята работа с проверка на истинността на условието. Ако z е по-малко или равно на 10, тогава програмата изпълнява цикъла. След това отново се проверява състоянието и т.н. Когато стойността на променливата достигне z = 11, условието вече няма да е вярно. Програмата няма да изпълни цикъла и ще премине на следващия ред веднага след фигурната скоба на цикъла.

Стига теория, да преминем към практиката. Нека заменим for циклите в изходния код с while цикли.

Flasher, изпълнен от цикъла FOR:

за (int i = 1; i<= blinkNumberGreen; i++) // стартиране цикълза

{

Сериен. печат(„Мига зелено“);

Serial.println(i);

digitalWrite(greenLed, HIGH); //включи зелено Светодиод

закъснение (timeOnGreenLed); //чакаме

digitalWrite(greenLed, LOW); //изключи зелено Светодиод

забавяне (timeOffGreenLed); //чакаме

}

Мигач в цикъл WHILE:

вътр аз=1; //декларираме променлива и й присвояваме стойност 1

докато аз<= blinkNumberGreen)

{ // стартиране цикълдокато

Serial.print("Зелено премигна «);

Serial.println(i);

digitalWrite(greenLed,HIGH); //включи зелено Светодиод

закъснение (timeOnGreenLed); //чакаме

digitalWrite(greenLed,LOW); //изключи зелено Светодиод

забавяне (timeOffGreenLed); //чакаме

аз= аз+1 //увеличете стойността на променливата с 1

}

Запазете програмата и заредете фърмуера в контролера. Нека да видим резултата.



Свързани публикации