Четверг, 18 Сентябрь 2014 01:21

AVR ATMega 328-P Arduino UNO. Одновременное зажигание и последовательный алгоритм

Автор
Оцените материал
(3 голосов)

В этой статье рассматривается алгоритм, который позволяет зажигаться двум или более светодиодам одновременно. Содержит в одном массиве сразу несколько циклов с различным морганием светодиодов. Интересное решение. Отлично подойдет для тренировок и понятию написания кода. Так же имеется видео с наглядным примером.

Описание:

В прошлой статье я показал пример кода, который заставлял моргать светодиоды в хаотичном порядке, не рандомно (от слова random). Тут же я решил показать код на той же самой схеме и процессоре, который заставляет моргать светодиоды не по 1, а сразу по нескольку. При этом в 1 и том же массиве loop(), сразу несколько вариантов моргания, который идут по очереди и очень красиво смотрятся.

Ещё раз повторюсь, что схему я не менял, она все та же. Вот её скрин:

Программатор, естественно тот же.

Задача была заставить моргать лампочки сразу по нескольку штук. В моем случае их 8 штук и принцип должен был быть такой:

  • 1 - 8
  • 2 - 7
  • 3 - 6
  • 4 - 5

Это у меня и вышло, но тут мне пришло в голову добавить ещё немного красоты и разнообразия. Никаких особых массивов я не использовал, а элементарное пошаговое инициализирование светодиодов.

Теперь давайте рассмотрим код программы.

Код:

//Специально для http://linuxmd.net
//Автор: Валентин Щербаков
void setup(){
  pinMode(13, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
}

void loop(){
  digitalWrite(13, HIGH);
  digitalWrite(6, HIGH);
  delay(500);
  digitalWrite(13,LOW);
  digitalWrite(6,LOW);
  delay(500);
 
  digitalWrite(12, HIGH);
  digitalWrite(7, HIGH);
  delay(500);
  digitalWrite(12,LOW);
  digitalWrite(7,LOW);
  delay(500);
 
  digitalWrite(11, HIGH);
  digitalWrite(8, HIGH);
  delay(500);
  digitalWrite(11,LOW);
  digitalWrite(8,LOW);
  delay(500);
 
  digitalWrite(10, HIGH);
  digitalWrite(9, HIGH);
  delay(500);
  digitalWrite(10,LOW);
  digitalWrite(9,LOW);
  delay(500);
 
  digitalWrite(6, HIGH);
  delay(500);
  digitalWrite(6,LOW);
  delay(500);
 
  digitalWrite(7, HIGH);
  delay(500);
  digitalWrite(7,LOW);
  delay(500);
 
  digitalWrite(8, HIGH);
  delay(500);
  digitalWrite(8,LOW);
  delay(500);
 
  digitalWrite(9, HIGH);
  delay(500);
  digitalWrite(9,LOW);
  delay(500);
 
  digitalWrite(10, HIGH);
  delay(500);
  digitalWrite(10,LOW);
  delay(500);
 
  digitalWrite(11, HIGH);
  delay(500);
  digitalWrite(11,LOW);
  delay(500);
 
  digitalWrite(12, HIGH);
  delay(500);
  digitalWrite(12,LOW);
  delay(500);
 
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13,LOW);
  delay(500);

  digitalWrite(6, HIGH);
  delay(400);
  digitalWrite(7, HIGH);
  delay(350);
  digitalWrite(8, HIGH);
  delay(300);
  digitalWrite(9, HIGH);
  delay(250);
  digitalWrite(10, HIGH);
  delay(200);
  digitalWrite(11, HIGH);
  delay(150);
  digitalWrite(12, HIGH);
  delay(100);
  digitalWrite(13, HIGH);
}


Думаю тут можно обойтись без объяснений кода, ведь команды были описаны в прошлой статье. Единственное, что тут другое - это ход включения и выключения светодиодов, который вы сами можете проследить. Ничего сложного :)

Может кто-то скажет, что программа плохая и код длинный, все можно было сделать в 1 массиве в 10 раз короче. Можно, не спорю, но это один из вариантов. Если же есть желание показать свое мастерство, то прошу в комментарии или на форум, где обсудим "крутость" алгоритмов. А пока можете насладиться работой программы на видео на нашем канале в YouTube.

 

Обсудить на форуме

Прочитано 2003 раз Последнее изменение Четверг, 18 Сентябрь 2014 02:26
Валентин Олегович

Администратор сайта.

linuxmd.net

Добавить комментарий

1. Ругательства запрещены
2. Реклама запрещена

Защитный код
Обновить

О нас | Рассылка | Правила сайта | Правила форума | Поиск

При копировании какого-либо контента с сайта, ссылка на источник - ОБЯЗАТЕЛЬНА! В случае несоблюдения данного пункта будет отправлена жалоба на хостинг нарушителя и сайт будет закрыт (или оштрафован) по усмотрению оператора. Верьте в силу копирайта. Основатель портала: Валентин Щербаков 2013 - 2016

Программное обеспечение сайта распространяется по лицензии GNU General Public License.