Электрохимическое никелирование. Технологии никелирования в домашних условиях, оборудование и составы раствора
Конструкция for используется для повторения блока операторов, заключенных в фигурные скобки. Счетчик приращений обычно используется для приращения и завершения цикла. Оператор for подходит для любых повторяющихся действий и часто используется в сочетании с массивами коллекций данных/выводов.
Заголовок цикла for состоит из трех частей:
for (initialization ; condition ; increment ) {операторы выполняющиеся в цикле}
Инициализация (Initialization) выполняется самой первой и один раз. Каждый раз в цикле проверяется условие (condition), если оно верно, выполняется блок операторов и приращение (increment), затем условие проверяется вновь. Когда логическое значение условия становится ложным, цикл завершается.
Пример
// Затемнение светодиода с использованием ШИМ-вывода int PWMpin = 10; // Светодиод последовательно с резистором 470 ом на 10 выводов void setup() { // настройка не нужна } void loop() { for (int i=0; i <= 255; i++){ analogWrite(PWMpin, i); delay(10); } }Цикл for в Си гораздо более гибкий, чем циклы for в других языках программирования, например, в Бейсике. Любой из трех или все три элемента заголовка могут быть опущены, хотя точки с запятой обязательны. Также операторы для инициализации, условия и приращения цикла могут быть любым допустимым в Си операторами с независимыми переменными, и использовать любой тип данных Си, включая данные с плавающей точкой (floats). Эти необычные для цикла for типы операторов позволяют обеспечить программное решение некоторых нестандартных проблем.
Например, использование умножения в операторе счетчика цикла позволяет создавать логарифмическую прогрессию:
For(int x = 2; x < 100; x = x * 1.5){ println(x); }
Генерируется: 2,3,4,6,9,13,19,28,42,63,94
Другой пример, плавное уменьшение или увеличение уровня сигнала на светодиод с помощью одного цикла for :
Void loop() { int x = 1; for (int i = 0; i > -1; i = i + x){ analogWrite(PWMpin, i); if (i == 255) x = -1; // переключение управления на максимуме delay(10); } }
», мы узнали, как использовать цикл «for» для организации работы контроллера. Этот тип цикла используется повсеместно и с лихвой перекрывает «потребность в зацикленных операциях». Однако существует еще один тип цикла — «while». ничем не лучше, чем цикл for, просто он использует в работе другие принципы.
В большинстве случаем можно выбирать, какой из двух типов циклов использовать. В мы использовали «while» для приостановки программы, до момента введения пользователем требуемых данных. В этом уроке мы более подробно рассмотрим, как работают этот цикл на примере платформы Arduino.
Продолжим работу со схемой, состоящую из 2-х светодиодов.
Кроме того, мы продолжим работать с кодом, который мы дорабатывали в 14 уроке.
Назад в прошлое: контроллер запрашивает у пользователя данные, ожидает ввода, а затем присваивает полученные значения переменным blinkNumberGreen и blinkNumberRed . Это позволяет пользователю управлять количество миганий каждого из 2-х светодиодов.
Для расширения мировоззрения программиста, стоит научиться использовать два типа циклов для реализации одних и тех же задач, а в дальнейшем уже можно демонстрировать симпатии к тому либо иному типу.
Давайте разбираться, как это работает:
int z = 1 ; // объявляем переменную и присваиваем ей значение 1
while (z <=10) { //запускаем цикл while
Serial . println (z ); //выводим текущее значение переменной z через последовательный порт
z = z +1 // увеличиваем значение переменной z на 1
} // завершаем цикл
Цикл while будет продолжать выполнять команды до тех пор, пока «условие», описанное в круглых скобках, истинно. В приведенном выше примере, цикл будет продолжать выполнять команды пока z меньше или равно 10. В теле цикла отрабатываются 2 команды:
- Выведение значения переменной через последовательный порт;
- Увеличение значение переменной на 1 (по-научному – инкрементирование).
Благодаря увеличению значения переменной, в конечном итоге, программа выйдет из цикла. Если, представить на секунду, что мы забыли указать эту строку или произойдёт, какой-то сбой, то программа благополучно зациклится (иными словами зависнет).
Цикл начинает свою работу с того, что проверяет истинность условия. Если, z меньше или равно 10, то программа отрабатывает цикл. Затем следует повторная проверка условия и т.д. Когда значение переменной достигнет z = 11 , условие больше не будет истинным. Программа не отработает цикл и перейдёт в следующую строку, идущую сразу после фигурной скобки цикла.
Достаточно теории, переходим к практике. Заменим циклы for в исходном коде, на циклы while.
Мигалка в исполнении цикла FOR:
for (int i = 1; i <= blinkNumberGreen; i++) // запускаем цикл for
{
Serial . print (» Зелёный мигнул «);
Serial.println (i);
digitalWrite (greenLed, HIGH); // включаем зелёный светодиод
delay (timeOnGreenLed); // ждём
digitalWrite (greenLed, LOW); // выключаем зелёный светодиод
delay (timeOffGreenLed); // ждём
}
Мигалка в исполнении цикла WHILE:
int i =1; //объявляем переменную и присваиваем ей значение 1
while (i <= blinkNumberGreen)
{ // запускаем цикл while
Serial.print (» Зелёный мигнул «);
Serial.println(i);
digitalWrite(greenLed,HIGH); // включаем зелёный светодиод
delay(timeOnGreenLed); // ждём
digitalWrite(greenLed,LOW); // выключаем зелёный светодиод
delay(timeOffGreenLed); // ждём
i = i +1 //увеличиваем значение переменной на 1
}
Сохраняем программу и загружаем прошивку в контроллер. Смотрим на результат.