Новости проекта
Разъяснение ситуации с рекламой и предупреждением МАРТ
Обновленные функции Schools.by
Голосование
Пользуетесь ли вы мобильным приложением Schools.by?
Всего 0 человек

Светодиодная гирлянда

Дата: 30 января 2017 в 13:04, Обновлено 3 февраля 2017 в 10:06

Светодиодная гирлянда

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

Данный проект светодиодной гирлянды на Ардуино хорошо подходит для начинающих. Схема отличается своей простотой и содержит минимум элементов.

Материалы:
- Светодиоды 12 шт (3 каждого цвета)
Arduino
- Провод одножильный (для каркаса)

- Крона

- Кнопка
 

Объединены светодиоды в четыре группы, каждая из трёх с общим анодом. И ряды  и группы идут на цифровые выводы Arduino (можно, ряды  - на цифровые выводы, а группы на аналоговые). 

Схема гирлянды:


 

Скетч

#include <avr/pgmspace.h>

#define SPEED_DELAY 200

#define LEDS 4

#define ROWS 3

#define MAX_LEVEL 64

int ledPins[] = {10, 11, 9, 3};

int rowPins[] = {5, 6, 7};

#define SCRIPT_STEPS 12+13+7+8

const unsigned char script[] PROGMEM = {

  B1000, B1000, B1000,

  B0100, B0100, B0100,

  B0010, B0010, B0010,

  B0001, B0001, B0001,

  B1000, B1000, B1000,

  B0100, B0100, B0100,

  B0010, B0010, B0010,

  B0001, B0001, B0001,

  B1000, B1000, B1000,

  B0100, B0100, B0100,

  B0010, B0010, B0010,

  B0001, B0001, B0001,

  B1111, B0000, B0000,

  B0000, B1111, B0000,

  B0000, B0000, B1111,

  B0000, B1111, B1111,

  B1111, B1111, B1111,

  B1111, B1111, B0000,

  B1111, B0000, B0000,

  B0000, B1111, B0000,

  B0000, B0000, B1111,

  B0000, B1111, B1111,

  B1111, B1111, B1111,

  B1111, B1111, B0000,

  B1111, B0000, B0000,

  /* 

  B0000, B1111, B0000,

  B1111, B0000, B0000,

  B0000, B1111, B0000,

  B0000, B0000, B1111,

  B0000, B1111, B0000,

  B1111, B0000, B0000,

  B0000, B1111, B0000,

  B0000, B0000, B1111,

  */

  B1000, B1000, B1000,

  B1100, B1100, B1100,

  B1110, B1110, B1110,

  B1111, B1111, B1111,

  B0111, B0111, B0111,

  B0011, B0011, B0011,

  B0001, B0001, B0001,

  B1001, B1001, B1001,

  B1100, B1100, B1100,

  B0110, B0110, B0110,

  B0011, B0011, B0011,

  B1001, B1001, B1001,

  B1100, B1100, B1100,

  B0110, B0110, B0110,

  B0011, B0011, B0011,

};

void setup() {

  for (byte ii=0; ii<LEDS; ii++) {

    pinMode(ledPins[ii], OUTPUT);

    analogWrite(ledPins[ii], 0);

  }

  for (byte ii=0; ii<ROWS; ii++) {

    pinMode(rowPins[ii], OUTPUT);

    digitalWrite(rowPins[ii], HIGH);

  }

}

int scriptIdx = 0;

int scriptStep = 0;

int scriptStepInc = 1;

void wire_test() {

  // All LEDs are on to test your soldering skills

  for (byte ii=0; ii<LEDS; ii++) {

    pinMode(ledPins[ii], OUTPUT);

    analogWrite(ledPins[ii], MAX_LEVEL);

  }

  for (byte ii=0; ii<ROWS; ii++) {

    pinMode(rowPins[ii], OUTPUT);

    digitalWrite(rowPins[ii], LOW);

  }

}

void loop() {

  unsigned char leds[ROWS];

  memcpy_P(leds, script + scriptIdx, ROWS);

  unsigned long newTime = millis() + SPEED_DELAY;

  while (millis() < newTime) {

    for (byte ii=0; ii<ROWS; ii++) {

      for (byte ik=0; ik<LEDS; ik++) {

        analogWrite(ledPins[ik], ((leds[ii]>>ik) & 1) ? MAX_LEVEL : 0);

      }

      digitalWrite(rowPins[ii], LOW);

      delay(5);

      digitalWrite(rowPins[ii], HIGH);

    }                                                                                                                                   

  }

  scriptStep += scriptStepInc;

  if ((scriptStep >= SCRIPT_STEPS) || (scriptStep <= 0)) {

    scriptStepInc = -scriptStepInc;

    scriptStep += scriptStepInc;

  }

  scriptIdx += scriptStepInc * ROWS;

}

Комментарии:
Оставлять комментарии могут только авторизованные посетители.