Загрузка данных
Лабораторная работа №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.