LED RGB

#include „d:\Shemi\RGB\pic16f886\16f886.h“

#define red_pin Pin_b5

#define green_pin Pin_b4

#define blue_pin Pin_b3

int mode=1;

int16 adc_time=0;

int red,green,blue;

int rgb_index=1;

int poten=1;

int i,speed=10;

int exit=0; // izlizane momentalno ot tekusht rejim

#int_EXT

void  EXT_isr(void) 

{

read_adc(ADC_START_ONLY);

//mode++;   //smiana na rejima

exit=1; //izlizane ot tekushtia rejim

//delay_ms(3);//debounce

//if (input(pin_b0)==0)mode=12;

//else mode=1;

mode=12;

return;

}

#int_AD

void  AD_isr(void) 

{

speed=read_adc(ADC_READ_ONLY)>>4;

//red=poten;

//green=poten;

//blue=poten;

return;

}

#int_TIMER1

void  TIMER1_isr(void) 

{

}

#int_TIMER2

void  TIMER2_isr(void) 

{

rgb_index++;

if (rgb_index==0){

   if(red>0)output_high(red_pin);

   if(green>0)output_high(green_pin);

   if(blue>0)output_high(blue_pin);

return;

}

if (rgb_index>=red)output_low(red_pin);

if (rgb_index>=green)output_low(green_pin);

if (rgb_index>=blue)output_low(blue_pin);

//if(adc_time==0)read_adc(ADC_START_ONLY);

//adc_time++;

return;

}

#int_TIMER0

void  TIMER0_isr(void) 

{

}

void fade_spectrum();

void fade_red();

void fade_green();

void fade_blue();

void fade_red_green();

void fade_green_blue();

void fade_blue_red();

void flash_mode();

void jump_color();

void main()

{

   setup_adc_ports(sAN0|VSS_VDD);

   setup_adc(ADC_CLOCK_DIV_32);

   setup_spi(SPI_SS_DISABLED);

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);

   setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);

   setup_timer_2(T2_DIV_BY_1,110,1); //overflow pri stoinost 10

   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard

   setup_oscillator(OSC_8MHZ);

   //enable_interrupts(INT_EXT);

   enable_interrupts(INT_EXT_H2L );

   enable_interrupts(INT_AD);

   //enable_interrupts(INT_TIMER1);

   enable_interrupts(INT_TIMER2);

  // enable_interrupts(INT_TIMER0);

   enable_interrupts(GLOBAL);

   port_b_pullups (TRUE); //pullup za rbo prekyswane

   // TODO: USER CODE!!

   set_adc_channel(0);

   red=0;

    green=0;

    blue=255;

   While(1){

      switch(mode){

           case 1:{exit=0;speed=10;fade_spectrum();break;}

           case 2:{exit=0;fade_red();break;}

           case 3:{exit=0;fade_green();break;}

           case 4:{exit=0;fade_blue();break;}

           case 5:{exit=0;fade_red();fade_green();fade_blue();break;}

           case 6:{exit=0;fade_red();fade_green();break;}

           case 7:{exit=0;fade_red();fade_blue();break;}

           case 8:{exit=0;fade_green();fade_blue();break;}

           case 9:{exit=0;fade_red_green();break;}

           case 10:{exit=0;fade_green_blue();break;}

           case 11:{exit=0;fade_blue_red();break;}

           case 12:{exit=0;speed=128;jump_color();break;}

         //default:{delay_ms(1000);break;}

        }

       if (!input(pin_b0)==0)mode=1;

       if(mode>12)mode=1;

     // if(exit>0)  flash_mode();              

   }

}

void jump_color(){

red=254; green=0;blue=0;

delay_ms(speed);

red=254; green=254;blue=0;

delay_ms(speed);

red=0; green=254;blue=0;

delay_ms(speed);

red=0; green=254;blue=254;

delay_ms(speed);

red=0; green=0;blue=254;

delay_ms(speed);

red=254; green=0;blue=254;

delay_ms(speed);

}

void flash_mode(){

   green=0; blue=0;

   for(i=mode; i>0;i–)  {

   red=0;green=0; blue=0;

   delay_ms(50);

   red=128;green=255; blue=255;

   delay_ms(50);

   }

}

void fade_red(){

   red=0; green=0;blue=0;

   for(i=0;i<255&&exit==0;i++){

          red=i;

         delay_ms(speed);

       }

   for(i=254;i<255&&exit==0;i–){

          red=i;

          delay_ms(speed);

       }

}

void fade_green(){

red=0; green=0;blue=0;

   for(i=0;i<255&&exit==0;i++){

          green=i;

         delay_ms(speed);

       }

   for(i=254;i<255&&exit==0;i–){

          green=i;

          delay_ms(speed);

       }

}

void fade_blue(){

red=0; green=0;blue=0;

   for(i=0;i<255&&exit==0;i++){

          blue=i;

         delay_ms(speed);

       }

   for(i=254;i<255&&exit==0;i–){

          blue=i;

          delay_ms(speed);

       }

}

void fade_spectrum(){      

      red=0; green=0;blue=255;

      for(i=0;i<255&&exit==0;i++){

          red=i;

         delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          blue=i;

          delay_ms(speed);

       }

       for(i=0;i<255&&exit==0;i++){

          green=i;

          delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          red=i;

          delay_ms(speed);

       }

       for(i=0;i<255&&exit==0;i++){

          blue=i;

          delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          green=i;

          delay_ms(speed);

       }

}

void fade_red_green(){

red=255; green=0;blue=0;

      for(i=0;i<255&&exit==0;i++){

          green=i;

          delay_ms(speed);

       }  

      for(i=254;i<255&&exit==0;i–){

          red=i;

          delay_ms(speed);

       }  

      for(i=0;i<255&&exit==0;i++){

          red=i;

         delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          green=i;

          delay_ms(speed);

       }

}

void fade_green_blue(){

red=0; green=255;blue=0;

      for(i=0;i<255&&exit==0;i++){

          blue=i;

          delay_ms(speed);

       }  

       for(i=254;i<255&&exit==0;i–){

          green=i;

          delay_ms(speed);

       }

       for(i=0;i<255&&exit==0;i++){

          green=i;

          delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          blue=i;

          delay_ms(speed);

       }

}

void fade_blue_red(){

   red=0; green=0;blue=255;

      for(i=0;i<255&&exit==0;i++){

          red=i;

         delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          blue=i;

          delay_ms(speed);

       }

       for(i=0;i<255&&exit==0;i++){

          blue=i;

          delay_ms(speed);

       }

       for(i=254;i<255&&exit==0;i–){

          red=i;

          delay_ms(speed);

       }

}

/*      output_high(pin_b5);

       delay_ms(duty_time);

       output_low(pin_b5);

       output_high(pin_b4);

       delay_ms(duty_time);

       output_low(pin_b4);

       output_high(pin_b3);

       delay_ms(duty_time);

        output_low(pin_b3);    

*/

Оставете коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *