Arduino:Примеры/AnalogWriteMega: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<syntaxhighlight lang="c">» на «<syntaxhighlight lang="c" enclose="div">»)
 
Нет описания правки
 
(не показано 7 промежуточных версий этого же участника)
Строка 3: Строка 3:
{{Myagkij-редактор}}
{{Myagkij-редактор}}


== Использование функции AnalogWrite для затухания-загорания светодиодов на Arduino Mega <ref>[http://www.arduino.cc/en/Tutorial/AnalogWriteMega Arduino - Analog Write with 12 LEDs on an Arduino Mega]</ref>==
= Использование функции AnalogWrite для затухания-загорания светодиодов на Arduino Mega <ref>[http://www.arduino.cc/en/Tutorial/AnalogWriteMega Arduino - Analog Write with 12 LEDs on an Arduino Mega]</ref>=


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


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


* Плата '''Arduino Mega''';
* [[Плата Arduino Mega]] - 1 шт.;
* 12 светодиодов;
* [[Светодиод]] - 12 шт.;
* 12 резисторов на '''220 Ом''';
* [[Резистор]] на [[220 Ом]] - 12 шт.;
* Провода-перемычки;
* Провода-перемычки;
* Макетная плата '''Breadboard''';
* [[Макетная плата]] - 1 шт. ;


== Цепь ==
== Цепь ==


[[File:arduinomegaPWM_bb_AnalogWriteMega.png]]
[[File:arduinomegaPWM_bb_AnalogWriteMega.png|frame|center|'''Рис. 1.''' Подключение 12 светодиодов к плате Arduino Mega.|alt=Рис. 1. Подключение 12 светодиодов к плате Arduino Mega.]]


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


== Схема ==
== Схема ==


[[File:arduinomegaPWM_sch_AnalogWriteMega.png]]
[[File:arduinomegaPWM_sch_AnalogWriteMega.png|frame|center|'''Рис. 2.''' Схема подключения 12 светодиодов к плате Arduino Mega.|alt=Рис. 2. Схема подключения 12 светодиодов к плате Arduino Mega.]]


== Код ==
== Код ==


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


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++)
for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++)
</syntaxhighlight>
</syntaxhighlight>


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


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
for (int brightness = 0; brightness < 255; brightness++) {
for (int brightness = 0; brightness < 255; brightness++) {
       analogWrite(thisPin, brightness);
       analogWrite(thisPin, brightness);
Строка 44: Строка 44:
</syntaxhighlight>
</syntaxhighlight>


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


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
for (int brightness = 255; brightness >= 0; brightness--) {
for (int brightness = 255; brightness >= 0; brightness--) {
       analogWrite(thisPin, brightness);
       analogWrite(thisPin, brightness);
Строка 53: Строка 53:
</syntaxhighlight>
</syntaxhighlight>


По достижении нуля программа делает задержку в '''100 миллисекунд''', а затем снова возвращается к первой [[Arduino:Справочник языка Arduino/Управляющие операторы/for|for]], берется за следующий светодиод и начинает все заново.
По достижении нуля программа делает задержку в 100 миллисекунд, а затем снова возвращается к первой [[Arduino:Справочник языка Arduino/Управляющие операторы/for|for]], берется за следующий [[светодиод]] и начинает все заново.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
   Использование функции analogWrite() на Arduino Mega
   Использование функции analogWrite() на Arduino Mega
Строка 103: Строка 103:
</syntaxhighlight>
</syntaxhighlight>


==См.также==
=См.также=


# [[Arduino:Справочник языка Arduino/Управляющие операторы/for|for]]
# [[Arduino:Справочник языка Arduino/Управляющие операторы/for|for]]
Строка 114: Строка 114:
# [[Arduino:Примеры/ForLoop|ForLoop]]
# [[Arduino:Примеры/ForLoop|ForLoop]]


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


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Пример]]
[[Категория:Пример]]
[[Категория:Примеры]]
[[Категория:Примеры]]
[[Категория:Пример программирования Arduino]]
[[Категория:Пример программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:Примеры программирования Arduino]]

Текущая версия от 09:22, 24 февраля 2023

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


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

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

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

Цепь

Рис. 1. Подключение 12 светодиодов к плате Arduino Mega.
Рис. 1. Подключение 12 светодиодов к плате Arduino Mega.

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

Схема

Рис. 2. Схема подключения 12 светодиодов к плате Arduino Mega.
Рис. 2. Схема подключения 12 светодиодов к плате Arduino Mega.

Код

Вначале займемся секцией * 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, берется за следующий светодиод и начинает все заново.

/*
  Использование функции analogWrite() на Arduino Mega
    
  Задает одновременное затухание/загорание светодиодов, 
подключенных к нескольким цифровым контактам – со 2-го по 13-ый.
  Скетч написан для Arduino Mega и с другими платами работать не будет.  
    
  Цепь:
  * Светодиоды подключены к цифровым контактам – со 2-го по 13-ый

  Создан 8 февраля 2009 Томом Иго (Tom Igoe)
  
  Этот код не защищен авторским правом.
  
 */
// Это константы – значения, которые не меняются. 
// Воспользуемся ими для того, чтобы дать названия используемым контактам:
const int lowestPin = 2;
const int highestPin = 13;


void setup() {
  // сделаем контакты со 2-го по 13-ый выходными контактами:
  for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { 
    pinMode(thisPin, OUTPUT); 
  }
}

void loop() {
  // делаем перебор контактов – один за другим:
  for (int thisPin =lowestPin; thisPin <= highestPin; thisPin++) { 
    // повышаем яркость выбранного светодиода (thisPin) от нуля до максимума:
    for (int brightness = 0; brightness < 255; brightness++) {
      analogWrite(thisPin, brightness);
      delay(2);
    } 
    // понижаем яркость выбранного светодиода (thisPin) с максимума до нуля:
    for (int brightness = 255; brightness >= 0; brightness--) {
      analogWrite(thisPin, brightness);
      delay(2);
    } 
    // делаем задержку между манипуляциями со светодиодами:
    delay(100);
  }
}

См.также

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

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