#include "D:\sdf\c\ancsivegleges\ancsi.h"


#define R1LED PIN_A0
#define G1LED PIN_A1
#define B1LED PIN_A2

#define R2LED PIN_A3
#define G2LED PIN_A4
#define B2LED PIN_A5

#define R3LED PIN_B1
#define G3LED PIN_B2
#define B3LED PIN_B3

#define R4LED PIN_B4
#define G4LED PIN_B5
#define B4LED PIN_B6


#define BUTTON PIN_B0



int8 pnum;            //tárolja, hogy mely effekt menjen

#INT_EXT
void ext_isr()               //megszakítás, növeli a pnumot és egy kicsit világít, hogy tudjuk megszakítás van
{
int p;

   p=input_a();
   ++pnum;
   output_a(0xFF);
   delay_ms(2000);
   output_a(p);
   if (pnum==3) pnum=0;


}




void kiir( int8 r1,int8 r2,int8 r3,int8 r4,
         int8 g1,int8 g2,int8 g3,int8 g4,
         int8 b1,int8 b2,int8 b3,int8 b4 )
{
       int8 i;                  //4 rgb ledet fogok külön irányítani, ez a pwm

   disable_interrupts(INT_EXT);

         output_a(0xFF);
         output_b(0xFF);

      for(i=255; i!=0; --i)
          {

            delay_us(25);

            if (r1==0) output_low(R1LED);
            if (g1==0) output_low(G1LED);
            if (b1==0) output_low(B1LED);

            if (r2==0) output_low(R2LED);
            if (g2==0) output_low(G2LED);
            if (b2==0) output_low(B2LED);

            if (r3==0) output_low(R3LED);
            if (g3==0) output_low(G3LED);
            if (b3==0) output_low(B3LED);

            if (r4==0) output_low(R4LED);
            if (g4==0) output_low(G4LED);
            if (b4==0) output_low(B4LED);

            --r1;
            --r2;
            --r3;
            --r4;
            --g1;
            --g2;
            --g3;
            --g4;
            --b1;
            --b2;
            --b3;
            --b4;
            }

   enable_interrupts(INT_EXT);
}


int elso()
{
               //elso effekt, nincs értelme ennyi változónak, de később majd átírom azért van így
               // ez az ahol működik az interrupt

      int8 i;
      int8 r1=1;
      int8 r2=1;
      int8 r3=1;
      int8 r4=1;

      int8 g1=1;
      int8 g2=1;
      int8 g3=1;
      int8 g4=1;

      int8 b1=1;
      int8 b2=1;
      int8 b3=1;
      int8 b4=1;

      output_a(0x00);


     for (i=180; i!=0; --i)
      {
   kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
   kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      ++r1;
      ++r2;
      ++r3;
      ++r4;

      }


   while(pnum==0)
      {


      for (i=110; i!=0; --i)
         {
      kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      ++b1;
      ++b2;
      ++b3;
      ++b4;

         }

      for (i=100; i!=0; --i)
         {
    kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
    kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      ++g1;
      ++g2;
      ++g3;
      ++g4;

}

      for (i=180; i!=0; --i)
         {
   kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
   kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      --r1;
      --r2;
      --r3;
      --r4;
}

      for (i=110; i!=0; --i)
         {
  kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
  kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      --b1;
      --b2;
      --b3;
      --b4;

}



     for (i=180; i!=0; --i){
     kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
     kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      ++r1;
      ++r2;
      ++r3;
      ++r4;

      }

    for (i=100; i!=0; --i)
         {
  kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
  kiir(r1,r2,r3,r4,g1,g2,g3,g4,b1,b2,b3,b4);
      --g1;
      --g2;
      --g3;
      --g4;
         }

     }

return 0;

}

int masodik()
{

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);            //itt már nem megy az interrupt


output_high(G1LED);
delay_ms(500);
output_a(0);
delay_ms(500);

return 0;
}

int harmadik()
{

enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);         //és itt sem (elso effektben akárhányszor érvényre juthat)

output_a(0xff);
delay_ms(100);
output_a(0x00);
delay_ms(100);
output_a(0xff);
delay_ms(100);
output_a(0x00);
delay_ms(100);


return 0;
}

void main()
{



      pnum=0;

      ext_int_edge(L_TO_H);

      setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
      setup_timer_1(T1_DISABLED);
      setup_timer_2(T2_DISABLED,0,1);
      setup_comparator(NC_NC_NC_NC);
      setup_vref(FALSE);


   port_b_pullups(TRUE);
   set_tris_a(0);
   set_tris_b(0b00000001);

   output_a(0xff);

   delay_ms(1000);
   output_a(0);

   clear_interrupt(INT_EXT);
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

while(1)
{

 switch (pnum)
   {                           //melyik effekt
   case 0: elso(); break;
   case 1: masodik(); break;
   case 2: harmadik(); break;
   }

 }


   }







