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);
}
}