byte etage1 = 2;
byte etage2 = 2;
byte parken = 0;
void setup() {
Serial.begin(9600);
// Setze die DDR (Data Direction Register) für Ausgänge und Eingänge
DDRD = 0b11111100; // Pins 2-7 als Ausgänge für LEDs
DDRB = 0b00000000; // Pins 0-7 als Eingänge für Sensoren
DDRC = 0b000011; // Pins 0 und 1 als Ausgänge für Parkstatus LEDs
// Pin Change Interrupts aktivieren für die Gruppen
PCMSK0 |= (1 << PCINT0) | (1 << PCINT1) | (1 << PCINT2) | (1 << PCINT3) | (1 << PCINT4) | (1 << PCINT5); // Pins 8-13
PCICR |= (1 << PCIE0); // Aktiviert Pin Change Interrupts für Gruppe 0
// Interrupts für Einfahrt und Ausfahrt
attachInterrupt(digitalPinToInterrupt(PB4), einfahrt, FALLING);
attachInterrupt(digitalPinToInterrupt(PB5), ausfahrt, FALLING);
// Initialisiere alle LEDs
for (int i = 0; i <= 8; i++) {
PORTD |= (1 << i); // LEDs an allen Pins 0-7 einschalten
PORTC |= (1 << i); // LEDs an den Pins C0 und C1 einschalten
}
delay(1000);
PORTC &= ~(1 << PC1); // Initialisiere eine spezifische LED auf C1
Serial.println("Start");
sei(); // Globale Interrupts aktivieren
}
void loop() {
// Hier könnte die Anzeige auf einem OLED-Display oder eine andere Logik kommen
}
ISR(PCINT0_vect) {
// Diese Funktion wird aufgerufen, wenn ein Pin in der Gruppe PCINT0 (Pins 8-13) geändert wird
Serial.println("Pin Change Interrupt an Pins 8-13");
}
void einfahrt() {
parken++;
if (parken == 4) { // Überprüft, ob noch Parkplätze verfügbar sind
PORTC |= (1 << PC1); // Setzt die LED auf C1, wenn der Parkplatz voll ist
} else {
PORTC &= ~(1 << PC0); // Setzt die LED auf C0
}
Serial.println("Einfahrt registriert");
}
void ausfahrt() {
parken--;
PORTC |= (1 << PC0); // Setzt die LED auf C0
PORTC &= ~(1 << PC1); // Setzt die LED auf C1 zurück
Serial.println("Ausfahrt registriert");
}
void parkplatz1() {
parkplatz(PB0, PD2, &etage1, PD6);
Serial.println("Parkplatz 1");
}
void parkplatz2() {
parkplatz(PB1, PD3, &etage1, PD6);
Serial.println("Parkplatz 2");
}
void parkplatz3() {
parkplatz(PB2, PD4, &etage2, PD7);
Serial.println("Parkplatz 3");
}
void parkplatz4() {
parkplatz(PB3, PD5, &etage2, PD7);
Serial.println("Parkplatz 4");
}
void parkplatz(byte sensorPin, byte ledPin, byte *etage, byte Etage) {
if (PINB & (1 << sensorPin)) {
PORTD &= ~(1 << ledPin);
(*etage)--;
} else {
PORTD |= (1 << ledPin);
(*etage)++;
}
if (*etage == 0) {
PORTD &= ~(1 << Etage);
} else {
PORTD |= (1 << Etage);
}
}