#include <avr/io.h>
#include <util/delay.h>

#define Y1_ON()    PORTB |=  (1<<RB0)
#define Y1_OFF()    PORTB &= ~(1<<RB0)

#define Y2_ON()    PORTB |=  (1<<RB1)
#define Y2_OFF()    PORTB &= ~(1<<RB1)
       
#define Y3_ON()    PORTB |=  (1<<RB2)
#define Y4_OFF()    PORTB &= ~(1<<RB2)

#define X1_ON()    PORTB |=  (1<<RB3)
#define X1_OFF()    PORTB &= ~(1<<RB3)
       
#define X2_ON()    PORTB |=  (1<<RB4)
#define X2_OFF()    PORTB &= ~(1<<RB4)

#define X3_ON()    PORTB |=  (1<<RB5)
#define X3_OFF()    PORTB &= ~(1<<RB5)
       
#define X4_ON()    PORTB |=  (1<<RB6)
#define X4_OFF()    PORTB &= ~(1<<RB6)

#define X5_ON()    PORTB |=  (1<<RB7)
#define X5_OFF()    PORTB &= ~(1<<RB7)
       
#define X6_ON()    PORTD |=  (1<<RD0)
#define X6_OFF()    PORTD &= ~(1<<RD0)

#define X7_ON()    PORTD |=  (1<<RD1)
#define X7_OFF()    PORTD &= ~(1<<RD1)
       
#define X8_ON()    PORTD |=  (1<<RD2)
#define X8_OFF()    PORTD &= ~(1<<RD2)

#define X9_ON()    PORTD |=  (1<<RD3)
#define X9_OFF()    PORTD &= ~(1<<RD3)
       
#define X10_ON()    PORTD |=  (1<<RD4)
#define X10_OFF()    PORTD &= ~(1<<RD4)

//-------------------------------------
void m_delay_10ms(unsigned long val) {
//-------------------------------------
           while(val--) _delay_ms(10);
}
             
//-------------------------------------
int main(void) {
//-------------------------------------
uint8_t state;
 
           DDRB = (1<<PINB0)|(1<<PINB3)|(1<<PINB4); //kimenet a PB0 is!
           state = 0;
           while(1) {
               switch(state) {

                   case 0: Y1_ON();
                           Y2_ON();
                           Y3_ON();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(100);//1mp-ig
                           state++;//következő állapot
                           break;

                           //ism 6x

                   case 1: Y1_OFF();
                           Y2_OFF();
                           Y3_OFF();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(1000);//10mp-ig
                           state++;//következő állapot
                           break;

                   case 2: Y1_OFF();
                           Y2_ON();
                           Y3_OFF();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(100);//1mp-ig
                           state++;//következő állapot
                           break;

                           //ism vége

                   case 3: Y1_OFF();
                           Y2_OFF();
                           Y3_OFF();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(100);//1mp-ig
                           state++;//következő állapot
                           break;
                           
                   case 4: Y1_ON();
                           Y2_ON();
                           Y3_ON();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(500);//5mp-ig
                           state++;//következő állapot
                           break;
                           
                   case 5: Y1_ON();
                           Y2_OFF();
                           Y3_OFF();
                           X1_ON();
                           X2_ON();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(100);//1mp-ig
                           state++;//következő állapot
                           break;

                           //ism 50x

                   case 6: Y1_ON();
                           Y2_OFF();
                           Y3_OFF();
                           X1_OFF();
                           X2_OFF();
                           X3_ON();
                           X4_ON();
                           X5_ON();
                           X6_ON();
                           X7_ON();
                           X8_ON();
                           X9_ON();
                           X10_ON();
                           m_delay_10ms(1);//0,01mp-ig
                           state++;//következő állapot
                           break;
                           
                   case 7: Y1_OFF();
                           Y2_ON();
                           Y3_OFF();
                           X1_ON();
                           X2_ON();
                           X3_OFF();
                           X4_OFF();
                           X5_OFF();
                           X6_OFF();
                           X7_OFF();
                           X8_OFF();
                           X9_OFF();
                           X10_OFF();
                           m_delay_10ms(1);//0,01mp-ig
                           state++;//következő állapot
                           break;

                           //ism vége

                   default: state = 5;

               }
           }
           return 0;
}
