#define DATA_PIN PA7 // DS
#define LATCH_PIN PA5 // STCP
#define CLOCK_PIN PA4 // SHCP
#define BUTTON_PIN PC13 // Кнопка
bool direction = true; // true = вправо, false = влево
int ledIndex = 0;
bool lastButtonState = HIGH;
unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 50;
void setup() {
pinMode(DATA_PIN, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
// В Wokwi важно задать подтяжку программно:
pinMode(BUTTON_PIN, INPUT);
digitalWrite(BUTTON_PIN, HIGH); // подтяжка к VCC вручную
updateShiftRegister(0x00);
}
void loop() {
bool reading = digitalRead(BUTTON_PIN);
// антидребезг
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (lastButtonState == HIGH && reading == LOW) {
direction = !direction;
}
}
lastButtonState = reading;
// бегущий огонь
updateShiftRegister(1 << ledIndex);
if (direction) {
ledIndex++;
if (ledIndex > 7) ledIndex = 0;
} else {
ledIndex--;
if (ledIndex < 0) ledIndex = 7;
}
delay(150);
}
void updateShiftRegister(uint8_t data) {
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, MSBFIRST, data);
digitalWrite(LATCH_PIN, HIGH);
}