Advertisement
Electgpl

PIC - Arbolito de Navidad RGB

Dec 4th, 2016
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 KB | None | 0 0
  1. #include <16F628a.h>
  2. #FUSES NOWDT
  3. #FUSES INTRC_IO
  4. #FUSES NOMCLR
  5. #use delay(int=4000000)
  6. #int_timer0
  7. void pwm_duty(int pwm0, int pwm1, int pwm2){
  8.    int cont;
  9.    if(cont>15)
  10.       cont=0;
  11.    else
  12.       cont++;
  13.    if(cont>0&&cont<pwm0)
  14.       output_high(PIN_B0);
  15.    else
  16.       output_low(PIN_B0);
  17.    if(cont>0&&cont<pwm1)
  18.       output_high(PIN_B1);
  19.    else
  20.       output_low(PIN_B1);
  21.    if(cont>0&&cont<pwm2)
  22.       output_high(PIN_B2);
  23.    else
  24.       output_low(PIN_B2);
  25.    set_timer0(0);      
  26. }
  27. void fadeRGB(void){
  28.    int r, g, b, i;
  29.    for(b=0;b<16;b++){
  30.       pwm_duty(16,0,b);
  31.       for(i=0;i<8;i++){
  32.          output_a(i);
  33.          delay_ms(1);
  34.       }
  35.    }
  36.    for(r=16;r>1;r--){
  37.       pwm_duty(r,0,16);
  38.       for(i=0;i<8;i++){
  39.          output_a(i);
  40.          delay_ms(1);
  41.       }
  42.    }
  43.    for(g=0;g<16;g++){
  44.       pwm_duty(0,g,16);
  45.       for(i=0;i<8;i++){
  46.          output_a(i);
  47.          delay_ms(1);
  48.       }
  49.    }
  50.    for(b=16;b>1;b--){
  51.       pwm_duty(0,16,b);
  52.       for(i=0;i<8;i++){
  53.          output_a(i);
  54.          delay_ms(1);
  55.       }
  56.    }
  57.    for(r=0;r<16;r++){
  58.       pwm_duty(r,16,0);
  59.       for(i=0;i<8;i++){
  60.          output_a(i);
  61.          delay_ms(1);
  62.       }
  63.    }
  64.    for(g=16;g>1;g--){
  65.       pwm_duty(16,g,0);
  66.       for(i=0;i<8;i++){
  67.          output_a(i);
  68.          delay_ms(1);
  69.       }
  70.    }
  71. }
  72. void mixRGB(void){
  73.    pwm_duty(8,8,8);
  74.    output_a(0b00000000);
  75.    delay_ms(1);
  76.    pwm_duty(0,0,16);
  77.    output_a(0b00000001);
  78.    delay_ms(1);
  79.    pwm_duty(0,16,0);
  80.    output_a(0b00000010);
  81.    delay_ms(1);
  82.    pwm_duty(0,16,16);
  83.    output_a(0b00000011);
  84.    delay_ms(1);
  85.    pwm_duty(16,0,0);
  86.    output_a(0b00000100);
  87.    delay_ms(1);
  88.    pwm_duty(16,0,16);
  89.    output_a(0b00000101);
  90.    delay_ms(1);
  91.    pwm_duty(16,16,0);
  92.    output_a(0b00000110);
  93.    delay_ms(1);
  94.    pwm_duty(16,16,16);
  95.    output_a(0b00000111);
  96.    delay_ms(1);
  97. }
  98. void flashRGB(void){
  99.    pwm_duty(8,8,8);
  100.    output_a(0b00000000);
  101.    delay_ms(100);
  102.    pwm_duty(0,0,16);
  103.    output_a(0b00000001);
  104.    delay_ms(100);
  105.    pwm_duty(0,16,0);
  106.    output_a(0b00000010);
  107.    delay_ms(100);
  108.    pwm_duty(0,16,16);
  109.    output_a(0b00000011);
  110.    delay_ms(100);
  111.    pwm_duty(16,0,0);
  112.    output_a(0b00000100);
  113.    delay_ms(100);
  114.    pwm_duty(16,0,16);
  115.    output_a(0b00000101);
  116.    delay_ms(100);
  117.    pwm_duty(16,16,0);
  118.    output_a(0b00000110);
  119.    delay_ms(100);
  120.    pwm_duty(16,16,16);
  121.    output_a(0b00000111);
  122.    delay_ms(100);
  123. }
  124. void coloresRGB(int r, int g, int b){
  125.    int i;
  126.    for(i=0;i<8;i++){
  127.       pwm_duty(r,g,b);
  128.       for(i=0;i<8;i++){
  129.          output_a(i);
  130.          delay_ms(1);
  131.       }
  132.    }
  133. }
  134. void main(){
  135.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  136.    set_timer0(0);
  137.    enable_interrupts(INT_TIMER0);
  138.    enable_interrupts(GLOBAL);
  139.    while(true){
  140.       int i, r, g, b;
  141.       for(i=0;i<5;i++)
  142.          fadeRGB();
  143.       for(i=0;i<100;i++)
  144.          mixRGB();
  145.       for(i=0;i<10;i++)
  146.          flashRGB();
  147.       for(r=0;r<8;r++)
  148.          for(i=0;i<100;i++)
  149.             coloresRGB(b,g,r);
  150.       for(g=0;g<8;g++)
  151.          for(i=0;i<100;i++)
  152.             coloresRGB(b,g,r);
  153.       for(b=0;b<8;b++)
  154.          for(i=0;i<100;i++)
  155.             coloresRGB(b,g,r);
  156.    }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement