Урок №3 по робототехнике Подключение нескольких светодиодов к Ардуино

Раздел Дополнительное образование
Класс 7 класс
Тип Конспекты
Автор
Дата
Формат docx
Изображения Нет
For-Teacher.ru - все для учителя
Поделитесь с коллегами:

4 урок Arduino


Управление несколькими светодиодами.
В этомуроке вы узнаете, как управлять несколькими светодиодами. Для этого установите ещё 3 светодиода на плату и соедините их с резисторами и выводами Ardunio. Для того, чтобы включать и выключать светодиоды по очереди надо написать программу:

//Multi LED Blink

int led1Pin = 4;

int led2Pin = 5;

int led3Pin = 6;

int led4Pin = 7;

void setup() {

//установка пинов как ВЫХОД

pinMode(led1Pin, OUTPUT);

pinMode(led2Pin, OUTPUT);

pinMode(led3Pin, OUTPUT);

pinMode(led4Pin, OUTPUT);

}

void loop() {

digitalWrite(led1Pin, HIGH);//зажечь светодиод

delay(1000);//задержка 1 сек

digitalWrite(led1Pin, LOW);//потушить светодиод

delay(1000);//задержка 1 сек

//do the same for the other 3 LEDs

digitalWrite(led2Pin, HIGH);//зажечь светодиод

delay(1000);// задержка 1 сек

digitalWrite(led2Pin, LOW);//потушить светодиод

delay(1000);//задержка 1 сек

digitalWrite(led3Pin, HIGH);//зажечь светодиод

delay(1000);// задержка 1 сек

digitalWrite(led3Pin, LOW);//потушить светодиод

delay(1000);//задержка 1 сек

digitalWrite(led4Pin, HIGH);//зажечь светодиод

delay(1000);// задержка 1 сек

digitalWrite(led4Pin, LOW);//потушить светодиод

delay(1000);//задержка 1 сек

}

Эта программа будет отлично работать, но это не самое рациональное решение. Код надо изменить. Для того, чтобы программа работала раз за разом мы применим конструкцию, которая называется цикл For.
Циклы удобны, когда надо повторить одно и тоже действие несколько раз. В коде, проведенном выше мы повторяем строки

digitalWrite (led4Pin, HIGH);

delay (1000);

digitalWrite (led4Pin, LOW);

delay (1000);

Регулировка яркости светодиодов
Иногда вам надо будет менять яркость светодиодов в программе. Это можно сделать с помощью команды analogWrite(). Эта команда так быстро включает и выключает светодиод, что глаз не видит это мерцание. Если светодиод половину времени будет включён, а половину выключен, то визуально будет казаться, что он светится в половину своей яркости. Это называется широтно-импульсная модуляция (ШИМ или PWM по-английски). Шим применяется довольно часто, так как с ее помощью можно управлять "аналоговым" компонентом с помощью цифрового кода. Не все выводы Ardunio подходят для этих целей. Только те выводы, около которых нарисовано такое обозначение "~". Вы увидите его рядом с выводами 3,5,6,9,10,11.
Соедините один из ваших светодиодов с одним из выводов ШИМ(у автора это вывод 9). Теперь запуститьскетч мигания светодиода, но прежде измените команду digitalWrite() на analogWrite(). analogWrite() имеет два аргумента: первый это номер вывода, а второй- значение ШИМ (0-255), применительно к светодиодам это будет их яркость свечения, а для электродвигателей скорость вращения. Ниже представлен код примера для разной яркости светодиода.

//Меняем яркость светодиода

int ledPin = 9;//к этому выводу подсоединен светодиод

void setup() {

pinMode(ledPin, OUTPUT);// инициализация пина на вывод

}

void loop() {

analogWrite(ledPin, 255);//полная яркость (255/255 = 1)

delay(1000);// пауза 1 сек

digitalWrite(ledPin, LOW);//выключить светодиод

delay(1000);//пауза 1 сек

analogWrite(ledPin, 191);//яркость на 3/4 (191/255 ~= 0.75)

delay(1000);//пауза 1 сек

digitalWrite(ledPin, LOW);//выключить светодиод

delay(1000);//пауза 1 сек

analogWrite(ledPin, 127);//половина яркости (127/255 ~= 0.5)

delay(1000);// пауза 1 сек

digitalWrite(ledPin, LOW);//выключить светодиод

delay(1000);//пауза 1 сек

analogWrite(ledPin, 63);//четверть яркости (63/255 ~= 0.25)

delay(1000);// пауза 1 сек

digitalWrite(ledPin, LOW);//выключить светодиод

delay(1000);//пауза 1 сек

}

Попробуйте поменять значение ШИМ в команде analogWrite (),чтобы увидеть, как это влияет на яркость.
Далее вы узнаете, как регулировать яркость плавно от полной до нулевой. Можно ,конечно, скопировать кусок кода 255 раз

analogWrite(ledPin, brightness);

delay(5);//short delay

brightness = brightness + 1;

Но, сами понимаете - это будет не практично. Для этого лучше всего использовать цикл FOR, который использовали ранее.
В следующем примере используются два цикла, один для уменьшения яркости от 255 до 0

for (int brightness=0;brightness=0;brightness--){

analogWrite(ledPin,brightness);

delay(5);

}

delay(5) используется, чтобы замедлить скорость нарастания и уменьшения яркости 5*256=1280 мсек= 1.28 сек.)
В первой строке используется "brightness-" ,для того чтобы значение яркости уменьшалось на 1, каждый раз, когда цикл повторяется. Обратите внимание, что цикл будет работать до тех пор, пока brightness >=0.Заменив знак > на знак >= мы включили 0 в диапазон яркости. Ниже смоделирован этот скетч.

//плавно меняем яркость

int ledPin = 9;//к этому пину подключен светодиод

void setup() {

pinMode(ledPin, OUTPUT);// инициализация пина на выход

}

void loop() {

//плавно увеличиваем яркость (0 to 255)

for (int brightness=0;brightness=0;brightness--){

analogWrite(ledPin,brightness);

delay(5);

}

delay(1000);//ждем 1 сек

//плавно уменьшаем яркость (255 to 0)

for (int brightness=255;brightness>=0;brightness--){

analogWrite(ledPin,brightness);

delay(5);

}

delay(1000);//ждем 1 сек

}

}

Это видно не очень хорошо, но идея понятна.


© 2010-2022