Думаю что у тебя получится реализовать идею с гирляндами в педале, как сделаешь - похвались.
Она реализованна в педали тормаза. там один концевик, по этому же принцыпу два не сложно сделать. Третий уже есть на нетраль.
const int ledPins[] = {2, 3, 4, 5, 6}; // Пины для 5 диодов
const int buttonNextPin = 7; // Пин для кнопки "Следующий"
const int buttonPrevPin = 8; // Пин для кнопки "Предыдущий"
const int buttonSetPin = 9; // Пин для кнопки "Установить"
// Переменные для управления состоянием
int currentLed = 0; // Индекс текущего активного диода (начинаем с первого)
// Для хранения состояния кнопок
bool lastButtonNextState = LOW;
bool lastButtonPrevState = LOW;
bool lastButtonSetState = LOW;
void setup() {
// Инициализация пинов
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT); // Устанавливаем пины для диодов как выходы
}
pinMode(buttonNextPin, INPUT_PULLUP); // Кнопка "Следующий" с подтягивающим резистором
pinMode(buttonPrevPin, INPUT_PULLUP); // Кнопка "Предыдущий" с подтягивающим резистором
pinMode(buttonSetPin, INPUT_PULLUP); // Кнопка "Установить" с подтягивающим резистором
// Изначально выключаем все диоды
for (int i = 0; i < 5; i++) {
digitalWrite(ledPins[i], LOW);
}
digitalWrite(ledPins[currentLed], HIGH); // Включаем первый диод
}
void loop() {
// Чтение состояния кнопок
bool buttonNextState = digitalRead(buttonNextPin);
bool buttonPrevState = digitalRead(buttonPrevPin);
bool buttonSetState = digitalRead(buttonSetPin);
// Кнопка "Следующий" (переключаем на следующий диод)
if (buttonNextState == LOW && lastButtonNextState == HIGH) {
// Если кнопка была нажата и текущий диод не 5-й, переходим к следующему
if (currentLed < 4) { // Диод 5 игнорирует кнопку "Следующий"
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = (currentLed + 1) % 5; // Переходим к следующему диоду
digitalWrite(ledPins[currentLed], HIGH); // Включаем следующий диод
delay(200); // Задержка для предотвращения дребезга кнопки
}
}
// Кнопка "Предыдущий" (переключаем на предыдущий диод)
if (buttonPrevState == LOW && lastButtonPrevState == HIGH) {
// Если кнопка была нажата и текущий диод не 1-й, переходим к предыдущему
if (currentLed > 0) { // Диод 1 игнорирует кнопку "Предыдущий"
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = (currentLed + 4) % 5; // Переходим к предыдущему диоду
digitalWrite(ledPins[currentLed], HIGH); // Включаем предыдущий диод
delay(200); // Задержка для предотвращения дребезга кнопки
}
}
// Кнопка "Установить" (зажигаем диод 2)
if (buttonSetState == LOW && lastButtonSetState == HIGH) {
// Если кнопка была нажата, зажигаем диод под номером 2
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = 1; // Устанавливаем диод 2 (индекс 1)
digitalWrite(ledPins[currentLed], HIGH); // Включаем диод 2
delay(200); // Задержка для предотвращения дребезга кнопки
}
// Обновляем состояние кнопок
lastButtonNextState = buttonNextState;
lastButtonPrevState = buttonPrevState;
lastButtonSetState = buttonSetState;
}