// Laufrichtung initialisieren
bool shiftRight = true;
void setup() {
// Konfiguration der Pins PA0 bis PA7 als Ausgänge für LEDs
GPIOA->MODER &= ~(0xFFFF); // Setzt PA0 bis PA7 auf 0 (Input)
GPIOA->MODER |= 0x5555; // Konfiguriert PA0 bis PA7 als Output (01 in jedem MODER-Bitpaar)
// Konfiguration der Pins PB0 und PB1 als Eingänge für Taster
GPIOB->MODER &= ~(0xF); // MODER-Bits für PB0 und PB1 löschen
GPIOB->MODER |= 0x0; // Setzt PB0 und PB1 auf 0 (Input)
GPIOB->PUPDR &= ~(0xF); // Löscht Pull-up/down-Konfiguration
GPIOB->PUPDR |= 0xA; // Aktiviert Pull-Down-Widerstände für PB0 und PB1 (10 in jedem PUPDR-Bitpaar)
// Initialisiere die LEDs mit nur der ersten LED eingeschaltet
GPIOA->ODR = 0x80;
}
void loop() {
// Prüfe Tasterstatus zur Laufrichtungssteuerung
if ((GPIOB->IDR & 0x01) != 0) { // PB0 gedrückt -> Rechtsverschiebung
shiftRight = true;
}
else if ((GPIOB->IDR & 0x02) != 0) { // PB1 gedrückt -> Linksschiebung
shiftRight = false;
}
// LED-Steuerung: Laufrichtung abhängig von shiftRight
if (shiftRight) {
// Rechtsverschiebung
GPIOA->ODR >>= 1;
if (GPIOA->ODR == 0) {
GPIOA->ODR = 0x80; // Setzt das höchste Bit bei Ende des Zyklus
}
} else {
// Linksschiebung
GPIOA->ODR <<= 1;
if (GPIOA->ODR == 0x80) {
GPIOA->ODR = 0x01; // Setzt das niedrigste Bit bei Ende des Zyklus
}
}
// Wartezeit für die Sichtbarkeit des Lauflichts
delay(200);
}
Loading
st-nucleo-c031c6
st-nucleo-c031c6