Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/AnalogWriteMega

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

Проверка/Оформление/Редактирование: Мякишев Е.А.


Использование функции AnalogWrite для затухания-загорания светодиодов на Arduino Mega [1]

В этом примере демонстрируется, как сделать так, чтобы один за одним затухали и загорались 12 светодиодов, подключенных к плате Arduino Mega.

Необходимое оборудование

  • Плата Arduino Mega;
  • 12 светодиодов;
  • 12 резисторов на 220 Ом;
  • Провода-перемычки;
  • Макетная плата Breadboard;

Цепь

ArduinomegaPWM bb AnalogWriteMega.png

Аноды (длинные ноги с положительным зарядом) 12-ти светодиодов подключите к цифровым контактам Arduino (со 2-го по 13-ый), но не напрямую, а через токоограничивающие резисторы номиналом 220 Ом. Катоды (короткие ноги с отрицательным зарядом) подключите к «земле» (GND).

Схема

ArduinomegaPWM sch AnalogWriteMega.png

Код

Вначале займемся секцией * setup()‎ и впишем туда функцию for, задача которой – задать цифровые контакты со 2-го по 13-ый как выходные контакты. Далее перемещаемся в секцию loop(), где воспользуемся сразу тремя функциями for. Ниже – первая из них. С ее помощью код будет перемещаться от одного светодиода к другому – от самого «низкого» (lowestPin, т.е. от того, чья цифра меньше) к самому «высокому» (highestPin, т.е. к тому, чья цифра больше):

for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++)

Теперь вторая – делаем так, чтобы светодиоды загорались один а другим. Программа последовательно выбирает то один, то другой выходной контакт (соответствующий тому или иному светодиоду), а затем передает ему значение переменной brightness. Значение этой переменной, тем временем, постоянно увеличивается по принципу: один цикл – плюс один пункт.

for (int brightness = 0; brightness < 255; brightness++) {
      analogWrite(thisPin, brightness);
      delay(2);
}

Когда широтно-импульсная модуляция (ШИМ) на выходном контакте достигает максимума (255), в дело вступает третья for. Ее задача – не увеличивать значение переменной brightness, а уменьшать ( по тому же принципу: один цикл – минус один пункт), тем самым снижая яркость светодиода, пока он не погаснет совсем:

for (int brightness = 255; brightness >= 0; brightness--) {
      analogWrite(thisPin, brightness);
      delay(2);
}

По достижении нуля программа делает задержку в 100 миллисекунд, а затем снова возвращается к первой for, берется за следующий светодиод и начинает все заново.

  1. /*
  2.   Использование функции analogWrite() на Arduino Mega
  3.    
  4.   Задает одновременное затухание/загорание светодиодов,
  5. подключенных к нескольким цифровым контактам – со 2-го по 13-ый.
  6.   Скетч написан для Arduino Mega и с другими платами работать не будет.  
  7.    
  8.   Цепь:
  9.   * Светодиоды подключены к цифровым контактам – со 2-го по 13-ый
  10.  
  11.   Создан 8 февраля 2009 Томом Иго (Tom Igoe)
  12.  
  13.   Этот код не защищен авторским правом.
  14.  
  15.  */
  16. // Это константы – значения, которые не меняются.
  17. // Воспользуемся ими для того, чтобы дать названия используемым контактам:
  18. const int lowestPin = 2;
  19. const int highestPin = 13;
  20.  
  21.  
  22. void setup() {
  23.   // сделаем контакты со 2-го по 13-ый выходными контактами:
  24.   for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) {
  25.     pinMode(thisPin, OUTPUT);
  26.   }
  27. }
  28.  
  29. void loop() {
  30.   // делаем перебор контактов – один за другим:
  31.   for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) {
  32.     // повышаем яркость выбранного светодиода (thisPin) от нуля до максимума:
  33.     for (int brightness = 0; brightness < 255; brightness++) {
  34.       analogWrite(thisPin, brightness);
  35.       delay(2);
  36.     }
  37.     // понижаем яркость выбранного светодиода (thisPin) с максимума до нуля:
  38.     for (int brightness = 255; brightness >= 0; brightness--) {
  39.       analogWrite(thisPin, brightness);
  40.       delay(2);
  41.     }
  42.     // делаем задержку между манипуляциями со светодиодами:
  43.     delay(100);
  44.   }
  45. }

См.также

  1. for
  2. analogWrite()
  3. delay()
  4. AnalogInput
  5. AnalogInOutSerial
  6. Fade
  7. Calibration
  8. ForLoop

Внешние ссылки

  1. Arduino - Analog Write with 12 LEDs on an Arduino Mega