среда, 27 января 2016 г.

Заставим светодиоды мигать с разной частотой.

Перейдем сразу к коду программы или скетчу:
------------------------------
// 13 вывод имеет светодиод, подключенный на большинстве плат Arduino.
// заставим мигать два светодида подключеных последовательно к 13 pin
int led = 13;
int x=5; // используем переменную которая будет влиять на время горения светодиода

void setup() {
  // инициализируем цифровой PIN в качестве выхода.
  pinMode(led, OUTPUT);
digitalWrite(led, HIGH);   // зажигаем светодиоды при первом включении
  delay(3000);    // задежрка на 3 сек (светодиоды при этом продолжают гореть)
  digitalWrite(led, LOW);    // гасим светодиоды
}

// эта часть программы работает в бесконечном цикле
void loop() {
  digitalWrite(led, HIGH);   // зажигаем светодиоды
  delay(x);  // значение переменной Х определят времяя задержки в мс
  digitalWrite(led, LOW);    // гасим светодиоды
  delay(x);               // задержка
x=x+15; // увеличиваем время задержки на 15 мс
  if (x > 300)x=5; // проверяем если переменная Х станет больше 300
// то тогда ей присваиваем начальное значение равное 5

}
-----------------------------
обратите внимание на математический оператор: х=х+15 , это оператор присваивания. Работает он так: к ранее значению переменной х он прибавляет еще 15. И таким образом с каждым новым циклом переменная увеличивается на 15.

Все бы ничего но в бесконечном цикле это привело бы к тому что светодиод начал бы слишком долго светиться и слишком долго не горел (причем до бесконечности). Чтобы избежать этого мы ввели еще и условный оператор:
 if (x > 300)x=5;
работает он так: если значение переменной х меньше 3000 то команда после оператора х=5 (вы уже знаете что это значит, но все же я еще раз напомню что это оператор присваивания) опускаются и не выполняются. И таким образом вновь идет выполнение бесконечного цикла. 
Но как только значение х станет больше 300 (например 315) то условие выполнено и тогда выполниться оператор присваивания: х=5, то есть значение 315 будет "уменьшено" до 5. И цикл снова повторяется. 
То есть оператор усливия  if (x > 300)x=5; является "контрогайкой" которая не дает беконечно увеличивать значения переменной х и тем самым избежим "вечного" цикла мигания светодиода. 

ДЗ
1) что будет если в операторе  if (x > 300)x=5; значение 300 заменить на 100? А что при этом измениться если значение 300 увеличить до 1000?
2) что нужно изменить в схеме и скетче чтобы два светодиода мигали независимо друг от друга с разной частотой?

Комментариев нет:

Отправить комментарий