#include <Arduino.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
// Um die Funktionen wie set_bit clear_bit und toggle_bit zu verwenden,
// muss man diese zuerst definieren.
#define set_bit(var,bit) ((var))|=(1<<(bit))
#define clear_bit(var,bit)((var)&=(unsigned)~(1<<(bit)))
#define toggle_bit(var,bit)((var)^=(1<<(bit)))
void setup() {
// put your setup code here, to run once:
DDRD=0B11111111; // Data Director Register
}
void Normalbetrieb(void){
set_bit(PORTD,2);
clear_bit(PORTD,1);
}
void Interrupt(void) {
// put your main code here, to run repeatedly:
clear_bit(PORTD,2);
toggle_bit(PORTD,1);
_delay_ms(1000);
toggle_bit(PORTD,1);
_delay_ms(1000);
toggle_bit(PORTD,1);
_delay_ms(1000);
toggle_bit(PORTD,1);
_delay_ms(1000);
}
ISR (INT0_vect){ // INT0 ... External Interrupt Request/ Pin 21, PORTD0
cli();
Interrupt();
sei();
}
void loop(){
set_bit(PORTD,0); // Ist im DDR PortD Pin0 als Ausgang definiert, kann man mit diesem Befehl den Pull-Up Widerstand eingeschaltet
set_bit(EIMSK, INT0); // Interrupt 0 wird als Interrupt erkannt.
//clear_bit(EICRA,0); // wann der Interrupt auslöst.
//clear_bit(EICRA,1); // wann der Interrupt auslöst.
//sei(); // Interrupts werden aktiviert
Normalbetrieb(); // Normalbetrieb wird aktiviert
}