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

Arduino:Примеры/MultipleBlinks

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

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

Контакты:

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


Мигание несколькими светодиодами[1]

Библиотека Scheduler позволяет плате Arduino Due выполнять несколько задач одновременно. В этом примере мы настроим несколько функций таким образом, чтобы они выполнялись одновременно с loop(), благодаря чему у нас будет несколько отдельных loop-функций, не требующих отдельного таймера.

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

  • Плата Arduino Due
  • Три светодиода
  • Три резистора на 220 Ом

Цепь

Аноды светодиодов нужно подключить последовательно при помощи 220-Омовых резисторов к 11-ому, 12-ому и 13-ому контактам на Due. Катоды светодиодов нужно подключить к «земле».

Код

  1. // раз мы хотим выполнить несколько задач одновременно, то подключаем библиотеку Scheduler:
  2. #include <Scheduler.h>
  3.  
  4. int led1 = 13;
  5. int led2 = 12;
  6. int led3 = 11;
  7.  
  8. void setup() {
  9.   Serial.begin(9600);
  10.  
  11.   // выставляем три светодиодных контакта в положение OUTPUT:
  12.   pinMode(led2, OUTPUT);
  13.   pinMode(led3, OUTPUT);
  14.  
  15.   // добавляем в планировщик функции loop2 и loop3;
  16.   // loop() всегда запускается по умолчанию:
  17.   Scheduler.startLoop(loop2);
  18.   Scheduler.startLoop(loop3);
  19. }
  20.  
  21. // Задача номер 1 – мигать светодиодом с секундной задержкой:
  22. void loop() {
  23.   digitalWrite(led1, HIGH);
  24.  
  25.   // ВАЖНО:
  26.   // когда запущено несколько задач, delay() переводит задачу в
  27.   // состояние ожидания и передает управление другим задачам, тем
  28.   // самым гарантируя, что они будут выполняться:
  29.   delay(1000);
  30.  
  31.   digitalWrite(led1, LOW);
  32.   delay(1000);
  33. }
  34.  
  35. // Задача номер 2 – мигать светодиодом с 0,1-секундной задержкой:
  36. void loop2() {
  37.   digitalWrite(led2, HIGH);
  38.   delay(100);
  39.   digitalWrite(led2, LOW);
  40.   delay(100);
  41. }
  42.  
  43. // Задача номер 3 – прием команд через последовательный порт;
  44. // «0» выключает светодиод,
  45. // «1» включает светодиод:
  46. void loop3() {
  47.   if (Serial.available()) {
  48.     char c = Serial.read();
  49.     if (c=='0') {
  50.       digitalWrite(led3, LOW);
  51.       Serial.println("Led turned off!");  //  "Светодиод выключен!"    }
  52.     if (c=='1') {
  53.       digitalWrite(led3, HIGH);
  54.       Serial.println("Led turned on!");  //  "Светодиод выключен!"
  55.     }
  56.   }
  57.  
  58.   // ВАЖНО:
  59.   // функцию yield() нужно вызывать постоянно, чтобы передавать
  60.   // управление другим задачам:
  61.   yield();
  62. }

См.также

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

  1. Arduino.cc - MultipleBlinks