Вторник, 16 Сентябрь 2014 22:21

AVR ATMega 328-P Arduino UNO. Хаотичные огни LED.

Автор
Оцените материал
(1 Голосовать)

Готовая программа, которая управляет светодиодами с помощью процессора ATMega 328-P. Код написан специально под Arduino UNO R3. Включает в себя видео-демонстрацию, описание, код.

Хотел показать свою программу в деле. На самом деле ничего трудного нет. Элементарная инициализация светодиодов в хаотичном порядке. Это очень простая и логичная программа, которая заставляет светодиоды моргать с помощью delay(), потому что есть вариант зажигания лампочек без delay(). Об этом будут ещё статьи дальше.

Описание

Итак, что мы имеем? У меня в наборе:

  • Arduino UNO R3
  • Процессор AVR ATMega 328-P
  • Макетная плата
  • Светодиоды
  • Провода

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

На фотографии хорошо видно подключение. Подключены они параллельно и у каждого светодиода свое питание, которое подключается к одной из ножек на процессоре. Немного ниже я подробно опишу подключение.

Все это я подключил к Arduino.

На фото хорошо видно, что 8 светодиодов подключены к 8-и разным ножкам. У меня это: 13, 12, 11, 10, 9, 8, 7, 6.

Теперь разберемся с подключением, которое на самом деле состоит из 2-х проводков, но из-за большого количества светодиодов кажется, что их большая куча, которую не разобрать. Это не так.

Объясняю. На плате есть только МИНУС (земля или ground, GND) и ПЛЮС. Все, больше ничего нету. На плате я это подключил следующим образом. Все светодиоды стоят в ряд, только будьте внимательны, ибо на них тоже есть ПЛЮС и МИНУС. Если не так их засунуть в макетную плату, то они просто не будут гореть, даже если вся схема собрана правильно. Итак, один провод должен у нас отвечать за МИНУС и подключаться к GND на Arduin'e, как это показано на фото. На фото выше хорошо видно как именно я подключил все. Второй же провод идет непосредственно от ПЛЮСА на светодиоде к номеру ножки на процессоре. Вот и все, если же у вас не зажигается светодиод, то просто переверните его. Если не помогло, то хорошо всмотритесь в скриншот с подключением.

Код

// Программа написанная Валентином Щербаковым, специально для http://linuxmd.net

int led = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int led5 = 9;
int led6 = 8;
int led7 = 7;
int led8 = 6;

// the setup routine runs once when you press reset:
void setup() {               
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led7, OUTPUT);
  pinMode(led8, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {

  {
    digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led8, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led8, LOW);    // turn the LED off by making the voltage LOW
    delay(100);
  }// wait for a second

  {
    digitalWrite(led2, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led2, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led7, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led7, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led3, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led3, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led6, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led6, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led4, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led4, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

  {
    digitalWrite(led5, HIGH);   // turn the LED on (HIGH is the voltage level)              // wait for a second
    delay(100);
    digitalWrite(led5, LOW);    // turn the LED off by making the voltage LOW
  }// wait for a second

}

В этой программе int led означает (инициализация лампочки, где вместо led может быть любое другое слово, просто я так обозвал свои светодиоды). Далее цифры означают номер ножки на Arduin'e, которая идет к процессору. На самом деле, если снять процессор с Arduin'ы и подключит на макетнице с этим кодом, то ничего не заработает, потому что я указал номер ножки на Arduin'e, а не на самом процессоре. Для того, чтобы узнать номер ножки нужно смотреть в Datasheet самого процессора. Там ножки будут обозначены, как (НАПРИМЕР, ob1dx) и т.д.

delay(), означает время загорания и потухания лампочки. Может быть любое значение, только не очень низкое, ибо они не будут моргать из-за высокой частоты. Вернее будут, но ваш глаз не воспримет это моргание. Время измеряется в миллисекундах.

pinMode означает, что я указываю какие конкретно лампочки будут выполняться.

Значения HIGH и LOW, означают загореться или потухнуть. Это все равно, что ВКЛ или ВЫКЛ на рубильнике.

digitalWrite означает, что мы вписываем значение для указанных лампочек. На их месте может быть все что угодно.

 

Прочитано 1557 раз Последнее изменение Среда, 17 Сентябрь 2014 00:38
Валентин Олегович

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

linuxmd.net

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

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

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

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

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

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