// Laufrichtung initialisieren
bool shiftRight = true;

void setup() {
  GPIOA->MODER = 0;     // Seitzt alle PA auf 0 (Input)
  GPIOA->MODER = 21845; // Konfiguriert PA0 bis PA7 als output (01 auf jedem MODR)

  GPIOB->MODER = 0;     // Setzt PB0 und PB1 auf 0 (Input)

  GPIOB->PUPDR = 10;    // Aktiviert Pull-Down-Widerstände für PB0 und PB1 (10 in jedem PUPDR-Bitpaar)

  GPIOA->ODR = 1;       // Schalte die erste LED PA0 ein
}

void loop() {
  // Prüfe Tasterstatus zur Laufrichtungssteuerung
  if ((GPIOB->IDR & 1) != 0) {  // PB0 gedrückt -> Rechtsverschiebung
    shiftRight = true;
  }
  else if ((GPIOB->IDR & 2) != 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 = 128;  // Setzt das höchste Bit bei Ende des Zyklus
    }
  } else {
    // Linksschiebung
    GPIOA->ODR <<= 1;
    if (GPIOA->ODR == 128) {
      GPIOA->ODR = 1;  // Setzt das niedrigste Bit bei Ende des Zyklus
    }
  }

  // Wartezeit für die Sichtbarkeit des Lauflichts
  delay(200);
}