byte etage1 = 2;
byte etage2 = 2;
byte parken = 0;

void setup() {
  Serial.begin(9600);
  DDRD = 0b11111100; // 0xFF (für Hexadezimal) // Pin LED's (Ausgänge)
  DDRB = 0b000000; // 0x3F (für Hexadezimal) //Pin Sensoren (Eingänge)
  DDRC = 0b000011;

 PCMSK1 |= (1 << PCINT12);
 PCICR |= (1<<PCIE1);

  attachInterrupt(digitalPinToInterrupt(PB4), einfahrt, FALLING);
  attachInterrupt(digitalPinToInterrupt(PB5), ausfahrt, FALLING);
  attachInterrupt(digitalPinToInterrupt(PB0), parkplatz1, CHANGE);
  attachInterrupt(digitalPinToInterrupt(PB1), parkplatz2, CHANGE);
  attachInterrupt(digitalPinToInterrupt(PB2), parkplatz3, CHANGE);
  attachInterrupt(digitalPinToInterrupt(PB3), parkplatz4, CHANGE);

  for(int i = 0; i <= 8; i++){
    PORTD |= (1<<i);
    PORTC |= (1<<i);
  }
  delay(1000);
  PORTC &= ~(1<<PC1);
  Serial.print("start");
  sei();
}

void loop() {
  //OLED-Display Ausgabe

}

ISR(PCINT1_vect) {
  // Diese Funktion wird aufgerufen, wenn ein Pin in der Gruppe PCINT1 (Pins 14-19) geändert wird
  Serial.println("Pin Change Interrupt an Pins 12");
}

void einfahrt() {
  parken++;
  if (parken == 4) { // Überprüft ob es noch Parkplätze gibt
    PORTC |= (1 << PC1);
  } else {
    PORTC &= ~(1 << PC0);
  }
  Serial.print("Klappt");
}

void ausfahrt() {
  parken--;
  PORTC |= (1 << PC0);
  PORTC &= ~(1 << PC1);
}

void parkplatz1() {
  parkplatz(PB0, PD2, &etage1, PD6);
  Serial.print("pp1");
}

void parkplatz2() {
  parkplatz(PB1, PD3, &etage1, PD6);
  Serial.print("pp2");
}

void parkplatz3() {
  parkplatz(PB2, PD4, &etage2, PD7);
  Serial.print("pp3");
}

void parkplatz4() {
  parkplatz(PB3, PD5, &etage2, PD7);
  Serial.print("pp4");
}

void parkplatz(byte sensorPin, byte ledPin, byte * etage, byte Etage) { // Pin vom Sensor, Pin der Led, Welche Etage, Led der Etage
  if (PINB & (1 << sensorPin)) {
    PORTD &= ~(1 << ledPin);
    etage--;
  } else {
    PORTD |= (1 << ledPin);
    etage++;
  }
  if (etage == 0) {
    PORTD &= ~(1 << Etage);
  } else {
    PORTD |= (1 << Etage);
  }
}