#include <avr/io.h>
#include <avr/interrupt.h>
volatile int luminosity=0;
volatile int stage=0;
volatile int button_pressed =0;
ISR(TIMER1_COMPA_vect)//when 5ms passes
{
button_pressed=0;
TCCR1B=0b00001000; //turn off the timer
}
ISR(INT0_vect)
{
if(stage < 9 && button_pressed ==0)
{
stage+=1;
luminosity+=28;
button_pressed =1;
TCCR1B=0b00001100; // turn on the timer
}
}
ISR(INT1_vect)
{
if(stage>0 && button_pressed == 0)
{
stage-=1;
luminosity-=28;
button_pressed =1;
TCCR1B=0b00001100; // turn on the timer
}
}
int main(void){
init();
DDRD=0b00100000; // - pin2 and 3 as inputs, 5 as output
PORTD=0b00001100; // - use pullup resistor on 2 and 3
EIMSK=0x03; // - activate extint on both pins
EICRA=0xA; //-falling edge interrupt
//0b00000101;
//timer
TCCR1A=0b00000000;// ---- \/
TCCR1B=0b00001000; //- compare mode
OCR1A = 0b000100110111; // 311 in binary - count at 5ms
TIMSK1 |= (1 << OCIE1A); // compare-interrupt
sei();
while (true)
{
analogWrite(5,luminosity);
if(stage==0)
{
DDRD=0<<7;
DDRB=0b00111111;
}
else if(stage==1)
{
DDRD=0<<7;
DDRB=0b00011000;
}
else if(stage==2)
{
DDRD=1<<7;
DDRB=0b00110110;
}
else if(stage==3)
{
DDRD=1<<7;
DDRB=0b00111100;
}
else if(stage==4)
{
DDRD=1<<7;
DDRB=0b00011001;
}
else if(stage==5)
{
DDRD=1<<7;
DDRB=0b00101101;
}
else if(stage==6)
{
DDRD=1<<7;
DDRB=0b00101111;
}
else if(stage==7)
{
DDRD=0<<7;
DDRB=0b00111000;;
}
else if(stage==8)
{
DDRD=1<<7;
DDRB=0b00111111;
}
else if(stage==9)
{
DDRD=1<<7;
DDRB=0b00111101;
}
}
return 0;
}