Загрузка данных


Лабораторная работа №1
Тема: Управление группой светодиодов, подключенных к цифровым портам микроконтроллера.
1. Описание задания
Разработать аппаратно-программную схему управления автомобильным указателем поворота на базе микроконтроллера Arduino Uno.
 * Индикация выполняется в виде двух линеек по 4 светодиода («направо» и «налево»).
 * Режим работы — «бегущая строка с накоплением» (последовательное включение светодиодов с сохранением свечения предыдущих, затем сброс цикла).
 * Управление выбором направления осуществляется программно с помощью двух тактовых кнопок.
2. Спецификация и подключение компонентов
На основе принципиальной схемы (рис. 2.1) и монтажной схемы (рис. 2.2):
| Компонент | Пины Arduino Uno | Схема подключения |
|---|---|---|
| Группа 1 (Поворот налево) | Пины 13, 12, 11, 10 | Аноды через токоограничивающие резисторы (220 Ом) к цифровым выходам, катоды — к GND |
| Группа 2 (Поворот направо) | Пины 9, 8, 7, 6 | Аноды через токоограничивающие резисторы (220 Ом) к цифровым выходам, катоды — к GND |
| Кнопка S1 (Влево) | Пин 3 | Подключение по схеме с подтяжкой к питанию/земле (или INPUT_PULLUP с замыканием на GND) |
| Кнопка S2 (Вправо) | Пин 2 | Аналогично кнопке S1 |
3. Описание блок-схемы алгоритма
Алгоритм соответствует типовой структуре управления периферией (рис. 2.3):
 * Начало — старт выполнения программы.
 * Инициализация — объявление массивов пинов, задание режимов работы портов (OUTPUT для LED, INPUT_PULLUP для кнопок).
 * Проверка условия 1: Нажата ли кнопка поворота влево (кнопка 1)?
   * Да: Выполнить цикл «бегущей строки с накоплением» для группы светодиодов 1 (пины 13–10).
   * Нет: Перейти к следующей проверке.
 * Проверка условия 2: Нажата ли кнопка поворота вправо (кнопка 2)?
   * Да: Выполнить цикл «бегущей строки с накоплением» для группы светодиодов 2 (пины 9–6).
   * Нет: Отключить все светодиоды / оставаться в режиме ожидания.
 * Завершение цикла и возврат к повторному опросу кнопок.
4. Текст программы (Arduino C++)
// Определение пинов для светодиодов
const uint8_t leftLeds[4]  = {13, 12, 11, 10}; // Группа 1: Левый поворотник
const uint8_t rightLeds[4] = {9, 8, 7, 6};     // Группа 2: Правый поворотник

// Определение пинов кнопок
const uint8_t btnLeft  = 3; // Кнопка S1
const uint8_t btnRight = 2; // Кнопка S2

// Задержка шага накопления (в миллисекундах)
const unsigned int stepDelay = 150;

void setup() {
  // Настройка цифровых портов светодиодов на вывод
  for (int i = 0; i < 4; i++) {
    pinMode(leftLeds[i], OUTPUT);
    digitalWrite(leftLeds[i], LOW);
    
    pinMode(rightLeds[i], OUTPUT);
    digitalWrite(rightLeds[i], LOW);
  }

  // Настройка портов кнопок на вход с внутренней подтяжкой к VCC
  // (при нажатии на кнопку уровень сигнала становится LOW)
  pinMode(btnLeft, INPUT_PULLUP);
  pinMode(btnRight, INPUT_PULLUP);
}

// Функция анимации бегущей строки с накоплением
void runAccumulationSequence(const uint8_t pins[4]) {
  // Последовательное зажигание светодиодов с накоплением
  for (int i = 0; i < 4; i++) {
    digitalWrite(pins[i], HIGH);
    delay(stepDelay);
  }
  
  // Пауза при полностью светящейся полосе
  delay(100);

  // Сброс (выключение всех диодов полосы)
  for (int i = 0; i < 4; i++) {
    digitalWrite(pins[i], LOW);
  }
  delay(150);
}

// Функция гашения всех светодиодов
void turnOffAll() {
  for (int i = 0; i < 4; i++) {
    digitalWrite(leftLeds[i], LOW);
    digitalWrite(rightLeds[i], LOW);
  }
}

void loop() {
  // Считывание состояния кнопок (активный уровень - LOW)
  bool leftActive  = (digitalRead(btnLeft) == LOW);
  bool rightActive = (digitalRead(btnRight) == LOW);

  if (leftActive) {
    turnOffAll();
    runAccumulationSequence(leftLeds);
  } 
  else if (rightActive) {
    turnOffAll();
    runAccumulationSequence(rightLeds);
  } 
  else {
    turnOffAll();
  }
}

5. Вывод
В ходе выполнения работы изучены принципы коммутации и программного управления цифровыми портами ввода-вывода микроконтроллера ATmega328P (платформа Arduino Uno). Разработан и протестирован алгоритм эффекта «бегущей строки с накоплением», реализующий функциональность динамического указателя поворота с обработкой внешних управляющих сигналов от кнопочных переключателей.
6. Список источников
 * Документация Arduino Reference — pinMode(), digitalWrite(), digitalRead().
 * Методические указания к лабораторным работам по курсу «Программирование».
 * Data Sheet ATmega328P: 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash.